rushdown/parser/
raw_html.rs1use crate::ast::{Arena, NodeRef, RawHtml};
2use crate::parser::{Context, InlineParser};
3use crate::scanner::{
4 scan_html_cdata_reader, scan_html_comment_reader, scan_html_declaration_reader,
5 scan_html_processing_instruction_reader, scan_html_tag_reader,
6};
7use crate::text::{self, Reader};
8
9#[derive(Debug, Default)]
11pub struct RawHtmlParser {}
12
13impl RawHtmlParser {
14 pub fn new() -> Self {
16 Self::default()
17 }
18}
19
20impl InlineParser for RawHtmlParser {
21 fn trigger(&self) -> &[u8] {
22 b"<"
23 }
24
25 fn parse(
26 &self,
27 arena: &mut Arena,
28 _parent_ref: NodeRef,
29 reader: &mut text::BlockReader,
30 _ctx: &mut Context,
31 ) -> Option<NodeRef> {
32 let (line, pos) = reader.position();
33 if scan_html_tag_reader(reader).is_some()
34 || scan_html_comment_reader(reader).is_some()
35 || scan_html_processing_instruction_reader(reader).is_some()
36 || scan_html_declaration_reader(reader).is_some()
37 || scan_html_cdata_reader(reader).is_some()
38 {
39 return Some(arena.new_node(RawHtml::new(reader.between_current(line, pos))));
40 }
41 None
42 }
43}