26 lines
648 B
Rust
26 lines
648 B
Rust
|
use aho_corasick::AhoCorasick;
|
||
|
use lazy_static::lazy_static;
|
||
|
|
||
|
use crate::ast::NodeData;
|
||
|
use crate::Cfg;
|
||
|
use crate::parse::Code;
|
||
|
|
||
|
lazy_static! {
|
||
|
static ref COMMENT_END: AhoCorasick = AhoCorasick::new(&["-->"]);
|
||
|
}
|
||
|
|
||
|
pub fn parse_comment(cfg: &Cfg, code: &mut Code) -> NodeData {
|
||
|
debug_assert!(code.str().starts_with(b"<!--"));
|
||
|
code.shift(4);
|
||
|
let (len, matched) = match COMMENT_END.find(code.str()) {
|
||
|
Some(m) => (m.start(), m.end() - m.start()),
|
||
|
None => (code.rem(), 0),
|
||
|
};
|
||
|
let data = code.copy_and_shift(len);
|
||
|
// It might be EOF.
|
||
|
code.shift(matched);
|
||
|
NodeData::Comment {
|
||
|
code: data,
|
||
|
}
|
||
|
}
|