diff options
Diffstat (limited to 'src/construct/label_end.rs')
| -rw-r--r-- | src/construct/label_end.rs | 71 | 
1 files changed, 36 insertions, 35 deletions
| diff --git a/src/construct/label_end.rs b/src/construct/label_end.rs index bfded05..da53125 100644 --- a/src/construct/label_end.rs +++ b/src/construct/label_end.rs @@ -223,25 +223,29 @@ pub fn after(tokenizer: &mut Tokenizer) -> State {      match tokenizer.current {          // Resource (`[asd](fgh)`)? -        Some(b'(') => tokenizer.attempt( -            StateName::LabelEndResourceStart, -            State::Next(StateName::LabelEndOk), -            State::Next(if defined { -                StateName::LabelEndOk -            } else { -                StateName::LabelEndNok -            }), -        ), +        Some(b'(') => { +            tokenizer.attempt( +                State::Next(StateName::LabelEndOk), +                State::Next(if defined { +                    StateName::LabelEndOk +                } else { +                    StateName::LabelEndNok +                }), +            ); +            State::Retry(StateName::LabelEndResourceStart) +        }          // Full (`[asd][fgh]`) or collapsed (`[asd][]`) reference? -        Some(b'[') => tokenizer.attempt( -            StateName::LabelEndReferenceFull, -            State::Next(StateName::LabelEndOk), -            State::Next(if defined { -                StateName::LabelEndReferenceNotFull -            } else { -                StateName::LabelEndNok -            }), -        ), +        Some(b'[') => { +            tokenizer.attempt( +                State::Next(StateName::LabelEndOk), +                State::Next(if defined { +                    StateName::LabelEndReferenceNotFull +                } else { +                    StateName::LabelEndNok +                }), +            ); +            State::Retry(StateName::LabelEndReferenceFull) +        }          // Shortcut (`[asd]`) reference?          _ => State::Retry(if defined {              StateName::LabelEndOk @@ -263,10 +267,10 @@ pub fn after(tokenizer: &mut Tokenizer) -> State {  /// ```  pub fn reference_not_full(tokenizer: &mut Tokenizer) -> State {      tokenizer.attempt( -        StateName::LabelEndReferenceCollapsed,          State::Next(StateName::LabelEndOk),          State::Next(StateName::LabelEndNok), -    ) +    ); +    State::Retry(StateName::LabelEndReferenceCollapsed)  }  /// Done, we found something. @@ -354,12 +358,11 @@ pub fn resource_start(tokenizer: &mut Tokenizer) -> State {  ///         ^  /// ```  pub fn resource_before(tokenizer: &mut Tokenizer) -> State { -    let name = space_or_tab_eol(tokenizer);      tokenizer.attempt( -        name,          State::Next(StateName::LabelEndResourceOpen),          State::Next(StateName::LabelEndResourceOpen), -    ) +    ); +    State::Retry(space_or_tab_eol(tokenizer))  }  /// At the start of a resource, after optional whitespace. @@ -380,10 +383,10 @@ pub fn resource_open(tokenizer: &mut Tokenizer) -> State {          tokenizer.tokenize_state.size_b = RESOURCE_DESTINATION_BALANCE_MAX;          tokenizer.attempt( -            StateName::DestinationStart,              State::Next(StateName::LabelEndResourceDestinationAfter),              State::Next(StateName::LabelEndResourceDestinationMissing), -        ) +        ); +        State::Retry(StateName::DestinationStart)      }  } @@ -400,12 +403,11 @@ pub fn resource_destination_after(tokenizer: &mut Tokenizer) -> State {      tokenizer.tokenize_state.token_4 = Name::Data;      tokenizer.tokenize_state.token_5 = Name::Data;      tokenizer.tokenize_state.size_b = 0; -    let name = space_or_tab_eol(tokenizer);      tokenizer.attempt( -        name,          State::Next(StateName::LabelEndResourceBetween),          State::Next(StateName::LabelEndResourceEnd), -    ) +    ); +    State::Retry(space_or_tab_eol(tokenizer))  }  /// Without destination. @@ -432,10 +434,10 @@ pub fn resource_between(tokenizer: &mut Tokenizer) -> State {              tokenizer.tokenize_state.token_2 = Name::ResourceTitleMarker;              tokenizer.tokenize_state.token_3 = Name::ResourceTitleString;              tokenizer.attempt( -                StateName::TitleStart,                  State::Next(StateName::LabelEndResourceTitleAfter),                  State::Nok, -            ) +            ); +            State::Retry(StateName::TitleStart)          }          _ => State::Retry(StateName::LabelEndResourceEnd),      } @@ -451,12 +453,11 @@ pub fn resource_title_after(tokenizer: &mut Tokenizer) -> State {      tokenizer.tokenize_state.token_1 = Name::Data;      tokenizer.tokenize_state.token_2 = Name::Data;      tokenizer.tokenize_state.token_3 = Name::Data; -    let name = space_or_tab_eol(tokenizer);      tokenizer.attempt( -        name,          State::Next(StateName::LabelEndResourceEnd),          State::Next(StateName::LabelEndResourceEnd), -    ) +    ); +    State::Retry(space_or_tab_eol(tokenizer))  }  /// In a resource, at the `)`. @@ -491,10 +492,10 @@ pub fn reference_full(tokenizer: &mut Tokenizer) -> State {              tokenizer.tokenize_state.token_2 = Name::ReferenceMarker;              tokenizer.tokenize_state.token_3 = Name::ReferenceString;              tokenizer.attempt( -                StateName::LabelStart,                  State::Next(StateName::LabelEndReferenceFullAfter),                  State::Nok, -            ) +            ); +            State::Retry(StateName::LabelStart)          }          _ => unreachable!("expected `[`"),      } | 
