Create MVP Pandoc->Rust compiler
Dependencies
- [2]
BSJYWOYSImplement MVP Typst embedding - [*]
C73UJ7ZYCreate simple `xilem_html` demo - [*]
BMG4FSHNAdd basic `clap` support - [*]
REI53XR4Render argument state as HTML - [*]
G4Q265KP
Change contents
- edit in Cargo.lock at line 124
[[package]]name = "either"version = "1.9.0"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07" - edit in Cargo.lock at line 169
[[package]]name = "itertools"version = "0.8.2"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "f56a2d0bc861f9165be4eb3442afd3c236d8a98afd426f65d92324ae1091a484"dependencies = ["either",] - edit in Cargo.lock at line 224
"typst_rust_gen", - edit in Cargo.lock at line 236
[[package]]name = "pandoc"version = "0.8.10"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "2eb8469d27ed9fd7925629076a3675fea964c3f44c49662bdf549a8b7ddf0820"dependencies = ["itertools",][[package]]name = "pandoc_ast"version = "0.8.5"source = "registry+https://github.com/rust-lang/crates.io-index"checksum = "56f639abb4745696d0f9c43da6818011da7ba7a4923bfe2d18d28dfdc5a595c9"dependencies = ["serde","serde_derive","serde_json",] - edit in Cargo.lock at line 417
name = "typst_rust_gen"version = "0.1.0"dependencies = ["pandoc","pandoc_ast",][[package]] - edit in Cargo.toml at line 1
[workspace]memebers = ["src", "crates/*"] - edit in Cargo.toml at line 20
typst_rust_gen = { path = "crates/typst_rust_gen" } - file addition: crates[7.1]
- file addition: typst_rust_gen[0.1132]
- file addition: src[0.1160]
- file addition: lib.rs[0.1177]
use std::path::Path;use pandoc::{OutputFormat, PandocOutput};use pandoc_ast::{Block, Inline};pub fn transform_pandoc(path: &Path) -> String {let mut pandoc = pandoc::new();pandoc.add_input(path);pandoc.set_output_format(OutputFormat::Json, Vec::new());pandoc.set_output(pandoc::OutputKind::Pipe);let output = if let PandocOutput::ToBuffer(json) = pandoc.execute().unwrap() {json} else {panic!("Pandoc produced unexpected output format");};let ast = pandoc_ast::Pandoc::from_json(&output);dbg!(&ast);let blocks: String = ast.blocks.iter().map(transform_block).collect::<Vec<String>>().join(", ");dbg!(&blocks);blocks}fn transform_block(block: &Block) -> String {match block {Block::Header(level, _attr, inlines) => {let transformed_inlines = transform_inlines(inlines);format!(r#"el::h{}("{}")"#, level, transformed_inlines)}Block::Para(inlines) => {let transformed_inlines = transform_inlines(inlines);format!(r#"el::p("{}")"#, transformed_inlines)}_ => todo!(),}}fn transform_inline(inline: &Inline) -> String {match inline {Inline::Str(text) => text.to_owned(),Inline::Space => String::from(" "),_ => todo!(),}}fn transform_inlines(inlines: &Vec<Inline>) -> String {let transformed: String = inlines.iter().map(transform_inline).collect();dbg!(&transformed);transformed} - file addition: examples[0.1160]
- file addition: basic.rs[0.2807]
use std::path::Path;use typst_rust_gen::transform_pandoc;fn main() {dbg!(transform_pandoc(Path::new("docs/test.typ")));} - file addition: Cargo.toml[0.1160]
[package]name = "typst_rust_gen"version = "0.1.0"edition = "2021"[dependencies]pandoc = "0.8.10"pandoc_ast = "0.8.5"