acdc_parser/model/inlines/
text.rs1use serde::{
2 Serialize,
3 ser::{SerializeMap, Serializer},
4};
5
6use crate::{Location, Role, Substitution};
7
8use super::InlineNode;
9
10#[derive(Clone, Debug, PartialEq, Serialize)]
12#[serde(rename_all = "lowercase")]
13pub enum Form {
14 Constrained,
15 Unconstrained,
16}
17
18#[derive(Clone, Debug, PartialEq)]
20pub struct Subscript<'a> {
21 pub role: Option<Role<'a>>,
22 pub id: Option<&'a str>,
23 pub form: Form,
24 pub content: Vec<InlineNode<'a>>,
25 pub location: Location,
26}
27
28#[derive(Clone, Debug, PartialEq)]
30pub struct Superscript<'a> {
31 pub role: Option<Role<'a>>,
32 pub id: Option<&'a str>,
33 pub form: Form,
34 pub content: Vec<InlineNode<'a>>,
35 pub location: Location,
36}
37
38#[derive(Clone, Debug, PartialEq)]
40pub struct CurvedQuotation<'a> {
41 pub role: Option<Role<'a>>,
42 pub id: Option<&'a str>,
43 pub form: Form,
44 pub content: Vec<InlineNode<'a>>,
45 pub location: Location,
46}
47
48#[derive(Clone, Debug, PartialEq)]
50pub struct CurvedApostrophe<'a> {
51 pub role: Option<Role<'a>>,
52 pub id: Option<&'a str>,
53 pub form: Form,
54 pub content: Vec<InlineNode<'a>>,
55 pub location: Location,
56}
57
58#[derive(Clone, Debug, PartialEq)]
60pub struct StandaloneCurvedApostrophe {
61 pub location: Location,
62}
63
64#[derive(Clone, Debug, PartialEq)]
66pub struct Monospace<'a> {
67 pub role: Option<Role<'a>>,
68 pub id: Option<&'a str>,
69 pub form: Form,
70 pub content: Vec<InlineNode<'a>>,
71 pub location: Location,
72}
73
74#[derive(Clone, Debug, PartialEq)]
76pub struct Highlight<'a> {
77 pub role: Option<Role<'a>>,
78 pub id: Option<&'a str>,
79 pub form: Form,
80 pub content: Vec<InlineNode<'a>>,
81 pub location: Location,
82}
83
84#[derive(Clone, Debug, PartialEq)]
86pub struct Bold<'a> {
87 pub role: Option<Role<'a>>,
88 pub id: Option<&'a str>,
89 pub form: Form,
90 pub content: Vec<InlineNode<'a>>,
91 pub location: Location,
92}
93
94#[derive(Clone, Debug, PartialEq)]
96pub struct Italic<'a> {
97 pub role: Option<Role<'a>>,
98 pub id: Option<&'a str>,
99 pub form: Form,
100 pub content: Vec<InlineNode<'a>>,
101 pub location: Location,
102}
103
104#[derive(Clone, Debug, PartialEq)]
106pub struct LineBreak {
107 pub location: Location,
108}
109
110impl Serialize for LineBreak {
111 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
112 where
113 S: Serializer,
114 {
115 let mut state = serializer.serialize_map(Some(3))?;
116 state.serialize_entry("name", "linebreak")?;
117 state.serialize_entry("type", "string")?;
118 state.serialize_entry("location", &self.location)?;
119 state.end()
120 }
121}
122
123#[derive(Clone, Debug, PartialEq)]
129pub struct Plain<'a> {
130 pub content: &'a str,
131 pub location: Location,
132 pub escaped: bool,
136}
137
138impl Serialize for Plain<'_> {
139 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
140 where
141 S: Serializer,
142 {
143 let mut state = serializer.serialize_map(Some(4))?;
144 state.serialize_entry("name", "text")?;
145 state.serialize_entry("type", "string")?;
146 state.serialize_entry("value", &self.content)?;
147 state.serialize_entry("location", &self.location)?;
148 state.end()
149 }
150}
151
152#[derive(Clone, Debug, PartialEq)]
159pub struct Raw<'a> {
160 pub content: &'a str,
161 pub location: Location,
162 pub subs: Vec<Substitution>,
170}
171
172#[derive(Clone, Debug, PartialEq)]
179pub struct Verbatim<'a> {
180 pub content: &'a str,
181 pub location: Location,
182}
183
184impl Serialize for StandaloneCurvedApostrophe {
185 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
186 where
187 S: Serializer,
188 {
189 let mut state = serializer.serialize_map(Some(3))?;
190 state.serialize_entry("name", "curved_apostrophe")?;
191 state.serialize_entry("type", "string")?;
192 state.serialize_entry("location", &self.location)?;
193 state.end()
194 }
195}
196
197#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize)]
199#[serde(rename_all = "lowercase")]
200pub enum CalloutRefKind {
201 Explicit,
203 Auto,
205}
206
207#[derive(Clone, Debug, PartialEq, Eq)]
228pub struct CalloutRef {
229 pub kind: CalloutRefKind,
231 pub number: usize,
233 pub location: Location,
235}
236
237impl CalloutRef {
238 #[must_use]
240 pub fn explicit(number: usize, location: Location) -> Self {
241 Self {
242 kind: CalloutRefKind::Explicit,
243 number,
244 location,
245 }
246 }
247
248 #[must_use]
250 pub fn auto(number: usize, location: Location) -> Self {
251 Self {
252 kind: CalloutRefKind::Auto,
253 number,
254 location,
255 }
256 }
257}
258
259impl Serialize for CalloutRef {
260 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
261 where
262 S: Serializer,
263 {
264 let mut state = serializer.serialize_map(Some(5))?;
265 state.serialize_entry("name", "callout_reference")?;
266 state.serialize_entry("type", "inline")?;
267 state.serialize_entry("variant", &self.kind)?;
268 state.serialize_entry("number", &self.number)?;
269 state.serialize_entry("location", &self.location)?;
270 state.end()
271 }
272}