panache_parser/parser/utils/
inline_emission.rs1use crate::config::Config;
12use crate::parser::inlines::core;
13use rowan::GreenNodeBuilder;
14
15pub fn emit_inlines(builder: &mut GreenNodeBuilder, text: &str, config: &Config) {
33 log::trace!(
34 "emit_inlines: {:?} ({} bytes)",
35 &text[..text.len().min(40)],
36 text.len()
37 );
38
39 core::parse_inline_text_recursive(builder, text, config);
41}
42
43#[cfg(test)]
44mod tests {
45 use super::*;
46 use crate::config::Config;
47 use crate::syntax::{SyntaxKind, SyntaxNode};
48 use rowan::GreenNodeBuilder;
49
50 #[test]
52 fn test_emit_inlines_basic() {
53 let config = Config::default();
54 let test_cases = vec",
60 "mixed *emph* and **strong** and `code`",
61 "nested *emphasis with `code` inside*",
62 "multiple *a* and *b* emphasis",
63 ];
64
65 for text in test_cases {
66 let mut builder_new = GreenNodeBuilder::new();
68 builder_new.start_node(SyntaxKind::HEADING_CONTENT.into());
69 emit_inlines(&mut builder_new, text, &config);
70 builder_new.finish_node();
71 let green_new = builder_new.finish();
72 let tree_new = SyntaxNode::new_root(green_new);
73
74 assert_eq!(
76 tree_new.text().to_string(),
77 text,
78 "Losslessness check failed for: {:?}",
79 text
80 );
81 }
82 }
83
84 #[test]
86 fn test_emit_inlines_empty() {
87 let config = Config::default();
88 let mut builder = GreenNodeBuilder::new();
89 builder.start_node(SyntaxKind::HEADING_CONTENT.into());
90 emit_inlines(&mut builder, "", &config);
91 builder.finish_node();
92 let green = builder.finish();
93 let tree = SyntaxNode::new_root(green);
94
95 assert_eq!(tree.kind(), SyntaxKind::HEADING_CONTENT);
97 assert_eq!(tree.children_with_tokens().count(), 0);
98 }
99
100 #[test]
102 fn test_emit_inlines_preserves_whitespace() {
103 let config = Config::default();
104 let text = " leading and trailing ";
105
106 let mut builder = GreenNodeBuilder::new();
107 builder.start_node(SyntaxKind::HEADING_CONTENT.into());
108 emit_inlines(&mut builder, text, &config);
109 builder.finish_node();
110 let green = builder.finish();
111 let tree = SyntaxNode::new_root(green);
112
113 assert_eq!(tree.text().to_string(), text);
115 }
116}