Add MVP list support

finchie
Nov 12, 2023, 6:09 AM
ZRGSUUICJKNHKVH2JZHHOKSSIQXNWCNLJX2ICSX524AG2XJKD3VAC

Dependencies

  • [2] Q3IYM4WF Add MVP table support
  • [3] I5IZPMTH Handle empty expressions
  • [4] CQEA2ZDI Parse evaluated Typst code instead of AST
  • [5] BSJYWOYS Implement MVP Typst embedding
  • [6] HEIF2O2E Migrate from `pandoc` to `typst` for AST processing

Change contents

  • replacement in docs/test.typ at line 1
    [3.242][2.0:61]()
    #table(
    columns: 2,
    rows: 2,
    [1],
    [2],
    [3],
    [4]
    )
    [3.242]
    List:
    - First
    - Second
    - Third
    Ordered:
    + First
    + Second
    + Third
    #enum(
    enum.item(1)[First step],
    enum.item(5)[Fifth step],
    enum.item(10)[Tenth step]
    )
  • replacement in crates/typser/src/content.rs at line 2
    [3.2967][2.277:315]()
    use typst_library::layout::TableElem;
    [3.2967]
    [3.2967]
    use typst_library::layout::{EnumElem, EnumItem, ListElem, ListItem, ParbreakElem, TableElem};
  • edit in crates/typser/src/content.rs at line 15
    [2.392]
    [3.3233]
    UnorderedList(&'a ListElem),
    UnorderedListItem(&'a ListItem),
    ParagraphBreak(&'a ParbreakElem),
    OrderedList(&'a EnumElem),
    OrderedListItem(&'a EnumItem),
  • edit in crates/typser/src/content.rs at line 37
    [2.791]
    [3.3620]
    } else if let Some(list) = value.to::<ListElem>() {
    Self::UnorderedList(list)
    } else if let Some(list) = value.to::<EnumElem>() {
    Self::OrderedList(list)
    } else if let Some(item) = value.to::<ListItem>() {
    Self::UnorderedListItem(item)
    } else if let Some(item) = value.to::<EnumItem>() {
    Self::OrderedListItem(item)
    } else if let Some(pragraph_break) = value.to::<ParbreakElem>() {
    Self::ParagraphBreak(pragraph_break)
  • edit in crates/typser/src/content.rs at line 97
    [2.2885]
    [2.2885]
    SupportedContent::UnorderedList(list) => {
    vec![xilem_html_element(
    "ul",
    vec![syn::Expr::Tuple(syn::ExprTuple {
    attrs: Vec::new(),
    paren_token: syn::token::Paren::default(),
    elems: syn::punctuated::Punctuated::from_iter(
    list.children()
    .into_iter()
    .map(|content| SupportedContent::downcast(content.body()))
    .map(|supported| supported.to_xilem())
    .flatten(),
    ),
    })],
    )]
    }
    SupportedContent::OrderedList(list) => {
    vec![xilem_html_element(
    "ol",
    vec![syn::Expr::Tuple(syn::ExprTuple {
    attrs: Vec::new(),
    paren_token: syn::token::Paren::default(),
    elems: syn::punctuated::Punctuated::from_iter(
    list.children()
    .into_iter()
    .map(|content| SupportedContent::downcast(content.body()))
    .map(|supported| supported.to_xilem())
    .flatten(),
    ),
    })],
    )]
    }
    SupportedContent::UnorderedListItem(item) => {
    vec![xilem_html_element(
    "ul",
    vec![xilem_html_element(
    "li",
    vec![syn::Expr::Tuple(syn::ExprTuple {
    attrs: Vec::new(),
    paren_token: syn::token::Paren::default(),
    elems: syn::punctuated::Punctuated::from_iter(
    SupportedContent::downcast(item.body()).to_xilem(),
    ),
    })],
    )],
    )]
    }
    SupportedContent::OrderedListItem(item) => {
    vec![xilem_html_element(
    "ol",
    vec![xilem_html_element(
    "li",
    vec![syn::Expr::Tuple(syn::ExprTuple {
    attrs: Vec::new(),
    paren_token: syn::token::Paren::default(),
    elems: syn::punctuated::Punctuated::from_iter(
    SupportedContent::downcast(item.body()).to_xilem(),
    ),
    })],
    )],
    )]
    }
    SupportedContent::ParagraphBreak(_parahraph_break) => {
    vec![xilem_html_element(
    "br",
    vec![syn::Expr::Tuple(syn::ExprTuple {
    attrs: Vec::new(),
    paren_token: syn::token::Paren::default(),
    elems: syn::punctuated::Punctuated::new(),
    })],
    )]
    }