acdc_parser/model/inlines/
converter.rs1use crate::{InlineMacro, InlineNode};
2
3#[allow(clippy::must_use_candidate)]
12pub fn inlines_to_string(inlines: &[InlineNode]) -> String {
13 inlines
14 .iter()
15 .map(|node| match node {
16 InlineNode::PlainText(text) => text.content.clone(),
17 InlineNode::RawText(text) => text.content.clone(),
18 InlineNode::VerbatimText(text) => text.content.clone(),
19 InlineNode::BoldText(bold) => inlines_to_string(&bold.content),
20 InlineNode::ItalicText(italic) => inlines_to_string(&italic.content),
21 InlineNode::MonospaceText(mono) => inlines_to_string(&mono.content),
22 InlineNode::HighlightText(highlight) => inlines_to_string(&highlight.content),
23 InlineNode::SubscriptText(sub) => inlines_to_string(&sub.content),
24 InlineNode::SuperscriptText(sup) => inlines_to_string(&sup.content),
25 InlineNode::CurvedQuotationText(quote) => inlines_to_string("e.content),
26 InlineNode::CurvedApostropheText(apos) => inlines_to_string(&apos.content),
27 InlineNode::StandaloneCurvedApostrophe(_) => "'".to_string(),
28 InlineNode::LineBreak(_) => " ".to_string(),
29 InlineNode::InlineAnchor(_) => String::new(),
30 InlineNode::Macro(macro_node) => match macro_node {
31 InlineMacro::Link(link) => {
32 link.text.clone().unwrap_or_else(|| link.target.to_string())
33 }
34 InlineMacro::Url(url) => {
35 if url.text.is_empty() {
36 url.target.to_string()
37 } else {
38 inlines_to_string(&url.text)
39 }
40 }
41 InlineMacro::Mailto(mailto) => {
42 if mailto.text.is_empty() {
43 mailto.target.to_string()
44 } else {
45 inlines_to_string(&mailto.text)
46 }
47 }
48 InlineMacro::Autolink(autolink) => autolink.url.to_string(),
49 InlineMacro::CrossReference(xref) => {
50 xref.text.clone().unwrap_or_else(|| xref.target.clone())
51 }
52 InlineMacro::IndexTerm(index_term) if index_term.is_visible() => {
54 index_term.term().to_string()
55 }
56 InlineMacro::Image(_)
58 | InlineMacro::Footnote(_)
59 | InlineMacro::Button(_)
60 | InlineMacro::Pass(_)
61 | InlineMacro::Keyboard(_)
62 | InlineMacro::Menu(_)
63 | InlineMacro::Stem(_)
64 | InlineMacro::Icon(_)
65 | InlineMacro::IndexTerm(_) => String::new(),
66 },
67 InlineNode::CalloutRef(callout) => format!("<{}>", callout.number),
69 })
70 .collect()
71}