diff options
Diffstat (limited to '')
| -rw-r--r-- | src/construct/partial_bom.rs | 54 | 
1 files changed, 54 insertions, 0 deletions
| diff --git a/src/construct/partial_bom.rs b/src/construct/partial_bom.rs new file mode 100644 index 0000000..be8d6c8 --- /dev/null +++ b/src/construct/partial_bom.rs @@ -0,0 +1,54 @@ +//! To do. + +use crate::token::Token; +use crate::tokenizer::{State, Tokenizer}; + +/// Before a BOM. +/// +/// ```text +/// > | 0xEF 0xBB 0xBF +///     ^^^^ +/// ``` +pub fn start(tokenizer: &mut Tokenizer) -> State { +    match tokenizer.current { +        Some(0xEF) => { +            tokenizer.enter(Token::ByteOrderMark); +            tokenizer.consume(); +            State::Fn(Box::new(cont)) +        } +        _ => State::Nok, +    } +} + +/// Second byte in BOM. +/// +/// ```text +/// > | 0xEF 0xBB 0xBF +///          ^^^^ +/// ``` +fn cont(tokenizer: &mut Tokenizer) -> State { +    match tokenizer.current { +        Some(0xBB) => { +            tokenizer.consume(); +            State::Fn(Box::new(end)) +        } +        _ => State::Nok, +    } +} + +/// Last byte in BOM. +/// +/// ```text +/// > | 0xEF 0xBB 0xBF +///               ^^^^ +/// ``` +fn end(tokenizer: &mut Tokenizer) -> State { +    match tokenizer.current { +        Some(0xBF) => { +            tokenizer.consume(); +            tokenizer.exit(Token::ByteOrderMark); +            State::Ok +        } +        _ => State::Nok, +    } +} | 
