diff options
author | Titus Wormer <tituswormer@gmail.com> | 2022-08-11 13:31:20 +0200 |
---|---|---|
committer | Titus Wormer <tituswormer@gmail.com> | 2022-08-11 13:31:20 +0200 |
commit | 2d35cbfceace81a217cd0fbdae7a8777c7a6465e (patch) | |
tree | e5e69d44c5c00d1dc70f4e3a227f67fd5c771389 /src/construct/html_text.rs | |
parent | 053a2603e4bd5ec9caf40617b52136e5ef3fcf0a (diff) | |
download | markdown-rs-2d35cbfceace81a217cd0fbdae7a8777c7a6465e.tar.gz markdown-rs-2d35cbfceace81a217cd0fbdae7a8777c7a6465e.tar.bz2 markdown-rs-2d35cbfceace81a217cd0fbdae7a8777c7a6465e.zip |
Refactor internal docs, code style of tokenizer
Diffstat (limited to 'src/construct/html_text.rs')
-rw-r--r-- | src/construct/html_text.rs | 86 |
1 files changed, 46 insertions, 40 deletions
diff --git a/src/construct/html_text.rs b/src/construct/html_text.rs index df6bd99..7474dbf 100644 --- a/src/construct/html_text.rs +++ b/src/construct/html_text.rs @@ -207,10 +207,11 @@ pub fn comment_start_dash(tokenizer: &mut Tokenizer) -> State { pub fn comment(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { None => State::Nok, - Some(b'\n') => { - tokenizer.tokenize_state.return_state = Some(StateName::HtmlTextComment); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextComment), + State::Nok, + ), Some(b'-') => { tokenizer.consume(); State::Next(StateName::HtmlTextCommentClose) @@ -269,10 +270,11 @@ pub fn cdata_open_inside(tokenizer: &mut Tokenizer) -> State { pub fn cdata(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { None => State::Nok, - Some(b'\n') => { - tokenizer.tokenize_state.return_state = Some(StateName::HtmlTextCdata); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextCdata), + State::Nok, + ), Some(b']') => { tokenizer.consume(); State::Next(StateName::HtmlTextCdataClose) @@ -323,10 +325,11 @@ pub fn cdata_end(tokenizer: &mut Tokenizer) -> State { pub fn declaration(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { None | Some(b'>') => State::Retry(StateName::HtmlTextEnd), - Some(b'\n') => { - tokenizer.tokenize_state.return_state = Some(StateName::HtmlTextDeclaration); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextDeclaration), + State::Nok, + ), _ => { tokenizer.consume(); State::Next(StateName::HtmlTextDeclaration) @@ -343,10 +346,11 @@ pub fn declaration(tokenizer: &mut Tokenizer) -> State { pub fn instruction(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { None => State::Nok, - Some(b'\n') => { - tokenizer.tokenize_state.return_state = Some(StateName::HtmlTextInstruction); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextInstruction), + State::Nok, + ), Some(b'?') => { tokenizer.consume(); State::Next(StateName::HtmlTextInstructionClose) @@ -413,10 +417,11 @@ pub fn tag_close(tokenizer: &mut Tokenizer) -> State { /// ``` pub fn tag_close_between(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { - Some(b'\n') => { - tokenizer.tokenize_state.return_state = Some(StateName::HtmlTextTagCloseBetween); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextTagCloseBetween), + State::Nok, + ), Some(b'\t' | b' ') => { tokenizer.consume(); State::Next(StateName::HtmlTextTagCloseBetween) @@ -451,10 +456,11 @@ pub fn tag_open(tokenizer: &mut Tokenizer) -> State { /// ``` pub fn tag_open_between(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { - Some(b'\n') => { - tokenizer.tokenize_state.return_state = Some(StateName::HtmlTextTagOpenBetween); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextTagOpenBetween), + State::Nok, + ), Some(b'\t' | b' ') => { tokenizer.consume(); State::Next(StateName::HtmlTextTagOpenBetween) @@ -498,11 +504,11 @@ pub fn tag_open_attribute_name(tokenizer: &mut Tokenizer) -> State { /// ``` pub fn tag_open_attribute_name_after(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { - Some(b'\n') => { - tokenizer.tokenize_state.return_state = - Some(StateName::HtmlTextTagOpenAttributeNameAfter); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextTagOpenAttributeNameAfter), + State::Nok, + ), Some(b'\t' | b' ') => { tokenizer.consume(); State::Next(StateName::HtmlTextTagOpenAttributeNameAfter) @@ -525,11 +531,11 @@ pub fn tag_open_attribute_name_after(tokenizer: &mut Tokenizer) -> State { pub fn tag_open_attribute_value_before(tokenizer: &mut Tokenizer) -> State { match tokenizer.current { None | Some(b'<' | b'=' | b'>' | b'`') => State::Nok, - Some(b'\n') => { - tokenizer.tokenize_state.return_state = - Some(StateName::HtmlTextTagOpenAttributeValueBefore); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextTagOpenAttributeValueBefore), + State::Nok, + ), Some(b'\t' | b' ') => { tokenizer.consume(); State::Next(StateName::HtmlTextTagOpenAttributeValueBefore) @@ -558,11 +564,11 @@ pub fn tag_open_attribute_value_quoted(tokenizer: &mut Tokenizer) -> State { tokenizer.tokenize_state.marker = 0; State::Nok } - Some(b'\n') => { - tokenizer.tokenize_state.return_state = - Some(StateName::HtmlTextTagOpenAttributeValueQuoted); - State::Retry(StateName::HtmlTextLineEndingBefore) - } + Some(b'\n') => tokenizer.attempt( + StateName::HtmlTextLineEndingBefore, + State::Next(StateName::HtmlTextTagOpenAttributeValueQuoted), + State::Nok, + ), Some(b'"' | b'\'') if tokenizer.current.unwrap() == tokenizer.tokenize_state.marker => { tokenizer.tokenize_state.marker = 0; tokenizer.consume(); @@ -678,5 +684,5 @@ pub fn line_ending_after(tokenizer: &mut Tokenizer) -> State { /// ``` pub fn line_ending_after_prefix(tokenizer: &mut Tokenizer) -> State { tokenizer.enter(Token::HtmlTextData); - State::Retry(tokenizer.tokenize_state.return_state.take().unwrap()) + State::Ok } |