markdown/
state.rs

1//! States of the state machine.
2
3use crate::construct;
4use crate::message;
5use crate::tokenizer::Tokenizer;
6
7/// Result of a state.
8#[derive(Clone, Debug, PartialEq)]
9pub enum State {
10    /// Syntax error.
11    ///
12    /// Only used by MDX.
13    Error(message::Message),
14    /// Move to [`Name`][] next.
15    Next(Name),
16    /// Retry in [`Name`][].
17    Retry(Name),
18    /// The state is successful.
19    Ok,
20    /// The state is not successful.
21    Nok,
22}
23
24impl State {
25    /// Turn a final state into a result.
26    ///
27    /// This doesn’t work on future states ([`State::Next`], [`State::Retry`]),
28    /// or on an attempt ([`State::Nok`]).
29    ///
30    /// But it turns the final result into an error if crashed.
31    pub fn to_result(&self) -> Result<(), message::Message> {
32        match self {
33            State::Nok | State::Next(_) | State::Retry(_) => {
34                unreachable!("cannot turn intermediate state into result")
35            }
36            State::Ok => Ok(()),
37            State::Error(x) => Err(x.clone()),
38        }
39    }
40}
41
42/// Names of states to move to.
43#[derive(Clone, Copy, Debug, Eq, PartialEq)]
44#[allow(clippy::enum_variant_names)]
45pub enum Name {
46    AttentionStart,
47    AttentionInside,
48
49    AutolinkStart,
50    AutolinkOpen,
51    AutolinkSchemeOrEmailAtext,
52    AutolinkSchemeInsideOrEmailAtext,
53    AutolinkUrlInside,
54    AutolinkEmailAtSignOrDot,
55    AutolinkEmailAtext,
56    AutolinkEmailValue,
57    AutolinkEmailLabel,
58
59    BlankLineStart,
60    BlankLineAfter,
61
62    BlockQuoteStart,
63    BlockQuoteContStart,
64    BlockQuoteContBefore,
65    BlockQuoteContAfter,
66
67    BomStart,
68    BomInside,
69
70    CharacterEscapeStart,
71    CharacterEscapeInside,
72
73    CharacterReferenceStart,
74    CharacterReferenceOpen,
75    CharacterReferenceNumeric,
76    CharacterReferenceValue,
77
78    CodeIndentedStart,
79    CodeIndentedAtBreak,
80    CodeIndentedAfter,
81    CodeIndentedFurtherStart,
82    CodeIndentedInside,
83    CodeIndentedFurtherBegin,
84    CodeIndentedFurtherAfter,
85
86    ContentChunkStart,
87    ContentChunkInside,
88    ContentDefinitionBefore,
89    ContentDefinitionAfter,
90
91    DataStart,
92    DataInside,
93    DataAtBreak,
94
95    DefinitionStart,
96    DefinitionBefore,
97    DefinitionLabelAfter,
98    DefinitionLabelNok,
99    DefinitionMarkerAfter,
100    DefinitionDestinationBefore,
101    DefinitionDestinationAfter,
102    DefinitionDestinationMissing,
103    DefinitionTitleBefore,
104    DefinitionAfter,
105    DefinitionAfterWhitespace,
106    DefinitionTitleBeforeMarker,
107    DefinitionTitleAfter,
108    DefinitionTitleAfterOptionalWhitespace,
109
110    DestinationStart,
111    DestinationEnclosedBefore,
112    DestinationEnclosed,
113    DestinationEnclosedEscape,
114    DestinationRaw,
115    DestinationRawEscape,
116
117    DocumentStart,
118    DocumentBeforeFrontmatter,
119    DocumentContainerExistingBefore,
120    DocumentContainerExistingAfter,
121    DocumentContainerNewBefore,
122    DocumentContainerNewBeforeNotBlockQuote,
123    DocumentContainerNewBeforeNotList,
124    DocumentContainerNewBeforeNotGfmFootnoteDefinition,
125    DocumentContainerNewAfter,
126    DocumentContainersAfter,
127    DocumentFlowInside,
128    DocumentFlowEnd,
129
130    FlowStart,
131    FlowBeforeGfmTable,
132    FlowBeforeCodeIndented,
133    FlowBeforeRaw,
134    FlowBeforeHtml,
135    FlowBeforeMdxExpression,
136    FlowBeforeMdxJsx,
137    FlowBeforeHeadingAtx,
138    FlowBeforeHeadingSetext,
139    FlowBeforeThematicBreak,
140    FlowAfter,
141    FlowBlankLineBefore,
142    FlowBlankLineAfter,
143    FlowBeforeContent,
144
145    FrontmatterStart,
146    FrontmatterOpenSequence,
147    FrontmatterOpenAfter,
148    FrontmatterAfter,
149    FrontmatterContentStart,
150    FrontmatterContentInside,
151    FrontmatterContentEnd,
152    FrontmatterCloseStart,
153    FrontmatterCloseSequence,
154    FrontmatterCloseAfter,
155
156    GfmAutolinkLiteralProtocolStart,
157    GfmAutolinkLiteralProtocolAfter,
158    GfmAutolinkLiteralProtocolPrefixInside,
159    GfmAutolinkLiteralProtocolSlashesInside,
160
161    GfmAutolinkLiteralWwwStart,
162    GfmAutolinkLiteralWwwAfter,
163    GfmAutolinkLiteralWwwPrefixInside,
164    GfmAutolinkLiteralWwwPrefixAfter,
165
166    GfmAutolinkLiteralDomainInside,
167    GfmAutolinkLiteralDomainAtPunctuation,
168    GfmAutolinkLiteralDomainAfter,
169
170    GfmAutolinkLiteralPathInside,
171    GfmAutolinkLiteralPathAtPunctuation,
172    GfmAutolinkLiteralPathAfter,
173
174    GfmAutolinkLiteralTrail,
175    GfmAutolinkLiteralTrailCharRefInside,
176    GfmAutolinkLiteralTrailCharRefStart,
177    GfmAutolinkLiteralTrailBracketAfter,
178
179    GfmFootnoteDefinitionStart,
180    GfmFootnoteDefinitionLabelBefore,
181    GfmFootnoteDefinitionLabelAtMarker,
182    GfmFootnoteDefinitionLabelInside,
183    GfmFootnoteDefinitionLabelEscape,
184    GfmFootnoteDefinitionLabelAfter,
185    GfmFootnoteDefinitionWhitespaceAfter,
186    GfmFootnoteDefinitionContStart,
187    GfmFootnoteDefinitionContBlank,
188    GfmFootnoteDefinitionContFilled,
189
190    GfmLabelStartFootnoteStart,
191    GfmLabelStartFootnoteOpen,
192
193    GfmTaskListItemCheckStart,
194    GfmTaskListItemCheckInside,
195    GfmTaskListItemCheckClose,
196    GfmTaskListItemCheckAfter,
197    GfmTaskListItemCheckAfterSpaceOrTab,
198
199    GfmTableStart,
200    GfmTableHeadRowBefore,
201    GfmTableHeadRowStart,
202    GfmTableHeadRowBreak,
203    GfmTableHeadRowData,
204    GfmTableHeadRowEscape,
205    GfmTableHeadDelimiterStart,
206    GfmTableHeadDelimiterBefore,
207    GfmTableHeadDelimiterCellBefore,
208    GfmTableHeadDelimiterValueBefore,
209    GfmTableHeadDelimiterLeftAlignmentAfter,
210    GfmTableHeadDelimiterFiller,
211    GfmTableHeadDelimiterRightAlignmentAfter,
212    GfmTableHeadDelimiterCellAfter,
213    GfmTableHeadDelimiterNok,
214
215    GfmTableBodyRowStart,
216    GfmTableBodyRowBreak,
217    GfmTableBodyRowData,
218    GfmTableBodyRowEscape,
219
220    HardBreakEscapeStart,
221    HardBreakEscapeAfter,
222
223    HeadingAtxStart,
224    HeadingAtxBefore,
225    HeadingAtxSequenceOpen,
226    HeadingAtxAtBreak,
227    HeadingAtxSequenceFurther,
228    HeadingAtxData,
229
230    HeadingSetextStart,
231    HeadingSetextBefore,
232    HeadingSetextInside,
233    HeadingSetextAfter,
234
235    HtmlFlowStart,
236    HtmlFlowBefore,
237    HtmlFlowOpen,
238    HtmlFlowDeclarationOpen,
239    HtmlFlowCommentOpenInside,
240    HtmlFlowCdataOpenInside,
241    HtmlFlowTagCloseStart,
242    HtmlFlowTagName,
243    HtmlFlowBasicSelfClosing,
244    HtmlFlowCompleteClosingTagAfter,
245    HtmlFlowCompleteEnd,
246    HtmlFlowCompleteAttributeNameBefore,
247    HtmlFlowCompleteAttributeName,
248    HtmlFlowCompleteAttributeNameAfter,
249    HtmlFlowCompleteAttributeValueBefore,
250    HtmlFlowCompleteAttributeValueQuoted,
251    HtmlFlowCompleteAttributeValueQuotedAfter,
252    HtmlFlowCompleteAttributeValueUnquoted,
253    HtmlFlowCompleteAfter,
254    HtmlFlowBlankLineBefore,
255    HtmlFlowContinuation,
256    HtmlFlowContinuationDeclarationInside,
257    HtmlFlowContinuationAfter,
258    HtmlFlowContinuationStart,
259    HtmlFlowContinuationBefore,
260    HtmlFlowContinuationCommentInside,
261    HtmlFlowContinuationRawTagOpen,
262    HtmlFlowContinuationRawEndTag,
263    HtmlFlowContinuationClose,
264    HtmlFlowContinuationCdataInside,
265    HtmlFlowContinuationStartNonLazy,
266
267    HtmlTextStart,
268    HtmlTextOpen,
269    HtmlTextDeclarationOpen,
270    HtmlTextTagCloseStart,
271    HtmlTextTagClose,
272    HtmlTextTagCloseBetween,
273    HtmlTextTagOpen,
274    HtmlTextTagOpenBetween,
275    HtmlTextTagOpenAttributeName,
276    HtmlTextTagOpenAttributeNameAfter,
277    HtmlTextTagOpenAttributeValueBefore,
278    HtmlTextTagOpenAttributeValueQuoted,
279    HtmlTextTagOpenAttributeValueQuotedAfter,
280    HtmlTextTagOpenAttributeValueUnquoted,
281    HtmlTextCdata,
282    HtmlTextCdataOpenInside,
283    HtmlTextCdataClose,
284    HtmlTextCdataEnd,
285    HtmlTextCommentOpenInside,
286    HtmlTextComment,
287    HtmlTextCommentClose,
288    HtmlTextCommentEnd,
289    HtmlTextDeclaration,
290    HtmlTextEnd,
291    HtmlTextInstruction,
292    HtmlTextInstructionClose,
293    HtmlTextLineEndingBefore,
294    HtmlTextLineEndingAfter,
295    HtmlTextLineEndingAfterPrefix,
296
297    LabelStart,
298    LabelAtBreak,
299    LabelEolAfter,
300    LabelEscape,
301    LabelInside,
302    LabelNok,
303
304    LabelEndStart,
305    LabelEndAfter,
306    LabelEndResourceStart,
307    LabelEndResourceBefore,
308    LabelEndResourceOpen,
309    LabelEndResourceDestinationAfter,
310    LabelEndResourceDestinationMissing,
311    LabelEndResourceBetween,
312    LabelEndResourceTitleAfter,
313    LabelEndResourceEnd,
314    LabelEndOk,
315    LabelEndNok,
316    LabelEndReferenceFull,
317    LabelEndReferenceFullAfter,
318    LabelEndReferenceFullMissing,
319    LabelEndReferenceNotFull,
320    LabelEndReferenceCollapsed,
321    LabelEndReferenceCollapsedOpen,
322
323    LabelStartImageStart,
324    LabelStartImageOpen,
325    LabelStartImageAfter,
326
327    LabelStartLinkStart,
328
329    ListItemStart,
330    ListItemBefore,
331    ListItemBeforeOrdered,
332    ListItemBeforeUnordered,
333    ListItemValue,
334    ListItemMarker,
335    ListItemMarkerAfter,
336    ListItemAfter,
337    ListItemMarkerAfterFilled,
338    ListItemWhitespace,
339    ListItemPrefixOther,
340    ListItemWhitespaceAfter,
341    ListItemContStart,
342    ListItemContBlank,
343    ListItemContFilled,
344
345    MdxEsmStart,
346    MdxEsmWord,
347    MdxEsmInside,
348    MdxEsmLineStart,
349    MdxEsmBlankLineBefore,
350    MdxEsmContinuationStart,
351    MdxEsmAtEnd,
352
353    MdxExpressionTextStart,
354    MdxExpressionTextAfter,
355
356    MdxExpressionFlowStart,
357    MdxExpressionFlowBefore,
358    MdxExpressionFlowAfter,
359    MdxExpressionFlowEnd,
360
361    MdxExpressionStart,
362    MdxExpressionBefore,
363    MdxExpressionPrefix,
364    MdxExpressionInside,
365    MdxExpressionEolAfter,
366
367    MdxJsxFlowStart,
368    MdxJsxFlowBefore,
369    MdxJsxFlowAfter,
370    MdxJsxFlowEnd,
371    MdxJsxFlowNok,
372    MdxJsxTextStart,
373    MdxJsxTextAfter,
374    MdxJsxTextNok,
375    MdxJsxEsWhitespaceStart,
376    MdxJsxEsWhitespaceInside,
377    MdxJsxEsWhitespaceEolAfter,
378    MdxJsxStart,
379    MdxJsxStartAfter,
380    MdxJsxNameBefore,
381    MdxJsxClosingTagNameBefore,
382    MdxJsxTagEnd,
383    MdxJsxPrimaryName,
384    MdxJsxPrimaryNameAfter,
385    MdxJsxMemberNameBefore,
386    MdxJsxMemberName,
387    MdxJsxMemberNameAfter,
388    MdxJsxLocalNameBefore,
389    MdxJsxLocalName,
390    MdxJsxLocalNameAfter,
391    MdxJsxAttributeBefore,
392    MdxJsxSelfClosing,
393    MdxJsxAttributeExpressionAfter,
394    MdxJsxAttributePrimaryName,
395    MdxJsxAttributePrimaryNameAfter,
396    MdxJsxAttributeLocalNameBefore,
397    MdxJsxAttributeLocalName,
398    MdxJsxAttributeLocalNameAfter,
399    MdxJsxAttributeValueBefore,
400    MdxJsxAttributeValueQuotedStart,
401    MdxJsxAttributeValueQuoted,
402    MdxJsxAttributeValueExpressionAfter,
403
404    NonLazyContinuationStart,
405    NonLazyContinuationAfter,
406
407    ParagraphStart,
408    ParagraphLineStart,
409    ParagraphInside,
410
411    RawFlowStart,
412    RawFlowBeforeSequenceOpen,
413    RawFlowSequenceOpen,
414    RawFlowInfoBefore,
415    RawFlowInfo,
416    RawFlowMetaBefore,
417    RawFlowMeta,
418    RawFlowAtNonLazyBreak,
419    RawFlowCloseStart,
420    RawFlowBeforeSequenceClose,
421    RawFlowSequenceClose,
422    RawFlowAfterSequenceClose,
423    RawFlowContentBefore,
424    RawFlowContentStart,
425    RawFlowBeforeContentChunk,
426    RawFlowContentChunk,
427    RawFlowAfter,
428
429    RawTextStart,
430    RawTextSequenceOpen,
431    RawTextBetween,
432    RawTextData,
433    RawTextSequenceClose,
434
435    SpaceOrTabStart,
436    SpaceOrTabInside,
437    SpaceOrTabAfter,
438
439    SpaceOrTabEolStart,
440    SpaceOrTabEolAfterFirst,
441    SpaceOrTabEolAfterEol,
442    SpaceOrTabEolAtEol,
443    SpaceOrTabEolAfterMore,
444
445    StringStart,
446    StringBefore,
447    StringBeforeData,
448
449    TextStart,
450    TextBefore,
451    TextBeforeHtml,
452    TextBeforeMdxJsx,
453    TextBeforeHardBreakEscape,
454    TextBeforeLabelStartLink,
455    TextBeforeData,
456
457    ThematicBreakStart,
458    ThematicBreakBefore,
459    ThematicBreakSequence,
460    ThematicBreakAtBreak,
461
462    TitleStart,
463    TitleBegin,
464    TitleAfterEol,
465    TitleAtBreak,
466    TitleEscape,
467    TitleInside,
468    TitleNok,
469}
470
471#[allow(clippy::too_many_lines)]
472/// Call the corresponding state for a state name.
473pub fn call(tokenizer: &mut Tokenizer, name: Name) -> State {
474    let func = match name {
475        Name::AttentionStart => construct::attention::start,
476        Name::AttentionInside => construct::attention::inside,
477
478        Name::AutolinkStart => construct::autolink::start,
479        Name::AutolinkOpen => construct::autolink::open,
480        Name::AutolinkSchemeOrEmailAtext => construct::autolink::scheme_or_email_atext,
481        Name::AutolinkSchemeInsideOrEmailAtext => construct::autolink::scheme_inside_or_email_atext,
482        Name::AutolinkUrlInside => construct::autolink::url_inside,
483        Name::AutolinkEmailAtSignOrDot => construct::autolink::email_at_sign_or_dot,
484        Name::AutolinkEmailAtext => construct::autolink::email_atext,
485        Name::AutolinkEmailValue => construct::autolink::email_value,
486        Name::AutolinkEmailLabel => construct::autolink::email_label,
487
488        Name::BlankLineStart => construct::blank_line::start,
489        Name::BlankLineAfter => construct::blank_line::after,
490
491        Name::BlockQuoteStart => construct::block_quote::start,
492        Name::BlockQuoteContStart => construct::block_quote::cont_start,
493        Name::BlockQuoteContBefore => construct::block_quote::cont_before,
494        Name::BlockQuoteContAfter => construct::block_quote::cont_after,
495
496        Name::BomStart => construct::partial_bom::start,
497        Name::BomInside => construct::partial_bom::inside,
498
499        Name::CharacterEscapeStart => construct::character_escape::start,
500        Name::CharacterEscapeInside => construct::character_escape::inside,
501
502        Name::CharacterReferenceStart => construct::character_reference::start,
503        Name::CharacterReferenceOpen => construct::character_reference::open,
504        Name::CharacterReferenceNumeric => construct::character_reference::numeric,
505        Name::CharacterReferenceValue => construct::character_reference::value,
506
507        Name::CodeIndentedStart => construct::code_indented::start,
508        Name::CodeIndentedAtBreak => construct::code_indented::at_break,
509        Name::CodeIndentedAfter => construct::code_indented::after,
510        Name::CodeIndentedFurtherStart => construct::code_indented::further_start,
511        Name::CodeIndentedInside => construct::code_indented::inside,
512        Name::CodeIndentedFurtherBegin => construct::code_indented::further_begin,
513        Name::CodeIndentedFurtherAfter => construct::code_indented::further_after,
514
515        Name::ContentChunkStart => construct::content::chunk_start,
516        Name::ContentChunkInside => construct::content::chunk_inside,
517        Name::ContentDefinitionBefore => construct::content::definition_before,
518        Name::ContentDefinitionAfter => construct::content::definition_after,
519
520        Name::DataStart => construct::partial_data::start,
521        Name::DataInside => construct::partial_data::inside,
522        Name::DataAtBreak => construct::partial_data::at_break,
523
524        Name::DefinitionStart => construct::definition::start,
525        Name::DefinitionBefore => construct::definition::before,
526        Name::DefinitionLabelAfter => construct::definition::label_after,
527        Name::DefinitionLabelNok => construct::definition::label_nok,
528        Name::DefinitionMarkerAfter => construct::definition::marker_after,
529        Name::DefinitionDestinationBefore => construct::definition::destination_before,
530        Name::DefinitionDestinationAfter => construct::definition::destination_after,
531        Name::DefinitionDestinationMissing => construct::definition::destination_missing,
532        Name::DefinitionTitleBefore => construct::definition::title_before,
533        Name::DefinitionAfter => construct::definition::after,
534        Name::DefinitionAfterWhitespace => construct::definition::after_whitespace,
535        Name::DefinitionTitleBeforeMarker => construct::definition::title_before_marker,
536        Name::DefinitionTitleAfter => construct::definition::title_after,
537        Name::DefinitionTitleAfterOptionalWhitespace => {
538            construct::definition::title_after_optional_whitespace
539        }
540
541        Name::DestinationStart => construct::partial_destination::start,
542        Name::DestinationEnclosedBefore => construct::partial_destination::enclosed_before,
543        Name::DestinationEnclosed => construct::partial_destination::enclosed,
544        Name::DestinationEnclosedEscape => construct::partial_destination::enclosed_escape,
545        Name::DestinationRaw => construct::partial_destination::raw,
546        Name::DestinationRawEscape => construct::partial_destination::raw_escape,
547
548        Name::DocumentStart => construct::document::start,
549        Name::DocumentBeforeFrontmatter => construct::document::before_frontmatter,
550        Name::DocumentContainerExistingBefore => construct::document::container_existing_before,
551        Name::DocumentContainerExistingAfter => construct::document::container_existing_after,
552        Name::DocumentContainerNewBefore => construct::document::container_new_before,
553        Name::DocumentContainerNewBeforeNotBlockQuote => {
554            construct::document::container_new_before_not_block_quote
555        }
556        Name::DocumentContainerNewBeforeNotList => {
557            construct::document::container_new_before_not_list
558        }
559        Name::DocumentContainerNewBeforeNotGfmFootnoteDefinition => {
560            construct::document::container_new_before_not_footnote_definition
561        }
562        Name::DocumentContainerNewAfter => construct::document::container_new_after,
563        Name::DocumentContainersAfter => construct::document::containers_after,
564        Name::DocumentFlowEnd => construct::document::flow_end,
565        Name::DocumentFlowInside => construct::document::flow_inside,
566
567        Name::FlowStart => construct::flow::start,
568        Name::FlowBeforeGfmTable => construct::flow::before_gfm_table,
569        Name::FlowBeforeCodeIndented => construct::flow::before_code_indented,
570        Name::FlowBeforeRaw => construct::flow::before_raw,
571        Name::FlowBeforeHtml => construct::flow::before_html,
572        Name::FlowBeforeMdxExpression => construct::flow::before_mdx_expression,
573        Name::FlowBeforeMdxJsx => construct::flow::before_mdx_jsx,
574        Name::FlowBeforeHeadingAtx => construct::flow::before_heading_atx,
575        Name::FlowBeforeHeadingSetext => construct::flow::before_heading_setext,
576        Name::FlowBeforeThematicBreak => construct::flow::before_thematic_break,
577        Name::FlowAfter => construct::flow::after,
578        Name::FlowBlankLineBefore => construct::flow::blank_line_before,
579        Name::FlowBlankLineAfter => construct::flow::blank_line_after,
580        Name::FlowBeforeContent => construct::flow::before_content,
581
582        Name::FrontmatterStart => construct::frontmatter::start,
583        Name::FrontmatterOpenSequence => construct::frontmatter::open_sequence,
584        Name::FrontmatterOpenAfter => construct::frontmatter::open_after,
585        Name::FrontmatterAfter => construct::frontmatter::after,
586        Name::FrontmatterContentStart => construct::frontmatter::content_start,
587        Name::FrontmatterContentInside => construct::frontmatter::content_inside,
588        Name::FrontmatterContentEnd => construct::frontmatter::content_end,
589        Name::FrontmatterCloseStart => construct::frontmatter::close_start,
590        Name::FrontmatterCloseSequence => construct::frontmatter::close_sequence,
591        Name::FrontmatterCloseAfter => construct::frontmatter::close_after,
592
593        Name::GfmAutolinkLiteralProtocolStart => construct::gfm_autolink_literal::protocol_start,
594        Name::GfmAutolinkLiteralProtocolAfter => construct::gfm_autolink_literal::protocol_after,
595        Name::GfmAutolinkLiteralProtocolPrefixInside => {
596            construct::gfm_autolink_literal::protocol_prefix_inside
597        }
598        Name::GfmAutolinkLiteralProtocolSlashesInside => {
599            construct::gfm_autolink_literal::protocol_slashes_inside
600        }
601        Name::GfmAutolinkLiteralWwwAfter => construct::gfm_autolink_literal::www_after,
602        Name::GfmAutolinkLiteralWwwStart => construct::gfm_autolink_literal::www_start,
603        Name::GfmAutolinkLiteralWwwPrefixInside => {
604            construct::gfm_autolink_literal::www_prefix_inside
605        }
606        Name::GfmAutolinkLiteralWwwPrefixAfter => construct::gfm_autolink_literal::www_prefix_after,
607        Name::GfmAutolinkLiteralDomainInside => construct::gfm_autolink_literal::domain_inside,
608        Name::GfmAutolinkLiteralDomainAtPunctuation => {
609            construct::gfm_autolink_literal::domain_at_punctuation
610        }
611        Name::GfmAutolinkLiteralDomainAfter => construct::gfm_autolink_literal::domain_after,
612        Name::GfmAutolinkLiteralPathInside => construct::gfm_autolink_literal::path_inside,
613        Name::GfmAutolinkLiteralPathAtPunctuation => {
614            construct::gfm_autolink_literal::path_at_punctuation
615        }
616        Name::GfmAutolinkLiteralPathAfter => construct::gfm_autolink_literal::path_after,
617        Name::GfmAutolinkLiteralTrail => construct::gfm_autolink_literal::trail,
618        Name::GfmAutolinkLiteralTrailCharRefStart => {
619            construct::gfm_autolink_literal::trail_char_ref_start
620        }
621        Name::GfmAutolinkLiteralTrailCharRefInside => {
622            construct::gfm_autolink_literal::trail_char_ref_inside
623        }
624        Name::GfmAutolinkLiteralTrailBracketAfter => {
625            construct::gfm_autolink_literal::trail_bracket_after
626        }
627
628        Name::GfmFootnoteDefinitionStart => construct::gfm_footnote_definition::start,
629        Name::GfmFootnoteDefinitionLabelBefore => construct::gfm_footnote_definition::label_before,
630        Name::GfmFootnoteDefinitionLabelAtMarker => {
631            construct::gfm_footnote_definition::label_at_marker
632        }
633        Name::GfmFootnoteDefinitionLabelInside => construct::gfm_footnote_definition::label_inside,
634        Name::GfmFootnoteDefinitionLabelEscape => construct::gfm_footnote_definition::label_escape,
635        Name::GfmFootnoteDefinitionLabelAfter => construct::gfm_footnote_definition::label_after,
636        Name::GfmFootnoteDefinitionWhitespaceAfter => {
637            construct::gfm_footnote_definition::whitespace_after
638        }
639        Name::GfmFootnoteDefinitionContStart => construct::gfm_footnote_definition::cont_start,
640        Name::GfmFootnoteDefinitionContBlank => construct::gfm_footnote_definition::cont_blank,
641        Name::GfmFootnoteDefinitionContFilled => construct::gfm_footnote_definition::cont_filled,
642
643        Name::GfmLabelStartFootnoteStart => construct::gfm_label_start_footnote::start,
644        Name::GfmLabelStartFootnoteOpen => construct::gfm_label_start_footnote::open,
645
646        Name::GfmTableStart => construct::gfm_table::start,
647        Name::GfmTableHeadRowBefore => construct::gfm_table::head_row_before,
648        Name::GfmTableHeadRowStart => construct::gfm_table::head_row_start,
649        Name::GfmTableHeadRowBreak => construct::gfm_table::head_row_break,
650        Name::GfmTableHeadRowData => construct::gfm_table::head_row_data,
651        Name::GfmTableHeadRowEscape => construct::gfm_table::head_row_escape,
652        Name::GfmTableHeadDelimiterStart => construct::gfm_table::head_delimiter_start,
653        Name::GfmTableHeadDelimiterBefore => construct::gfm_table::head_delimiter_before,
654        Name::GfmTableHeadDelimiterCellBefore => construct::gfm_table::head_delimiter_cell_before,
655        Name::GfmTableHeadDelimiterValueBefore => construct::gfm_table::head_delimiter_value_before,
656        Name::GfmTableHeadDelimiterLeftAlignmentAfter => {
657            construct::gfm_table::head_delimiter_left_alignment_after
658        }
659        Name::GfmTableHeadDelimiterFiller => construct::gfm_table::head_delimiter_filler,
660        Name::GfmTableHeadDelimiterRightAlignmentAfter => {
661            construct::gfm_table::head_delimiter_right_alignment_after
662        }
663        Name::GfmTableHeadDelimiterCellAfter => construct::gfm_table::head_delimiter_cell_after,
664        Name::GfmTableHeadDelimiterNok => construct::gfm_table::head_delimiter_nok,
665        Name::GfmTableBodyRowStart => construct::gfm_table::body_row_start,
666        Name::GfmTableBodyRowBreak => construct::gfm_table::body_row_break,
667        Name::GfmTableBodyRowData => construct::gfm_table::body_row_data,
668        Name::GfmTableBodyRowEscape => construct::gfm_table::body_row_escape,
669
670        Name::GfmTaskListItemCheckStart => construct::gfm_task_list_item_check::start,
671        Name::GfmTaskListItemCheckInside => construct::gfm_task_list_item_check::inside,
672        Name::GfmTaskListItemCheckClose => construct::gfm_task_list_item_check::close,
673        Name::GfmTaskListItemCheckAfter => construct::gfm_task_list_item_check::after,
674        Name::GfmTaskListItemCheckAfterSpaceOrTab => {
675            construct::gfm_task_list_item_check::after_space_or_tab
676        }
677
678        Name::HardBreakEscapeStart => construct::hard_break_escape::start,
679        Name::HardBreakEscapeAfter => construct::hard_break_escape::after,
680
681        Name::HeadingAtxStart => construct::heading_atx::start,
682        Name::HeadingAtxBefore => construct::heading_atx::before,
683        Name::HeadingAtxSequenceOpen => construct::heading_atx::sequence_open,
684        Name::HeadingAtxAtBreak => construct::heading_atx::at_break,
685        Name::HeadingAtxSequenceFurther => construct::heading_atx::sequence_further,
686        Name::HeadingAtxData => construct::heading_atx::data,
687
688        Name::HeadingSetextStart => construct::heading_setext::start,
689        Name::HeadingSetextBefore => construct::heading_setext::before,
690        Name::HeadingSetextInside => construct::heading_setext::inside,
691        Name::HeadingSetextAfter => construct::heading_setext::after,
692
693        Name::HtmlFlowStart => construct::html_flow::start,
694        Name::HtmlFlowBefore => construct::html_flow::before,
695        Name::HtmlFlowOpen => construct::html_flow::open,
696        Name::HtmlFlowDeclarationOpen => construct::html_flow::declaration_open,
697        Name::HtmlFlowCommentOpenInside => construct::html_flow::comment_open_inside,
698        Name::HtmlFlowCdataOpenInside => construct::html_flow::cdata_open_inside,
699        Name::HtmlFlowTagCloseStart => construct::html_flow::tag_close_start,
700        Name::HtmlFlowTagName => construct::html_flow::tag_name,
701        Name::HtmlFlowBasicSelfClosing => construct::html_flow::basic_self_closing,
702        Name::HtmlFlowCompleteClosingTagAfter => construct::html_flow::complete_closing_tag_after,
703        Name::HtmlFlowCompleteEnd => construct::html_flow::complete_end,
704        Name::HtmlFlowCompleteAttributeNameBefore => {
705            construct::html_flow::complete_attribute_name_before
706        }
707        Name::HtmlFlowCompleteAttributeName => construct::html_flow::complete_attribute_name,
708        Name::HtmlFlowCompleteAttributeNameAfter => {
709            construct::html_flow::complete_attribute_name_after
710        }
711        Name::HtmlFlowCompleteAttributeValueBefore => {
712            construct::html_flow::complete_attribute_value_before
713        }
714        Name::HtmlFlowCompleteAttributeValueQuoted => {
715            construct::html_flow::complete_attribute_value_quoted
716        }
717        Name::HtmlFlowCompleteAttributeValueQuotedAfter => {
718            construct::html_flow::complete_attribute_value_quoted_after
719        }
720        Name::HtmlFlowCompleteAttributeValueUnquoted => {
721            construct::html_flow::complete_attribute_value_unquoted
722        }
723        Name::HtmlFlowCompleteAfter => construct::html_flow::complete_after,
724        Name::HtmlFlowBlankLineBefore => construct::html_flow::blank_line_before,
725        Name::HtmlFlowContinuation => construct::html_flow::continuation,
726        Name::HtmlFlowContinuationDeclarationInside => {
727            construct::html_flow::continuation_declaration_inside
728        }
729        Name::HtmlFlowContinuationAfter => construct::html_flow::continuation_after,
730        Name::HtmlFlowContinuationStart => construct::html_flow::continuation_start,
731        Name::HtmlFlowContinuationBefore => construct::html_flow::continuation_before,
732        Name::HtmlFlowContinuationCommentInside => {
733            construct::html_flow::continuation_comment_inside
734        }
735        Name::HtmlFlowContinuationRawTagOpen => construct::html_flow::continuation_raw_tag_open,
736        Name::HtmlFlowContinuationRawEndTag => construct::html_flow::continuation_raw_end_tag,
737        Name::HtmlFlowContinuationClose => construct::html_flow::continuation_close,
738        Name::HtmlFlowContinuationCdataInside => construct::html_flow::continuation_cdata_inside,
739        Name::HtmlFlowContinuationStartNonLazy => construct::html_flow::continuation_start_non_lazy,
740
741        Name::HtmlTextStart => construct::html_text::start,
742        Name::HtmlTextOpen => construct::html_text::open,
743        Name::HtmlTextDeclarationOpen => construct::html_text::declaration_open,
744        Name::HtmlTextTagCloseStart => construct::html_text::tag_close_start,
745        Name::HtmlTextTagClose => construct::html_text::tag_close,
746        Name::HtmlTextTagCloseBetween => construct::html_text::tag_close_between,
747        Name::HtmlTextTagOpen => construct::html_text::tag_open,
748        Name::HtmlTextTagOpenBetween => construct::html_text::tag_open_between,
749        Name::HtmlTextTagOpenAttributeName => construct::html_text::tag_open_attribute_name,
750        Name::HtmlTextTagOpenAttributeNameAfter => {
751            construct::html_text::tag_open_attribute_name_after
752        }
753        Name::HtmlTextTagOpenAttributeValueBefore => {
754            construct::html_text::tag_open_attribute_value_before
755        }
756        Name::HtmlTextTagOpenAttributeValueQuoted => {
757            construct::html_text::tag_open_attribute_value_quoted
758        }
759        Name::HtmlTextTagOpenAttributeValueQuotedAfter => {
760            construct::html_text::tag_open_attribute_value_quoted_after
761        }
762        Name::HtmlTextTagOpenAttributeValueUnquoted => {
763            construct::html_text::tag_open_attribute_value_unquoted
764        }
765        Name::HtmlTextCdata => construct::html_text::cdata,
766        Name::HtmlTextCdataOpenInside => construct::html_text::cdata_open_inside,
767        Name::HtmlTextCdataClose => construct::html_text::cdata_close,
768        Name::HtmlTextCdataEnd => construct::html_text::cdata_end,
769        Name::HtmlTextCommentOpenInside => construct::html_text::comment_open_inside,
770        Name::HtmlTextComment => construct::html_text::comment,
771        Name::HtmlTextCommentClose => construct::html_text::comment_close,
772        Name::HtmlTextCommentEnd => construct::html_text::comment_end,
773        Name::HtmlTextDeclaration => construct::html_text::declaration,
774        Name::HtmlTextEnd => construct::html_text::end,
775        Name::HtmlTextInstruction => construct::html_text::instruction,
776        Name::HtmlTextInstructionClose => construct::html_text::instruction_close,
777        Name::HtmlTextLineEndingBefore => construct::html_text::line_ending_before,
778        Name::HtmlTextLineEndingAfter => construct::html_text::line_ending_after,
779        Name::HtmlTextLineEndingAfterPrefix => construct::html_text::line_ending_after_prefix,
780
781        Name::LabelStart => construct::partial_label::start,
782        Name::LabelAtBreak => construct::partial_label::at_break,
783        Name::LabelEolAfter => construct::partial_label::eol_after,
784        Name::LabelEscape => construct::partial_label::escape,
785        Name::LabelInside => construct::partial_label::inside,
786        Name::LabelNok => construct::partial_label::nok,
787
788        Name::LabelEndStart => construct::label_end::start,
789        Name::LabelEndAfter => construct::label_end::after,
790        Name::LabelEndResourceStart => construct::label_end::resource_start,
791        Name::LabelEndResourceBefore => construct::label_end::resource_before,
792        Name::LabelEndResourceOpen => construct::label_end::resource_open,
793        Name::LabelEndResourceDestinationAfter => construct::label_end::resource_destination_after,
794        Name::LabelEndResourceDestinationMissing => {
795            construct::label_end::resource_destination_missing
796        }
797        Name::LabelEndResourceBetween => construct::label_end::resource_between,
798        Name::LabelEndResourceTitleAfter => construct::label_end::resource_title_after,
799        Name::LabelEndResourceEnd => construct::label_end::resource_end,
800        Name::LabelEndOk => construct::label_end::ok,
801        Name::LabelEndNok => construct::label_end::nok,
802        Name::LabelEndReferenceFull => construct::label_end::reference_full,
803        Name::LabelEndReferenceFullAfter => construct::label_end::reference_full_after,
804        Name::LabelEndReferenceFullMissing => construct::label_end::reference_full_missing,
805        Name::LabelEndReferenceNotFull => construct::label_end::reference_not_full,
806        Name::LabelEndReferenceCollapsed => construct::label_end::reference_collapsed,
807        Name::LabelEndReferenceCollapsedOpen => construct::label_end::reference_collapsed_open,
808
809        Name::LabelStartImageStart => construct::label_start_image::start,
810        Name::LabelStartImageOpen => construct::label_start_image::open,
811        Name::LabelStartImageAfter => construct::label_start_image::after,
812        Name::LabelStartLinkStart => construct::label_start_link::start,
813
814        Name::ListItemStart => construct::list_item::start,
815        Name::ListItemBefore => construct::list_item::before,
816        Name::ListItemBeforeOrdered => construct::list_item::before_ordered,
817        Name::ListItemBeforeUnordered => construct::list_item::before_unordered,
818        Name::ListItemValue => construct::list_item::value,
819        Name::ListItemMarker => construct::list_item::marker,
820        Name::ListItemMarkerAfter => construct::list_item::marker_after,
821        Name::ListItemAfter => construct::list_item::after,
822        Name::ListItemMarkerAfterFilled => construct::list_item::marker_after_filled,
823        Name::ListItemWhitespace => construct::list_item::whitespace,
824        Name::ListItemWhitespaceAfter => construct::list_item::whitespace_after,
825        Name::ListItemPrefixOther => construct::list_item::prefix_other,
826        Name::ListItemContStart => construct::list_item::cont_start,
827        Name::ListItemContBlank => construct::list_item::cont_blank,
828        Name::ListItemContFilled => construct::list_item::cont_filled,
829
830        Name::MdxEsmStart => construct::mdx_esm::start,
831        Name::MdxEsmWord => construct::mdx_esm::word,
832        Name::MdxEsmInside => construct::mdx_esm::inside,
833        Name::MdxEsmLineStart => construct::mdx_esm::line_start,
834        Name::MdxEsmBlankLineBefore => construct::mdx_esm::blank_line_before,
835        Name::MdxEsmContinuationStart => construct::mdx_esm::continuation_start,
836        Name::MdxEsmAtEnd => construct::mdx_esm::at_end,
837
838        Name::MdxExpressionStart => construct::partial_mdx_expression::start,
839        Name::MdxExpressionPrefix => construct::partial_mdx_expression::prefix,
840        Name::MdxExpressionBefore => construct::partial_mdx_expression::before,
841        Name::MdxExpressionInside => construct::partial_mdx_expression::inside,
842        Name::MdxExpressionEolAfter => construct::partial_mdx_expression::eol_after,
843
844        Name::MdxExpressionFlowStart => construct::mdx_expression_flow::start,
845        Name::MdxExpressionFlowBefore => construct::mdx_expression_flow::before,
846        Name::MdxExpressionFlowAfter => construct::mdx_expression_flow::after,
847        Name::MdxExpressionFlowEnd => construct::mdx_expression_flow::end,
848
849        Name::MdxExpressionTextStart => construct::mdx_expression_text::start,
850        Name::MdxExpressionTextAfter => construct::mdx_expression_text::after,
851
852        Name::MdxJsxFlowStart => construct::mdx_jsx_flow::start,
853        Name::MdxJsxFlowBefore => construct::mdx_jsx_flow::before,
854        Name::MdxJsxFlowAfter => construct::mdx_jsx_flow::after,
855        Name::MdxJsxFlowEnd => construct::mdx_jsx_flow::end,
856        Name::MdxJsxFlowNok => construct::mdx_jsx_flow::nok,
857
858        Name::MdxJsxTextStart => construct::mdx_jsx_text::start,
859        Name::MdxJsxTextAfter => construct::mdx_jsx_text::after,
860        Name::MdxJsxTextNok => construct::mdx_jsx_text::nok,
861
862        Name::MdxJsxStart => construct::partial_mdx_jsx::start,
863        Name::MdxJsxStartAfter => construct::partial_mdx_jsx::start_after,
864        Name::MdxJsxNameBefore => construct::partial_mdx_jsx::name_before,
865        Name::MdxJsxClosingTagNameBefore => construct::partial_mdx_jsx::closing_tag_name_before,
866        Name::MdxJsxTagEnd => construct::partial_mdx_jsx::tag_end,
867        Name::MdxJsxPrimaryName => construct::partial_mdx_jsx::primary_name,
868        Name::MdxJsxPrimaryNameAfter => construct::partial_mdx_jsx::primary_name_after,
869        Name::MdxJsxMemberNameBefore => construct::partial_mdx_jsx::member_name_before,
870        Name::MdxJsxMemberName => construct::partial_mdx_jsx::member_name,
871        Name::MdxJsxMemberNameAfter => construct::partial_mdx_jsx::member_name_after,
872        Name::MdxJsxLocalNameBefore => construct::partial_mdx_jsx::local_name_before,
873        Name::MdxJsxLocalName => construct::partial_mdx_jsx::local_name,
874        Name::MdxJsxLocalNameAfter => construct::partial_mdx_jsx::local_name_after,
875        Name::MdxJsxAttributeBefore => construct::partial_mdx_jsx::attribute_before,
876        Name::MdxJsxSelfClosing => construct::partial_mdx_jsx::self_closing,
877        Name::MdxJsxAttributeExpressionAfter => {
878            construct::partial_mdx_jsx::attribute_expression_after
879        }
880        Name::MdxJsxAttributePrimaryName => construct::partial_mdx_jsx::attribute_primary_name,
881        Name::MdxJsxAttributePrimaryNameAfter => {
882            construct::partial_mdx_jsx::attribute_primary_name_after
883        }
884        Name::MdxJsxAttributeLocalNameBefore => {
885            construct::partial_mdx_jsx::attribute_local_name_before
886        }
887        Name::MdxJsxAttributeLocalName => construct::partial_mdx_jsx::attribute_local_name,
888        Name::MdxJsxAttributeLocalNameAfter => {
889            construct::partial_mdx_jsx::attribute_local_name_after
890        }
891        Name::MdxJsxAttributeValueBefore => construct::partial_mdx_jsx::attribute_value_before,
892        Name::MdxJsxAttributeValueQuotedStart => {
893            construct::partial_mdx_jsx::attribute_value_quoted_start
894        }
895        Name::MdxJsxAttributeValueQuoted => construct::partial_mdx_jsx::attribute_value_quoted,
896        Name::MdxJsxAttributeValueExpressionAfter => {
897            construct::partial_mdx_jsx::attribute_value_expression_after
898        }
899        Name::MdxJsxEsWhitespaceStart => construct::partial_mdx_jsx::es_whitespace_start,
900        Name::MdxJsxEsWhitespaceInside => construct::partial_mdx_jsx::es_whitespace_inside,
901        Name::MdxJsxEsWhitespaceEolAfter => construct::partial_mdx_jsx::es_whitespace_eol_after,
902
903        Name::NonLazyContinuationStart => construct::partial_non_lazy_continuation::start,
904        Name::NonLazyContinuationAfter => construct::partial_non_lazy_continuation::after,
905
906        Name::ParagraphStart => construct::paragraph::start,
907        Name::ParagraphLineStart => construct::paragraph::line_start,
908        Name::ParagraphInside => construct::paragraph::inside,
909
910        Name::RawFlowStart => construct::raw_flow::start,
911        Name::RawFlowBeforeSequenceOpen => construct::raw_flow::before_sequence_open,
912        Name::RawFlowSequenceOpen => construct::raw_flow::sequence_open,
913        Name::RawFlowInfoBefore => construct::raw_flow::info_before,
914        Name::RawFlowInfo => construct::raw_flow::info,
915        Name::RawFlowMetaBefore => construct::raw_flow::meta_before,
916        Name::RawFlowMeta => construct::raw_flow::meta,
917        Name::RawFlowAtNonLazyBreak => construct::raw_flow::at_non_lazy_break,
918        Name::RawFlowCloseStart => construct::raw_flow::close_start,
919        Name::RawFlowBeforeSequenceClose => construct::raw_flow::before_sequence_close,
920        Name::RawFlowSequenceClose => construct::raw_flow::sequence_close,
921        Name::RawFlowAfterSequenceClose => construct::raw_flow::sequence_close_after,
922        Name::RawFlowContentBefore => construct::raw_flow::content_before,
923        Name::RawFlowContentStart => construct::raw_flow::content_start,
924        Name::RawFlowBeforeContentChunk => construct::raw_flow::before_content_chunk,
925        Name::RawFlowContentChunk => construct::raw_flow::content_chunk,
926        Name::RawFlowAfter => construct::raw_flow::after,
927
928        Name::RawTextStart => construct::raw_text::start,
929        Name::RawTextSequenceOpen => construct::raw_text::sequence_open,
930        Name::RawTextBetween => construct::raw_text::between,
931        Name::RawTextData => construct::raw_text::data,
932        Name::RawTextSequenceClose => construct::raw_text::sequence_close,
933
934        Name::SpaceOrTabStart => construct::partial_space_or_tab::start,
935        Name::SpaceOrTabInside => construct::partial_space_or_tab::inside,
936        Name::SpaceOrTabAfter => construct::partial_space_or_tab::after,
937
938        Name::SpaceOrTabEolStart => construct::partial_space_or_tab_eol::start,
939        Name::SpaceOrTabEolAfterFirst => construct::partial_space_or_tab_eol::after_first,
940        Name::SpaceOrTabEolAfterEol => construct::partial_space_or_tab_eol::after_eol,
941        Name::SpaceOrTabEolAtEol => construct::partial_space_or_tab_eol::at_eol,
942        Name::SpaceOrTabEolAfterMore => construct::partial_space_or_tab_eol::after_more,
943
944        Name::StringStart => construct::string::start,
945        Name::StringBefore => construct::string::before,
946        Name::StringBeforeData => construct::string::before_data,
947
948        Name::TextStart => construct::text::start,
949        Name::TextBefore => construct::text::before,
950        Name::TextBeforeHtml => construct::text::before_html,
951        Name::TextBeforeMdxJsx => construct::text::before_mdx_jsx,
952        Name::TextBeforeHardBreakEscape => construct::text::before_hard_break_escape,
953        Name::TextBeforeLabelStartLink => construct::text::before_label_start_link,
954        Name::TextBeforeData => construct::text::before_data,
955
956        Name::ThematicBreakStart => construct::thematic_break::start,
957        Name::ThematicBreakBefore => construct::thematic_break::before,
958        Name::ThematicBreakSequence => construct::thematic_break::sequence,
959        Name::ThematicBreakAtBreak => construct::thematic_break::at_break,
960
961        Name::TitleStart => construct::partial_title::start,
962        Name::TitleBegin => construct::partial_title::begin,
963        Name::TitleAfterEol => construct::partial_title::after_eol,
964        Name::TitleAtBreak => construct::partial_title::at_break,
965        Name::TitleEscape => construct::partial_title::escape,
966        Name::TitleInside => construct::partial_title::inside,
967        Name::TitleNok => construct::partial_title::nok,
968    };
969
970    func(tokenizer)
971}