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"))]
10 pub span: Range<usize>,
11 pub items: Vec<TypstItem>,
13}
14
15impl TypstRoot {
16 pub fn new(span: Range<usize>) -> Self {
18 Self { span, items: Vec::new() }
19 }
20}
21
22#[derive(Debug, Clone)]
24#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
25pub enum TypstItem {
26 Text(String),
28 Space,
30 Parbreak,
32 Heading(TypstHeading),
34 Strong(TypstRoot),
36 Emphasis(TypstRoot),
38 Math(TypstRoot),
40 Quote(TypstRoot),
42 ListItem(TypstRoot),
44 EnumItem(TypstRoot),
46 Link(TypstLink),
48 Raw(String),
50 Block(TypstRoot),
52}
53
54#[derive(Debug, Clone)]
56#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
57pub struct TypstHeading {
58 pub level: usize,
60 pub content: TypstRoot,
62}
63
64#[derive(Debug, Clone)]
66#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
67pub struct TypstLink {
68 pub url: String,
70 pub content: Option<TypstRoot>,
72}