Nest Xilem tuples longer than 10 elements
Dependencies
- [2]
GYTRFADRSupport Typst subdirectories - [3]
FLIMM2YMReturn `syn::Expr` instead of `&str` from `transform_inline` - [4]
2N3KOCP7Create MVP Pandoc->Rust compiler - [5]
BA5Y6VSEOutput Rust code using `syn`
Change contents
- edit in crates/typst_rust_gen/src/lib.rs at line 9
const MAX_TUPLE_LEN: usize = 10; - edit in crates/typst_rust_gen/src/lib.rs at line 59
let mut args: Punctuated<syn::Expr, syn::token::Comma> = Punctuated::new();args.push(self.expression); - replacement in crates/typst_rust_gen/src/lib.rs at line 63
args,args: Punctuated::from_iter([self.expression].into_iter()), - edit in crates/typst_rust_gen/src/lib.rs at line 369
dbg!(inline); - replacement in crates/typst_rust_gen/src/lib.rs at line 372
pandoc_ast::Inline::Space => syn::Expr::Lit(literal_string(" ")),pandoc_ast::Inline::Space | pandoc_ast::Inline::SoftBreak => {syn::Expr::Lit(literal_string(" "))} - edit in crates/typst_rust_gen/src/lib.rs at line 376
}}// Xilem only supports tuples of max length 10, so split up inlines into nested tuples until it fitsfn split_tuple(expressions: Vec<syn::Expr>) -> Vec<syn::Expr> {if expressions.len() <= MAX_TUPLE_LEN {return expressions;}let mut elements: Vec<syn::Expr> = Vec::new();for expression_chunk in expressions.chunks(MAX_TUPLE_LEN) {let expression_group: Vec<syn::Expr> = expression_chunk.to_vec();elements.push(syn::Expr::Tuple(syn::ExprTuple {attrs: Vec::new(),paren_token: syn::token::Paren::default(),elems: Punctuated::from_iter(expression_group.into_iter()),}))}// May need to recursively nest inside tuplesif elements.len() > MAX_TUPLE_LEN {elements = split_tuple(elements); - edit in crates/typst_rust_gen/src/lib.rs at line 400
elements - replacement in crates/typst_rust_gen/src/lib.rs at line 404
let expressions = inlines.into_iter().map(transform_inline);let expressions = inlines.into_iter().map(transform_inline).collect::<Vec<_>>(); - replacement in crates/typst_rust_gen/src/lib.rs at line 410[3.567]→[3.567:605](∅→∅),[3.605]→[4.4899:4926](∅→∅),[4.4899]→[4.4899:4926](∅→∅),[4.4926]→[3.606:708](∅→∅),[3.708]→[4.4963:4970](∅→∅),[4.4963]→[4.4963:4970](∅→∅)
syn::Expr::Tuple(syn::ExprTuple {attrs: Vec::new(),paren_token: syn::token::Paren::default(),elems: Punctuated::from_iter(expressions),})let tuples = split_tuple(expressions);match &tuples[..] {[single] => single.to_owned(),_ => syn::Expr::Tuple(syn::ExprTuple {attrs: Vec::new(),paren_token: syn::token::Paren::default(),elems: Punctuated::from_iter(tuples.into_iter()),}),}