minify_html/parse/
comment.rs

1use crate::ast::NodeData;
2use crate::parse::Code;
3use aho_corasick::AhoCorasick;
4use aho_corasick::AhoCorasickBuilder;
5use once_cell::sync::Lazy;
6
7static COMMENT_END: Lazy<AhoCorasick> =
8  Lazy::new(|| AhoCorasickBuilder::new().build(["-->"]).unwrap());
9
10pub fn parse_comment(code: &mut Code) -> NodeData {
11  debug_assert!(code.as_slice().starts_with(b"<!--"));
12  code.shift(4);
13  let (len, matched) = match COMMENT_END.find(code.as_slice()) {
14    Some(m) => (m.start(), m.end() - m.start()),
15    None => (code.rem(), 0),
16  };
17  let data = code.copy_and_shift(len);
18  // It might be EOF.
19  code.shift(matched);
20  NodeData::Comment {
21    code: data,
22    ended: matched > 0,
23  }
24}