2021-08-05 22:07:27 -04:00
|
|
|
use crate::ast::NodeData;
|
|
|
|
use crate::parse::Code;
|
2021-08-06 02:19:36 -04:00
|
|
|
use crate::Cfg;
|
2021-08-05 22:07:27 -04:00
|
|
|
use memchr::memchr;
|
|
|
|
|
|
|
|
pub fn parse_bang(cfg: &Cfg, code: &mut Code) -> NodeData {
|
|
|
|
debug_assert!(code.str().starts_with(b"<!"));
|
|
|
|
code.shift(2);
|
|
|
|
let (len, matched) = match memchr(b'>', code.str()) {
|
|
|
|
Some(m) => (m, 1),
|
|
|
|
None => (code.rem(), 0),
|
|
|
|
};
|
|
|
|
let data = code.copy_and_shift(len);
|
|
|
|
// It might be EOF.
|
|
|
|
code.shift(matched);
|
|
|
|
NodeData::Bang {
|
|
|
|
code: data,
|
2021-08-06 02:17:45 -04:00
|
|
|
ended: matched > 0,
|
2021-08-05 22:07:27 -04:00
|
|
|
}
|
|
|
|
}
|