1#![doc = include_str!("readme.md")]
2use oak_core::Range;
3
4#[derive(Debug, Clone)]
6#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
7pub struct TypstRoot {
8 #[cfg_attr(feature = "serde", serde(with = "oak_core::serde_range"))]
9 pub span: Range<usize>,
10 pub items: Vec<TypstItem>,
11}
12
13impl TypstRoot {
14 pub fn new(span: Range<usize>) -> Self {
15 Self { span, items: Vec::new() }
16 }
17}
18
19#[derive(Debug, Clone)]
20#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
21pub enum TypstItem {
22 Text(String),
23 Space,
24 Parbreak,
25 Heading(TypstHeading),
26 Strong(TypstRoot),
27 Emphasis(TypstRoot),
28 Math(TypstRoot),
29 Quote(TypstRoot),
30 ListItem(TypstRoot),
31 EnumItem(TypstRoot),
32 Link(TypstLink),
33 Raw(String),
34 Block(TypstRoot),
35}
36
37#[derive(Debug, Clone)]
38#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
39pub struct TypstHeading {
40 pub level: usize,
41 pub content: TypstRoot,
42}
43
44#[derive(Debug, Clone)]
45#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
46pub struct TypstLink {
47 pub url: String,
48 pub content: Option<TypstRoot>,
49}