lex-babel 0.8.2

Format conversion library for the lex format
Documentation
#[cfg(all(unix, feature = "native-export"))]
mod unix {
    use lex_babel::format::{Format, SerializedDocument};
    use lex_babel::formats::pdf::PdfFormat;
    use lex_core::lex::transforms::standard::STRING_TO_AST;
    use std::collections::HashMap;
    use std::fs;
    use std::os::unix::fs::PermissionsExt;
    use tempfile::tempdir;

    fn write_stub_chrome() -> (tempfile::TempDir, std::path::PathBuf) {
        let dir = tempdir().unwrap();
        let script_path = dir.path().join("fake-chrome.sh");
        let script = r#"#!/bin/sh
OUTPUT=""
for arg in "$@"; do
  case $arg in
    --print-to-pdf=*)
      OUTPUT="${arg#*=}"
      ;;
  esac
done
if [ -z "$OUTPUT" ]; then
  echo "missing output" >&2
  exit 1
fi
printf '%%PDF-1.7\n%%%%EOF\n' > "$OUTPUT"
exit 0
"#;
        fs::write(&script_path, script).unwrap();
        let mut perms = fs::metadata(&script_path).unwrap().permissions();
        perms.set_mode(0o755);
        fs::set_permissions(&script_path, perms).unwrap();
        (dir, script_path)
    }

    #[test]
    fn pdf_renderer_uses_chrome_stub() {
        let (_dir, chrome_stub) = write_stub_chrome();
        let prev = std::env::var("LEX_CHROME_BIN").ok();
        std::env::set_var("LEX_CHROME_BIN", &chrome_stub);

        let lex_src = "Paragraph in pdf test.\n";
        let doc = STRING_TO_AST.run(lex_src.to_string()).unwrap();
        let format = PdfFormat::default();
        let mut options = HashMap::new();
        options.insert("size-mobile".to_string(), "true".to_string());

        let result = format.serialize_with_options(&doc, &options).unwrap();
        match result {
            SerializedDocument::Binary(bytes) => {
                assert!(bytes.starts_with(b"%PDF"));
            }
            _ => panic!("Expected binary PDF output"),
        }

        if let Some(prev) = prev {
            std::env::set_var("LEX_CHROME_BIN", prev);
        } else {
            std::env::remove_var("LEX_CHROME_BIN");
        }
    }
}

#[cfg(not(all(unix, feature = "native-export")))]
#[test]
fn pdf_stub_skipped() {
    eprintln!("Skipping PDF tests (native-export feature or Unix required)");
}