/* Original C version https://github.com/jgm/peg-markdown/ * Copyright 2008 John MacFarlane (jgm at berkeley dot edu). * * Modifications and translation from C into Go * based on markdown_parser.leg and utility_functions.c * Copyright 2010 Michael Teichgräber (mt at wmipf dot de) * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License or the MIT * license. See LICENSE for details. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ package markdown // PEG grammar and parser actions for markdown syntax. import ( "fmt" "io" "log" "strings" ) const ( parserIfaceVersion_17 = iota ) // Semantic value of a parsing action. type element struct { key int contents children *element next *element } // Information (label, URL and title) for a link. type link struct { label *element url string title string } // Union for contents of an Element (string, list, or link). type contents struct { str string *link } // Types of semantic values returned by parsers. const ( LIST = iota /* A generic list of values. For ordered and bullet lists, see below. */ RAW /* Raw markdown to be processed further */ SPACE LINEBREAK ELLIPSIS EMDASH ENDASH APOSTROPHE SINGLEQUOTED DOUBLEQUOTED STR LINK IMAGE CODE HTML EMPH STRONG STRIKE PLAIN PARA LISTITEM BULLETLIST ORDEREDLIST H1 /* Code assumes that H1..6 are in order. */ H2 H3 H4 H5 H6 BLOCKQUOTE VERBATIM HTMLBLOCK HRULE REFERENCE NOTE DEFINITIONLIST DEFTITLE DEFDATA numVAL ) type state struct { extension Extensions heap elemHeap tree *element /* Results of parse. */ references *element /* List of link references found. */ notes *element /* List of footnotes found. */ } const ( ruleDoc = iota ruleDocblock ruleBlock rulePara rulePlain ruleAtxInline ruleAtxStart ruleAtxHeading ruleSetextHeading ruleSetextBottom1 ruleSetextBottom2 ruleSetextHeading1 ruleSetextHeading2 ruleHeading ruleBlockQuote ruleBlockQuoteRaw ruleNonblankIndentedLine ruleVerbatimChunk ruleVerbatim ruleHorizontalRule ruleBullet ruleBulletList ruleListTight ruleListLoose ruleListItem ruleListItemTight ruleListBlock ruleListContinuationBlock ruleEnumerator ruleOrderedList ruleListBlockLine ruleHtmlBlockOpenAddress ruleHtmlBlockCloseAddress ruleHtmlBlockAddress ruleHtmlBlockOpenBlockquote ruleHtmlBlockCloseBlockquote ruleHtmlBlockBlockquote ruleHtmlBlockOpenCenter ruleHtmlBlockCloseCenter ruleHtmlBlockCenter ruleHtmlBlockOpenDir ruleHtmlBlockCloseDir ruleHtmlBlockDir ruleHtmlBlockOpenDiv ruleHtmlBlockCloseDiv ruleHtmlBlockDiv ruleHtmlBlockOpenDl ruleHtmlBlockCloseDl ruleHtmlBlockDl ruleHtmlBlockOpenFieldset ruleHtmlBlockCloseFieldset ruleHtmlBlockFieldset ruleHtmlBlockOpenForm ruleHtmlBlockCloseForm ruleHtmlBlockForm ruleHtmlBlockOpenH1 ruleHtmlBlockCloseH1 ruleHtmlBlockH1 ruleHtmlBlockOpenH2 ruleHtmlBlockCloseH2 ruleHtmlBlockH2 ruleHtmlBlockOpenH3 ruleHtmlBlockCloseH3 ruleHtmlBlockH3 ruleHtmlBlockOpenH4 ruleHtmlBlockCloseH4 ruleHtmlBlockH4 ruleHtmlBlockOpenH5 ruleHtmlBlockCloseH5 ruleHtmlBlockH5 ruleHtmlBlockOpenH6 ruleHtmlBlockCloseH6 ruleHtmlBlockH6 ruleHtmlBlockOpenMenu ruleHtmlBlockCloseMenu ruleHtmlBlockMenu ruleHtmlBlockOpenNoframes ruleHtmlBlockCloseNoframes ruleHtmlBlockNoframes ruleHtmlBlockOpenNoscript ruleHtmlBlockCloseNoscript ruleHtmlBlockNoscript ruleHtmlBlockOpenOl ruleHtmlBlockCloseOl ruleHtmlBlockOl ruleHtmlBlockOpenP ruleHtmlBlockCloseP ruleHtmlBlockP ruleHtmlBlockOpenPre ruleHtmlBlockClosePre ruleHtmlBlockPre ruleHtmlBlockOpenTable ruleHtmlBlockCloseTable ruleHtmlBlockTable ruleHtmlBlockOpenUl ruleHtmlBlockCloseUl ruleHtmlBlockUl ruleHtmlBlockOpenDd ruleHtmlBlockCloseDd ruleHtmlBlockDd ruleHtmlBlockOpenDt ruleHtmlBlockCloseDt ruleHtmlBlockDt ruleHtmlBlockOpenFrameset ruleHtmlBlockCloseFrameset ruleHtmlBlockFrameset ruleHtmlBlockOpenLi ruleHtmlBlockCloseLi ruleHtmlBlockLi ruleHtmlBlockOpenTbody ruleHtmlBlockCloseTbody ruleHtmlBlockTbody ruleHtmlBlockOpenTd ruleHtmlBlockCloseTd ruleHtmlBlockTd ruleHtmlBlockOpenTfoot ruleHtmlBlockCloseTfoot ruleHtmlBlockTfoot ruleHtmlBlockOpenTh ruleHtmlBlockCloseTh ruleHtmlBlockTh ruleHtmlBlockOpenThead ruleHtmlBlockCloseThead ruleHtmlBlockThead ruleHtmlBlockOpenTr ruleHtmlBlockCloseTr ruleHtmlBlockTr ruleHtmlBlockOpenScript ruleHtmlBlockCloseScript ruleHtmlBlockScript ruleHtmlBlockOpenHead ruleHtmlBlockCloseHead ruleHtmlBlockHead ruleHtmlBlockInTags ruleHtmlBlock ruleHtmlBlockSelfClosing ruleHtmlBlockType ruleStyleOpen ruleStyleClose ruleInStyleTags ruleStyleBlock ruleInlines ruleInline ruleSpace ruleStr ruleStrChunk ruleAposChunk ruleEscapedChar ruleEntity ruleEndline ruleNormalEndline ruleTerminalEndline ruleLineBreak ruleSymbol ruleUlOrStarLine ruleStarLine ruleUlLine ruleEmph ruleWhitespace ruleEmphStar ruleEmphUl ruleStrong ruleStrongStar ruleStrongUl ruleTwoTildeOpen ruleTwoTildeClose ruleStrike ruleImage ruleLink ruleReferenceLink ruleReferenceLinkDouble ruleReferenceLinkSingle ruleExplicitLink ruleSource ruleSourceContents ruleTitle ruleTitleSingle ruleTitleDouble ruleAutoLink ruleAutoLinkUrl ruleAutoLinkEmail ruleReference ruleLabel ruleRefSrc ruleRefTitle ruleEmptyTitle ruleRefTitleSingle ruleRefTitleDouble ruleRefTitleParens ruleReferences ruleTicks1 ruleTicks2 ruleTicks3 ruleTicks4 ruleTicks5 ruleCode ruleRawHtml ruleBlankLine ruleQuoted ruleHtmlAttribute ruleHtmlComment ruleHtmlTag ruleEof ruleSpacechar ruleNonspacechar ruleNewline ruleSp ruleSpnl ruleSpecialChar ruleNormalChar ruleAlphanumeric ruleAlphanumericAscii ruleDigit ruleHexEntity ruleDecEntity ruleCharEntity ruleNonindentSpace ruleIndent ruleIndentedLine ruleOptionallyIndentedLine ruleStartList ruleLine ruleRawLine ruleSkipBlock ruleExtendedSpecialChar ruleSmart ruleApostrophe ruleEllipsis ruleDash ruleEnDash ruleEmDash ruleSingleQuoteStart ruleSingleQuoteEnd ruleSingleQuoted ruleDoubleQuoteStart ruleDoubleQuoteEnd ruleDoubleQuoted ruleNoteReference ruleRawNoteReference ruleNote ruleInlineNote ruleNotes ruleRawNoteBlock ruleDefinitionList ruleDefinition ruleDListTitle ruleDefTight ruleDefLoose ruleDefmark ruleDefMarker ruleTildeLine ) type yyParser struct { state Buffer string Min, Max int rules [251]func() bool commit func(int) bool ResetBuffer func(string) string } func (p *yyParser) Parse(ruleId int) (err error) { if p.rules[ruleId]() { // Make sure thunkPosition is 0 (there may be a yyPop action on the stack). p.commit(0) return } return p.parseErr() } type errPos struct { Line, Pos int } func (e *errPos) String() string { return fmt.Sprintf("%d:%d", e.Line, e.Pos) } type unexpectedCharError struct { After, At errPos Char byte } func (e *unexpectedCharError) Error() string { return fmt.Sprintf("%v: unexpected character '%c'", &e.At, e.Char) } type unexpectedEOFError struct { After errPos } func (e *unexpectedEOFError) Error() string { return fmt.Sprintf("%v: unexpected end of file", &e.After) } func (p *yyParser) parseErr() (err error) { var pos, after errPos pos.Line = 1 for i, c := range p.Buffer[0:] { if c == '\n' { pos.Line++ pos.Pos = 0 } else { pos.Pos++ } if i == p.Min { if p.Min != p.Max { after = pos } else { break } } else if i == p.Max { break } } if p.Max >= len(p.Buffer) { if p.Min == p.Max { err = io.EOF } else { err = &unexpectedEOFError{after} } } else { err = &unexpectedCharError{after, pos, p.Buffer[p.Max]} } return } func (p *yyParser) Init() { var position int var yyp int var yy *element var yyval = make([]*element, 256) actions := [...]func(string, int){ /* 0 Doc */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 1 Doc */ func(yytext string, _ int) { a := yyval[yyp-1] p.tree = reverse(a) yyval[yyp-1] = a }, /* 2 Docblock */ func(yytext string, _ int) { p.tree = yy }, /* 3 Para */ func(yytext string, _ int) { a := yyval[yyp-1] yy = a yy.key = PARA yyval[yyp-1] = a }, /* 4 Plain */ func(yytext string, _ int) { a := yyval[yyp-1] yy = a yy.key = PLAIN yyval[yyp-1] = a }, /* 5 AtxStart */ func(yytext string, _ int) { yy = p.mkElem(H1 + (len(yytext) - 1)) }, /* 6 AtxHeading */ func(yytext string, _ int) { s := yyval[yyp-1] a := yyval[yyp-2] a = cons(yy, a) yyval[yyp-1] = s yyval[yyp-2] = a }, /* 7 AtxHeading */ func(yytext string, _ int) { s := yyval[yyp-1] a := yyval[yyp-2] yy = p.mkList(s.key, a) s = nil yyval[yyp-1] = s yyval[yyp-2] = a }, /* 8 SetextHeading1 */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 9 SetextHeading1 */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(H1, a) yyval[yyp-1] = a }, /* 10 SetextHeading2 */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 11 SetextHeading2 */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(H2, a) yyval[yyp-1] = a }, /* 12 BlockQuote */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkElem(BLOCKQUOTE) yy.children = a yyval[yyp-1] = a }, /* 13 BlockQuoteRaw */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 14 BlockQuoteRaw */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 15 BlockQuoteRaw */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(p.mkString("\n"), a) yyval[yyp-1] = a }, /* 16 BlockQuoteRaw */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkStringFromList(a, true) yy.key = RAW yyval[yyp-1] = a }, /* 17 VerbatimChunk */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(p.mkString("\n"), a) yyval[yyp-1] = a }, /* 18 VerbatimChunk */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 19 VerbatimChunk */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkStringFromList(a, false) yyval[yyp-1] = a }, /* 20 Verbatim */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 21 Verbatim */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkStringFromList(a, false) yy.key = VERBATIM yyval[yyp-1] = a }, /* 22 HorizontalRule */ func(yytext string, _ int) { yy = p.mkElem(HRULE) }, /* 23 BulletList */ func(yytext string, _ int) { yy.key = BULLETLIST }, /* 24 ListTight */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 25 ListTight */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(LIST, a) yyval[yyp-1] = a }, /* 26 ListLoose */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] li := b.children li.contents.str += "\n\n" a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 27 ListLoose */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(LIST, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 28 ListItem */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 29 ListItem */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 30 ListItem */ func(yytext string, _ int) { a := yyval[yyp-1] raw := p.mkStringFromList(a, false) raw.key = RAW yy = p.mkElem(LISTITEM) yy.children = raw yyval[yyp-1] = a }, /* 31 ListItemTight */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 32 ListItemTight */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 33 ListItemTight */ func(yytext string, _ int) { a := yyval[yyp-1] raw := p.mkStringFromList(a, false) raw.key = RAW yy = p.mkElem(LISTITEM) yy.children = raw yyval[yyp-1] = a }, /* 34 ListBlock */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 35 ListBlock */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 36 ListBlock */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkStringFromList(a, false) yyval[yyp-1] = a }, /* 37 ListContinuationBlock */ func(yytext string, _ int) { a := yyval[yyp-1] if len(yytext) == 0 { a = cons(p.mkString("\001"), a) // block separator } else { a = cons(p.mkString(yytext), a) } yyval[yyp-1] = a }, /* 38 ListContinuationBlock */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 39 ListContinuationBlock */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkStringFromList(a, false) yyval[yyp-1] = a }, /* 40 OrderedList */ func(yytext string, _ int) { yy.key = ORDEREDLIST }, /* 41 HtmlBlock */ func(yytext string, _ int) { if p.extension.FilterHTML { yy = p.mkList(LIST, nil) } else { yy = p.mkString(yytext) yy.key = HTMLBLOCK } }, /* 42 StyleBlock */ func(yytext string, _ int) { if p.extension.FilterStyles { yy = p.mkList(LIST, nil) } else { yy = p.mkString(yytext) yy.key = HTMLBLOCK } }, /* 43 Inlines */ func(yytext string, _ int) { a := yyval[yyp-1] c := yyval[yyp-2] a = cons(yy, a) yyval[yyp-1] = a yyval[yyp-2] = c }, /* 44 Inlines */ func(yytext string, _ int) { a := yyval[yyp-1] c := yyval[yyp-2] a = cons(c, a) yyval[yyp-1] = a yyval[yyp-2] = c }, /* 45 Inlines */ func(yytext string, _ int) { a := yyval[yyp-1] c := yyval[yyp-2] yy = p.mkList(LIST, a) yyval[yyp-1] = a yyval[yyp-2] = c }, /* 46 Space */ func(yytext string, _ int) { yy = p.mkString(" ") yy.key = SPACE }, /* 47 Str */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(p.mkString(yytext), a) yyval[yyp-1] = a }, /* 48 Str */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 49 Str */ func(yytext string, _ int) { a := yyval[yyp-1] if a.next == nil { yy = a } else { yy = p.mkList(LIST, a) } yyval[yyp-1] = a }, /* 50 StrChunk */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 51 AposChunk */ func(yytext string, _ int) { yy = p.mkElem(APOSTROPHE) }, /* 52 EscapedChar */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 53 Entity */ func(yytext string, _ int) { yy = p.mkString(yytext) yy.key = HTML }, /* 54 NormalEndline */ func(yytext string, _ int) { yy = p.mkString("\n") yy.key = SPACE }, /* 55 TerminalEndline */ func(yytext string, _ int) { yy = nil }, /* 56 LineBreak */ func(yytext string, _ int) { yy = p.mkElem(LINEBREAK) }, /* 57 Symbol */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 58 UlOrStarLine */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 59 EmphStar */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 60 EmphStar */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 61 EmphStar */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(EMPH, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 62 EmphUl */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 63 EmphUl */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 64 EmphUl */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(EMPH, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 65 StrongStar */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 66 StrongStar */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(STRONG, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 67 StrongUl */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 68 StrongUl */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(STRONG, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 69 TwoTildeClose */ func(yytext string, _ int) { a := yyval[yyp-1] yy = a yyval[yyp-1] = a }, /* 70 Strike */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 71 Strike */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(STRIKE, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 72 Image */ func(yytext string, _ int) { if yy.key == LINK { yy.key = IMAGE } else { result := yy yy.children = cons(p.mkString("!"), result.children) } }, /* 73 ReferenceLinkDouble */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] if match, found := p.findReference(b.children); found { yy = p.mkLink(a.children, match.url, match.title) a = nil b = nil } else { result := p.mkElem(LIST) result.children = cons(p.mkString("["), cons(a, cons(p.mkString("]"), cons(p.mkString(yytext), cons(p.mkString("["), cons(b, p.mkString("]"))))))) yy = result } yyval[yyp-1] = a yyval[yyp-2] = b }, /* 74 ReferenceLinkSingle */ func(yytext string, _ int) { a := yyval[yyp-1] if match, found := p.findReference(a.children); found { yy = p.mkLink(a.children, match.url, match.title) a = nil } else { result := p.mkElem(LIST) result.children = cons(p.mkString("["), cons(a, cons(p.mkString("]"), p.mkString(yytext)))) yy = result } yyval[yyp-1] = a }, /* 75 ExplicitLink */ func(yytext string, _ int) { l := yyval[yyp-1] s := yyval[yyp-2] t := yyval[yyp-3] yy = p.mkLink(l.children, s.contents.str, t.contents.str) s = nil t = nil l = nil yyval[yyp-1] = l yyval[yyp-2] = s yyval[yyp-3] = t }, /* 76 Source */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 77 Title */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 78 AutoLinkUrl */ func(yytext string, _ int) { yy = p.mkLink(p.mkString(yytext), yytext, "") }, /* 79 AutoLinkEmail */ func(yytext string, _ int) { yy = p.mkLink(p.mkString(yytext), "mailto:"+yytext, "") }, /* 80 Reference */ func(yytext string, _ int) { l := yyval[yyp-1] s := yyval[yyp-2] t := yyval[yyp-3] yy = p.mkLink(l.children, s.contents.str, t.contents.str) s = nil t = nil l = nil yy.key = REFERENCE yyval[yyp-1] = l yyval[yyp-2] = s yyval[yyp-3] = t }, /* 81 Label */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 82 Label */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(LIST, a) yyval[yyp-1] = a }, /* 83 RefSrc */ func(yytext string, _ int) { yy = p.mkString(yytext) yy.key = HTML }, /* 84 RefTitle */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 85 References */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 86 References */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] p.references = reverse(a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 87 Code */ func(yytext string, _ int) { yy = p.mkString(yytext) yy.key = CODE }, /* 88 RawHtml */ func(yytext string, _ int) { if p.extension.FilterHTML { yy = p.mkList(LIST, nil) } else { yy = p.mkString(yytext) yy.key = HTML } }, /* 89 StartList */ func(yytext string, _ int) { yy = nil }, /* 90 Line */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 91 Apostrophe */ func(yytext string, _ int) { yy = p.mkElem(APOSTROPHE) }, /* 92 Ellipsis */ func(yytext string, _ int) { yy = p.mkElem(ELLIPSIS) }, /* 93 EnDash */ func(yytext string, _ int) { yy = p.mkElem(ENDASH) }, /* 94 EmDash */ func(yytext string, _ int) { yy = p.mkElem(EMDASH) }, /* 95 SingleQuoted */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 96 SingleQuoted */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(SINGLEQUOTED, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 97 DoubleQuoted */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 98 DoubleQuoted */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] yy = p.mkList(DOUBLEQUOTED, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 99 NoteReference */ func(yytext string, _ int) { ref := yyval[yyp-1] if match, ok := p.find_note(ref.contents.str); ok { yy = p.mkElem(NOTE) yy.children = match.children yy.contents.str = "" } else { yy = p.mkString("[^" + ref.contents.str + "]") } yyval[yyp-1] = ref }, /* 100 RawNoteReference */ func(yytext string, _ int) { yy = p.mkString(yytext) }, /* 101 Note */ func(yytext string, _ int) { ref := yyval[yyp-1] a := yyval[yyp-2] a = cons(yy, a) yyval[yyp-1] = ref yyval[yyp-2] = a }, /* 102 Note */ func(yytext string, _ int) { ref := yyval[yyp-1] a := yyval[yyp-2] a = cons(yy, a) yyval[yyp-1] = ref yyval[yyp-2] = a }, /* 103 Note */ func(yytext string, _ int) { ref := yyval[yyp-1] a := yyval[yyp-2] yy = p.mkList(NOTE, a) yy.contents.str = ref.contents.str yyval[yyp-1] = ref yyval[yyp-2] = a }, /* 104 InlineNote */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 105 InlineNote */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(NOTE, a) yy.contents.str = "" yyval[yyp-1] = a }, /* 106 Notes */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] a = cons(b, a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 107 Notes */ func(yytext string, _ int) { a := yyval[yyp-1] b := yyval[yyp-2] p.notes = reverse(a) yyval[yyp-1] = a yyval[yyp-2] = b }, /* 108 RawNoteBlock */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 109 RawNoteBlock */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(p.mkString(yytext), a) yyval[yyp-1] = a }, /* 110 RawNoteBlock */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkStringFromList(a, true) yy.key = RAW yyval[yyp-1] = a }, /* 111 DefinitionList */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 112 DefinitionList */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(DEFINITIONLIST, a) yyval[yyp-1] = a }, /* 113 Definition */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 114 Definition */ func(yytext string, _ int) { a := yyval[yyp-1] for e := yy.children; e != nil; e = e.next { e.key = DEFDATA } a = cons(yy, a) yyval[yyp-1] = a }, /* 115 Definition */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(LIST, a) yyval[yyp-1] = a }, /* 116 DListTitle */ func(yytext string, _ int) { a := yyval[yyp-1] a = cons(yy, a) yyval[yyp-1] = a }, /* 117 DListTitle */ func(yytext string, _ int) { a := yyval[yyp-1] yy = p.mkList(LIST, a) yy.key = DEFTITLE yyval[yyp-1] = a }, /* yyPush */ func(_ string, count int) { yyp += count if yyp >= len(yyval) { s := make([]*element, cap(yyval)+256) copy(s, yyval) yyval = s } }, /* yyPop */ func(_ string, count int) { yyp -= count }, /* yySet */ func(_ string, count int) { yyval[yyp+count] = yy }, } const ( yyPush = 118 + iota yyPop yySet ) type thunk struct { action uint8 begin, end int } var thunkPosition, begin, end int thunks := make([]thunk, 32) doarg := func(action uint8, arg int) { if thunkPosition == len(thunks) { newThunks := make([]thunk, 2*len(thunks)) copy(newThunks, thunks) thunks = newThunks } t := &thunks[thunkPosition] thunkPosition++ t.action = action if arg != 0 { t.begin = arg // use begin to store an argument } else { t.begin = begin } t.end = end } do := func(action uint8) { doarg(action, 0) } p.ResetBuffer = func(s string) (old string) { if position < len(p.Buffer) { old = p.Buffer[position:] } p.Buffer = s thunkPosition = 0 position = 0 p.Min = 0 p.Max = 0 end = 0 return } p.commit = func(thunkPosition0 int) bool { if thunkPosition0 == 0 { s := "" for _, t := range thunks[:thunkPosition] { b := t.begin if b >= 0 && b <= t.end { s = p.Buffer[b:t.end] } magic := b actions[t.action](s, magic) } p.Min = position thunkPosition = 0 return true } return false } matchDot := func() bool { if position < len(p.Buffer) { position++ return true } else if position >= p.Max { p.Max = position } return false } matchChar := func(c byte) bool { if (position < len(p.Buffer)) && (p.Buffer[position] == c) { position++ return true } else if position >= p.Max { p.Max = position } return false } peekChar := func(c byte) bool { return position < len(p.Buffer) && p.Buffer[position] == c } matchString := func(s string) bool { length := len(s) next := position + length if (next <= len(p.Buffer)) && p.Buffer[position] == s[0] && (p.Buffer[position:next] == s) { position = next return true } else if position >= p.Max { p.Max = position } return false } classes := [...][32]uint8{ 3: {0, 0, 0, 0, 50, 232, 255, 3, 254, 255, 255, 135, 254, 255, 255, 71, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 1: {0, 0, 0, 0, 10, 111, 0, 80, 0, 0, 0, 184, 1, 0, 0, 56, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 0: {0, 0, 0, 0, 0, 0, 255, 3, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 4: {0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 7: {0, 0, 0, 0, 0, 0, 255, 3, 126, 0, 0, 0, 126, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 2: {0, 0, 0, 0, 0, 0, 0, 0, 254, 255, 255, 7, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 5: {0, 0, 0, 0, 0, 0, 255, 3, 254, 255, 255, 7, 254, 255, 255, 7, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 6: {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, } matchClass := func(class uint) bool { if (position < len(p.Buffer)) && ((classes[class][p.Buffer[position]>>3] & (1 << (p.Buffer[position] & 7))) != 0) { position++ return true } else if position >= p.Max { p.Max = position } return false } peekClass := func(class uint) bool { if (position < len(p.Buffer)) && ((classes[class][p.Buffer[position]>>3] & (1 << (p.Buffer[position] & 7))) != 0) { return true } return false } p.rules = [...]func() bool{ /* 0 Doc <- (StartList (Block { a = cons(yy, a) })* { p.tree = reverse(a) } commit) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) loop: { position1 := position if !p.rules[ruleBlock]() { goto out } do(0) goto loop out: position = position1 } do(1) if !(p.commit(thunkPosition0)) { goto ko } doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 1 Docblock <- (Block { p.tree = yy } commit) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition if !p.rules[ruleBlock]() { goto ko } do(2) if !(p.commit(thunkPosition0)) { goto ko } match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 2 Block <- (BlankLine* (BlockQuote / Verbatim / Note / Reference / HorizontalRule / Heading / DefinitionList / OrderedList / BulletList / HtmlBlock / StyleBlock / Para / Plain)) */ func() (match bool) { position0 := position loop: if !p.rules[ruleBlankLine]() { goto out } goto loop out: if !p.rules[ruleBlockQuote]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleVerbatim]() { goto nextAlt5 } goto ok nextAlt5: if !p.rules[ruleNote]() { goto nextAlt6 } goto ok nextAlt6: if !p.rules[ruleReference]() { goto nextAlt7 } goto ok nextAlt7: if !p.rules[ruleHorizontalRule]() { goto nextAlt8 } goto ok nextAlt8: if !p.rules[ruleHeading]() { goto nextAlt9 } goto ok nextAlt9: if !p.rules[ruleDefinitionList]() { goto nextAlt10 } goto ok nextAlt10: if !p.rules[ruleOrderedList]() { goto nextAlt11 } goto ok nextAlt11: if !p.rules[ruleBulletList]() { goto nextAlt12 } goto ok nextAlt12: if !p.rules[ruleHtmlBlock]() { goto nextAlt13 } goto ok nextAlt13: if !p.rules[ruleStyleBlock]() { goto nextAlt14 } goto ok nextAlt14: if !p.rules[rulePara]() { goto nextAlt15 } goto ok nextAlt15: if !p.rules[rulePlain]() { goto ko } ok: match = true return ko: position = position0 return }, /* 3 Para <- (NonindentSpace Inlines BlankLine+ { yy = a; yy.key = PARA }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleNonindentSpace]() { goto ko } if !p.rules[ruleInlines]() { goto ko } doarg(yySet, -1) if !p.rules[ruleBlankLine]() { goto ko } loop: if !p.rules[ruleBlankLine]() { goto out } goto loop out: do(3) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 4 Plain <- (Inlines { yy = a; yy.key = PLAIN }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleInlines]() { goto ko } doarg(yySet, -1) do(4) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 5 AtxInline <- (!Newline !(Sp '#'* Sp Newline) Inline) */ func() (match bool) { position0 := position if !p.rules[ruleNewline]() { goto ok } goto ko ok: { position1 := position if !p.rules[ruleSp]() { goto ok2 } loop: if !matchChar('#') { goto out } goto loop out: if !p.rules[ruleSp]() { goto ok2 } if !p.rules[ruleNewline]() { goto ok2 } goto ko ok2: position = position1 } if !p.rules[ruleInline]() { goto ko } match = true return ko: position = position0 return }, /* 6 AtxStart <- (&'#' < ('######' / '#####' / '####' / '###' / '##' / '#') > { yy = p.mkElem(H1 + (len(yytext) - 1)) }) */ func() (match bool) { position0 := position if !peekChar('#') { goto ko } begin = position if !matchString("######") { goto nextAlt } goto ok nextAlt: if !matchString("#####") { goto nextAlt3 } goto ok nextAlt3: if !matchString("####") { goto nextAlt4 } goto ok nextAlt4: if !matchString("###") { goto nextAlt5 } goto ok nextAlt5: if !matchString("##") { goto nextAlt6 } goto ok nextAlt6: if !matchChar('#') { goto ko } ok: end = position do(5) match = true return ko: position = position0 return }, /* 7 AtxHeading <- (AtxStart Sp StartList (AtxInline { a = cons(yy, a) })+ (Sp '#'* Sp)? Newline { yy = p.mkList(s.key, a) s = nil }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleAtxStart]() { goto ko } doarg(yySet, -1) if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -2) if !p.rules[ruleAtxInline]() { goto ko } do(6) loop: { position1 := position if !p.rules[ruleAtxInline]() { goto out } do(6) goto loop out: position = position1 } { position2 := position if !p.rules[ruleSp]() { goto ko3 } loop5: if !matchChar('#') { goto out6 } goto loop5 out6: if !p.rules[ruleSp]() { goto ko3 } goto ok ko3: position = position2 } ok: if !p.rules[ruleNewline]() { goto ko } do(7) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 8 SetextHeading <- (SetextHeading1 / SetextHeading2) */ func() (match bool) { if !p.rules[ruleSetextHeading1]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleSetextHeading2]() { return } ok: match = true return }, /* 9 SetextBottom1 <- ('='+ Newline) */ func() (match bool) { position0 := position if !matchChar('=') { goto ko } loop: if !matchChar('=') { goto out } goto loop out: if !p.rules[ruleNewline]() { goto ko } match = true return ko: position = position0 return }, /* 10 SetextBottom2 <- ('-'+ Newline) */ func() (match bool) { position0 := position if !matchChar('-') { goto ko } loop: if !matchChar('-') { goto out } goto loop out: if !p.rules[ruleNewline]() { goto ko } match = true return ko: position = position0 return }, /* 11 SetextHeading1 <- (&(RawLine SetextBottom1) StartList (!Endline Inline { a = cons(yy, a) })+ Sp Newline SetextBottom1 { yy = p.mkList(H1, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) { position1 := position if !p.rules[ruleRawLine]() { goto ko } if !p.rules[ruleSetextBottom1]() { goto ko } position = position1 } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleEndline]() { goto ok } goto ko ok: if !p.rules[ruleInline]() { goto ko } do(8) loop: { position2 := position if !p.rules[ruleEndline]() { goto ok5 } goto out ok5: if !p.rules[ruleInline]() { goto out } do(8) goto loop out: position = position2 } if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } if !p.rules[ruleSetextBottom1]() { goto ko } do(9) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 12 SetextHeading2 <- (&(RawLine SetextBottom2) StartList (!Endline Inline { a = cons(yy, a) })+ Sp Newline SetextBottom2 { yy = p.mkList(H2, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) { position1 := position if !p.rules[ruleRawLine]() { goto ko } if !p.rules[ruleSetextBottom2]() { goto ko } position = position1 } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleEndline]() { goto ok } goto ko ok: if !p.rules[ruleInline]() { goto ko } do(10) loop: { position2 := position if !p.rules[ruleEndline]() { goto ok5 } goto out ok5: if !p.rules[ruleInline]() { goto out } do(10) goto loop out: position = position2 } if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } if !p.rules[ruleSetextBottom2]() { goto ko } do(11) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 13 Heading <- (SetextHeading / AtxHeading) */ func() (match bool) { if !p.rules[ruleSetextHeading]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleAtxHeading]() { return } ok: match = true return }, /* 14 BlockQuote <- (BlockQuoteRaw { yy = p.mkElem(BLOCKQUOTE) yy.children = a }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleBlockQuoteRaw]() { goto ko } doarg(yySet, -1) do(12) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 15 BlockQuoteRaw <- (StartList ('>' ' '? Line { a = cons(yy, a) } (!'>' !BlankLine Line { a = cons(yy, a) })* (BlankLine { a = cons(p.mkString("\n"), a) })*)+ { yy = p.mkStringFromList(a, true) yy.key = RAW }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !matchChar('>') { goto ko } matchChar(' ') if !p.rules[ruleLine]() { goto ko } do(13) loop3: { position1, thunkPosition1 := position, thunkPosition if peekChar('>') { goto out4 } if !p.rules[ruleBlankLine]() { goto ok } goto out4 ok: if !p.rules[ruleLine]() { goto out4 } do(14) goto loop3 out4: position, thunkPosition = position1, thunkPosition1 } loop6: { position2 := position if !p.rules[ruleBlankLine]() { goto out7 } do(15) goto loop6 out7: position = position2 } loop: { position1, thunkPosition1 := position, thunkPosition if !matchChar('>') { goto out } matchChar(' ') if !p.rules[ruleLine]() { goto out } do(13) loop8: { position4, thunkPosition4 := position, thunkPosition if peekChar('>') { goto out9 } if !p.rules[ruleBlankLine]() { goto ok10 } goto out9 ok10: if !p.rules[ruleLine]() { goto out9 } do(14) goto loop8 out9: position, thunkPosition = position4, thunkPosition4 } loop11: { position5 := position if !p.rules[ruleBlankLine]() { goto out12 } do(15) goto loop11 out12: position = position5 } goto loop out: position, thunkPosition = position1, thunkPosition1 } do(16) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 16 NonblankIndentedLine <- (!BlankLine IndentedLine) */ func() (match bool) { position0 := position if !p.rules[ruleBlankLine]() { goto ok } goto ko ok: if !p.rules[ruleIndentedLine]() { goto ko } match = true return ko: position = position0 return }, /* 17 VerbatimChunk <- (StartList (BlankLine { a = cons(p.mkString("\n"), a) })* (NonblankIndentedLine { a = cons(yy, a) })+ { yy = p.mkStringFromList(a, false) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) loop: { position1 := position if !p.rules[ruleBlankLine]() { goto out } do(17) goto loop out: position = position1 } if !p.rules[ruleNonblankIndentedLine]() { goto ko } do(18) loop3: { position2 := position if !p.rules[ruleNonblankIndentedLine]() { goto out4 } do(18) goto loop3 out4: position = position2 } do(19) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 18 Verbatim <- (StartList (VerbatimChunk { a = cons(yy, a) })+ { yy = p.mkStringFromList(a, false) yy.key = VERBATIM }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleVerbatimChunk]() { goto ko } do(20) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleVerbatimChunk]() { goto out } do(20) goto loop out: position, thunkPosition = position1, thunkPosition1 } do(21) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 19 HorizontalRule <- (NonindentSpace ((&[_] ('_' Sp '_' Sp '_' (Sp '_')*)) | (&[\-] ('-' Sp '-' Sp '-' (Sp '-')*)) | (&[*] ('*' Sp '*' Sp '*' (Sp '*')*))) Sp Newline BlankLine+ { yy = p.mkElem(HRULE) }) */ func() (match bool) { position0 := position if !p.rules[ruleNonindentSpace]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '_': position++ // matchChar if !p.rules[ruleSp]() { goto ko } if !matchChar('_') { goto ko } if !p.rules[ruleSp]() { goto ko } if !matchChar('_') { goto ko } loop: { position1 := position if !p.rules[ruleSp]() { goto out } if !matchChar('_') { goto out } goto loop out: position = position1 } case '-': position++ // matchChar if !p.rules[ruleSp]() { goto ko } if !matchChar('-') { goto ko } if !p.rules[ruleSp]() { goto ko } if !matchChar('-') { goto ko } loop4: { position2 := position if !p.rules[ruleSp]() { goto out5 } if !matchChar('-') { goto out5 } goto loop4 out5: position = position2 } case '*': position++ // matchChar if !p.rules[ruleSp]() { goto ko } if !matchChar('*') { goto ko } if !p.rules[ruleSp]() { goto ko } if !matchChar('*') { goto ko } loop6: { position3 := position if !p.rules[ruleSp]() { goto out7 } if !matchChar('*') { goto out7 } goto loop6 out7: position = position3 } default: goto ko } } if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } if !p.rules[ruleBlankLine]() { goto ko } loop8: if !p.rules[ruleBlankLine]() { goto out9 } goto loop8 out9: do(22) match = true return ko: position = position0 return }, /* 20 Bullet <- (!HorizontalRule NonindentSpace ((&[\-] '-') | (&[*] '*') | (&[+] '+')) Spacechar+) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition if !p.rules[ruleHorizontalRule]() { goto ok } goto ko ok: if !p.rules[ruleNonindentSpace]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '-': position++ // matchChar case '*': position++ // matchChar case '+': position++ // matchChar default: goto ko } } if !p.rules[ruleSpacechar]() { goto ko } loop: if !p.rules[ruleSpacechar]() { goto out } goto loop out: match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 21 BulletList <- (&Bullet (ListTight / ListLoose) { yy.key = BULLETLIST }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition { position1 := position if !p.rules[ruleBullet]() { goto ko } position = position1 } if !p.rules[ruleListTight]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleListLoose]() { goto ko } ok: do(23) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 22 ListTight <- (StartList (ListItemTight { a = cons(yy, a) })+ BlankLine* !((&[:~] DefMarker) | (&[*+\-] Bullet) | (&[0-9] Enumerator)) { yy = p.mkList(LIST, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleListItemTight]() { goto ko } do(24) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleListItemTight]() { goto out } do(24) goto loop out: position, thunkPosition = position1, thunkPosition1 } loop3: if !p.rules[ruleBlankLine]() { goto out4 } goto loop3 out4: { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case ':', '~': if !p.rules[ruleDefMarker]() { goto ok } case '*', '+', '-': if !p.rules[ruleBullet]() { goto ok } default: if !p.rules[ruleEnumerator]() { goto ok } } } goto ko ok: do(25) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 23 ListLoose <- (StartList (ListItem BlankLine* { li := b.children li.contents.str += "\n\n" a = cons(b, a) })+ { yy = p.mkList(LIST, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleListItem]() { goto ko } doarg(yySet, -2) loop3: if !p.rules[ruleBlankLine]() { goto out4 } goto loop3 out4: do(26) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleListItem]() { goto out } doarg(yySet, -2) loop5: if !p.rules[ruleBlankLine]() { goto out6 } goto loop5 out6: do(26) goto loop out: position, thunkPosition = position1, thunkPosition1 } do(27) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 24 ListItem <- (((&[:~] DefMarker) | (&[*+\-] Bullet) | (&[0-9] Enumerator)) StartList ListBlock { a = cons(yy, a) } (ListContinuationBlock { a = cons(yy, a) })* { raw := p.mkStringFromList(a, false) raw.key = RAW yy = p.mkElem(LISTITEM) yy.children = raw }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case ':', '~': if !p.rules[ruleDefMarker]() { goto ko } case '*', '+', '-': if !p.rules[ruleBullet]() { goto ko } default: if !p.rules[ruleEnumerator]() { goto ko } } } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleListBlock]() { goto ko } do(28) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleListContinuationBlock]() { goto out } do(29) goto loop out: position, thunkPosition = position1, thunkPosition1 } do(30) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 25 ListItemTight <- (((&[:~] DefMarker) | (&[*+\-] Bullet) | (&[0-9] Enumerator)) StartList ListBlock { a = cons(yy, a) } (!BlankLine ListContinuationBlock { a = cons(yy, a) })* !ListContinuationBlock { raw := p.mkStringFromList(a, false) raw.key = RAW yy = p.mkElem(LISTITEM) yy.children = raw }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case ':', '~': if !p.rules[ruleDefMarker]() { goto ko } case '*', '+', '-': if !p.rules[ruleBullet]() { goto ko } default: if !p.rules[ruleEnumerator]() { goto ko } } } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleListBlock]() { goto ko } do(31) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleBlankLine]() { goto ok4 } goto out ok4: if !p.rules[ruleListContinuationBlock]() { goto out } do(32) goto loop out: position, thunkPosition = position1, thunkPosition1 } if !p.rules[ruleListContinuationBlock]() { goto ok5 } goto ko ok5: do(33) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 26 ListBlock <- (StartList !BlankLine Line { a = cons(yy, a) } (ListBlockLine { a = cons(yy, a) })* { yy = p.mkStringFromList(a, false) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleBlankLine]() { goto ok } goto ko ok: if !p.rules[ruleLine]() { goto ko } do(34) loop: { position1 := position if !p.rules[ruleListBlockLine]() { goto out } do(35) goto loop out: position = position1 } do(36) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 27 ListContinuationBlock <- (StartList (< BlankLine* > { if len(yytext) == 0 { a = cons(p.mkString("\001"), a) // block separator } else { a = cons(p.mkString(yytext), a) } }) (Indent ListBlock { a = cons(yy, a) })+ { yy = p.mkStringFromList(a, false) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) begin = position loop: if !p.rules[ruleBlankLine]() { goto out } goto loop out: end = position do(37) if !p.rules[ruleIndent]() { goto ko } if !p.rules[ruleListBlock]() { goto ko } do(38) loop3: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleIndent]() { goto out4 } if !p.rules[ruleListBlock]() { goto out4 } do(38) goto loop3 out4: position, thunkPosition = position1, thunkPosition1 } do(39) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 28 Enumerator <- (NonindentSpace [0-9]+ '.' Spacechar+) */ func() (match bool) { position0 := position if !p.rules[ruleNonindentSpace]() { goto ko } if !matchClass(0) { goto ko } loop: if !matchClass(0) { goto out } goto loop out: if !matchChar('.') { goto ko } if !p.rules[ruleSpacechar]() { goto ko } loop3: if !p.rules[ruleSpacechar]() { goto out4 } goto loop3 out4: match = true return ko: position = position0 return }, /* 29 OrderedList <- (&Enumerator (ListTight / ListLoose) { yy.key = ORDEREDLIST }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition { position1 := position if !p.rules[ruleEnumerator]() { goto ko } position = position1 } if !p.rules[ruleListTight]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleListLoose]() { goto ko } ok: do(40) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 30 ListBlockLine <- (!BlankLine !((&[:~] DefMarker) | (&[\t *+\-0-9] (Indent? ((&[*+\-] Bullet) | (&[0-9] Enumerator))))) !HorizontalRule OptionallyIndentedLine) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition if !p.rules[ruleBlankLine]() { goto ok } goto ko ok: { position1 := position { if position == len(p.Buffer) { goto ok2 } switch p.Buffer[position] { case ':', '~': if !p.rules[ruleDefMarker]() { goto ok2 } default: if !p.rules[ruleIndent]() { goto ko4 } ko4: { if position == len(p.Buffer) { goto ok2 } switch p.Buffer[position] { case '*', '+', '-': if !p.rules[ruleBullet]() { goto ok2 } default: if !p.rules[ruleEnumerator]() { goto ok2 } } } } } goto ko ok2: position = position1 } if !p.rules[ruleHorizontalRule]() { goto ok7 } goto ko ok7: if !p.rules[ruleOptionallyIndentedLine]() { goto ko } match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 31 HtmlBlockOpenAddress <- ('<' Spnl ((&[A] 'ADDRESS') | (&[a] 'address')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'A': position++ if !matchString("DDRESS") { goto ko } case 'a': position++ if !matchString("ddress") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 32 HtmlBlockCloseAddress <- ('<' Spnl '/' ((&[A] 'ADDRESS') | (&[a] 'address')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'A': position++ if !matchString("DDRESS") { goto ko } case 'a': position++ if !matchString("ddress") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 33 HtmlBlockAddress <- (HtmlBlockOpenAddress (HtmlBlockAddress / (!HtmlBlockCloseAddress .))* HtmlBlockCloseAddress) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenAddress]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockAddress]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseAddress]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseAddress]() { goto ko } match = true return ko: position = position0 return }, /* 34 HtmlBlockOpenBlockquote <- ('<' Spnl ((&[B] 'BLOCKQUOTE') | (&[b] 'blockquote')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'B': position++ if !matchString("LOCKQUOTE") { goto ko } case 'b': position++ if !matchString("lockquote") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 35 HtmlBlockCloseBlockquote <- ('<' Spnl '/' ((&[B] 'BLOCKQUOTE') | (&[b] 'blockquote')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'B': position++ if !matchString("LOCKQUOTE") { goto ko } case 'b': position++ if !matchString("lockquote") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 36 HtmlBlockBlockquote <- (HtmlBlockOpenBlockquote (HtmlBlockBlockquote / (!HtmlBlockCloseBlockquote .))* HtmlBlockCloseBlockquote) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenBlockquote]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockBlockquote]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseBlockquote]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseBlockquote]() { goto ko } match = true return ko: position = position0 return }, /* 37 HtmlBlockOpenCenter <- ('<' Spnl ((&[C] 'CENTER') | (&[c] 'center')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'C': position++ if !matchString("ENTER") { goto ko } case 'c': position++ if !matchString("enter") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 38 HtmlBlockCloseCenter <- ('<' Spnl '/' ((&[C] 'CENTER') | (&[c] 'center')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'C': position++ if !matchString("ENTER") { goto ko } case 'c': position++ if !matchString("enter") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 39 HtmlBlockCenter <- (HtmlBlockOpenCenter (HtmlBlockCenter / (!HtmlBlockCloseCenter .))* HtmlBlockCloseCenter) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenCenter]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockCenter]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseCenter]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseCenter]() { goto ko } match = true return ko: position = position0 return }, /* 40 HtmlBlockOpenDir <- ('<' Spnl ((&[D] 'DIR') | (&[d] 'dir')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ if !matchString("IR") { goto ko } case 'd': position++ if !matchString("ir") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 41 HtmlBlockCloseDir <- ('<' Spnl '/' ((&[D] 'DIR') | (&[d] 'dir')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ if !matchString("IR") { goto ko } case 'd': position++ if !matchString("ir") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 42 HtmlBlockDir <- (HtmlBlockOpenDir (HtmlBlockDir / (!HtmlBlockCloseDir .))* HtmlBlockCloseDir) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenDir]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockDir]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseDir]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseDir]() { goto ko } match = true return ko: position = position0 return }, /* 43 HtmlBlockOpenDiv <- ('<' Spnl ((&[D] 'DIV') | (&[d] 'div')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ if !matchString("IV") { goto ko } case 'd': position++ if !matchString("iv") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 44 HtmlBlockCloseDiv <- ('<' Spnl '/' ((&[D] 'DIV') | (&[d] 'div')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ if !matchString("IV") { goto ko } case 'd': position++ if !matchString("iv") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 45 HtmlBlockDiv <- (HtmlBlockOpenDiv (HtmlBlockDiv / (!HtmlBlockCloseDiv .))* HtmlBlockCloseDiv) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenDiv]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockDiv]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseDiv]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseDiv]() { goto ko } match = true return ko: position = position0 return }, /* 46 HtmlBlockOpenDl <- ('<' Spnl ((&[D] 'DL') | (&[d] 'dl')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ // matchString(`DL`) if !matchChar('L') { goto ko } case 'd': position++ // matchString(`dl`) if !matchChar('l') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 47 HtmlBlockCloseDl <- ('<' Spnl '/' ((&[D] 'DL') | (&[d] 'dl')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ // matchString(`DL`) if !matchChar('L') { goto ko } case 'd': position++ // matchString(`dl`) if !matchChar('l') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 48 HtmlBlockDl <- (HtmlBlockOpenDl (HtmlBlockDl / (!HtmlBlockCloseDl .))* HtmlBlockCloseDl) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenDl]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockDl]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseDl]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseDl]() { goto ko } match = true return ko: position = position0 return }, /* 49 HtmlBlockOpenFieldset <- ('<' Spnl ((&[F] 'FIELDSET') | (&[f] 'fieldset')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'F': position++ if !matchString("IELDSET") { goto ko } case 'f': position++ if !matchString("ieldset") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 50 HtmlBlockCloseFieldset <- ('<' Spnl '/' ((&[F] 'FIELDSET') | (&[f] 'fieldset')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'F': position++ if !matchString("IELDSET") { goto ko } case 'f': position++ if !matchString("ieldset") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 51 HtmlBlockFieldset <- (HtmlBlockOpenFieldset (HtmlBlockFieldset / (!HtmlBlockCloseFieldset .))* HtmlBlockCloseFieldset) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenFieldset]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockFieldset]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseFieldset]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseFieldset]() { goto ko } match = true return ko: position = position0 return }, /* 52 HtmlBlockOpenForm <- ('<' Spnl ((&[F] 'FORM') | (&[f] 'form')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'F': position++ if !matchString("ORM") { goto ko } case 'f': position++ if !matchString("orm") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 53 HtmlBlockCloseForm <- ('<' Spnl '/' ((&[F] 'FORM') | (&[f] 'form')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'F': position++ if !matchString("ORM") { goto ko } case 'f': position++ if !matchString("orm") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 54 HtmlBlockForm <- (HtmlBlockOpenForm (HtmlBlockForm / (!HtmlBlockCloseForm .))* HtmlBlockCloseForm) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenForm]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockForm]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseForm]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseForm]() { goto ko } match = true return ko: position = position0 return }, /* 55 HtmlBlockOpenH1 <- ('<' Spnl ((&[H] 'H1') | (&[h] 'h1')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H1`) if !matchChar('1') { goto ko } case 'h': position++ // matchString(`h1`) if !matchChar('1') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 56 HtmlBlockCloseH1 <- ('<' Spnl '/' ((&[H] 'H1') | (&[h] 'h1')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H1`) if !matchChar('1') { goto ko } case 'h': position++ // matchString(`h1`) if !matchChar('1') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 57 HtmlBlockH1 <- (HtmlBlockOpenH1 (HtmlBlockH1 / (!HtmlBlockCloseH1 .))* HtmlBlockCloseH1) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenH1]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockH1]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseH1]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseH1]() { goto ko } match = true return ko: position = position0 return }, /* 58 HtmlBlockOpenH2 <- ('<' Spnl ((&[H] 'H2') | (&[h] 'h2')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H2`) if !matchChar('2') { goto ko } case 'h': position++ // matchString(`h2`) if !matchChar('2') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 59 HtmlBlockCloseH2 <- ('<' Spnl '/' ((&[H] 'H2') | (&[h] 'h2')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H2`) if !matchChar('2') { goto ko } case 'h': position++ // matchString(`h2`) if !matchChar('2') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 60 HtmlBlockH2 <- (HtmlBlockOpenH2 (HtmlBlockH2 / (!HtmlBlockCloseH2 .))* HtmlBlockCloseH2) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenH2]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockH2]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseH2]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseH2]() { goto ko } match = true return ko: position = position0 return }, /* 61 HtmlBlockOpenH3 <- ('<' Spnl ((&[H] 'H3') | (&[h] 'h3')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H3`) if !matchChar('3') { goto ko } case 'h': position++ // matchString(`h3`) if !matchChar('3') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 62 HtmlBlockCloseH3 <- ('<' Spnl '/' ((&[H] 'H3') | (&[h] 'h3')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H3`) if !matchChar('3') { goto ko } case 'h': position++ // matchString(`h3`) if !matchChar('3') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 63 HtmlBlockH3 <- (HtmlBlockOpenH3 (HtmlBlockH3 / (!HtmlBlockCloseH3 .))* HtmlBlockCloseH3) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenH3]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockH3]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseH3]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseH3]() { goto ko } match = true return ko: position = position0 return }, /* 64 HtmlBlockOpenH4 <- ('<' Spnl ((&[H] 'H4') | (&[h] 'h4')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H4`) if !matchChar('4') { goto ko } case 'h': position++ // matchString(`h4`) if !matchChar('4') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 65 HtmlBlockCloseH4 <- ('<' Spnl '/' ((&[H] 'H4') | (&[h] 'h4')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H4`) if !matchChar('4') { goto ko } case 'h': position++ // matchString(`h4`) if !matchChar('4') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 66 HtmlBlockH4 <- (HtmlBlockOpenH4 (HtmlBlockH4 / (!HtmlBlockCloseH4 .))* HtmlBlockCloseH4) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenH4]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockH4]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseH4]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseH4]() { goto ko } match = true return ko: position = position0 return }, /* 67 HtmlBlockOpenH5 <- ('<' Spnl ((&[H] 'H5') | (&[h] 'h5')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H5`) if !matchChar('5') { goto ko } case 'h': position++ // matchString(`h5`) if !matchChar('5') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 68 HtmlBlockCloseH5 <- ('<' Spnl '/' ((&[H] 'H5') | (&[h] 'h5')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H5`) if !matchChar('5') { goto ko } case 'h': position++ // matchString(`h5`) if !matchChar('5') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 69 HtmlBlockH5 <- (HtmlBlockOpenH5 (HtmlBlockH5 / (!HtmlBlockCloseH5 .))* HtmlBlockCloseH5) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenH5]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockH5]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseH5]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseH5]() { goto ko } match = true return ko: position = position0 return }, /* 70 HtmlBlockOpenH6 <- ('<' Spnl ((&[H] 'H6') | (&[h] 'h6')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H6`) if !matchChar('6') { goto ko } case 'h': position++ // matchString(`h6`) if !matchChar('6') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 71 HtmlBlockCloseH6 <- ('<' Spnl '/' ((&[H] 'H6') | (&[h] 'h6')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ // matchString(`H6`) if !matchChar('6') { goto ko } case 'h': position++ // matchString(`h6`) if !matchChar('6') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 72 HtmlBlockH6 <- (HtmlBlockOpenH6 (HtmlBlockH6 / (!HtmlBlockCloseH6 .))* HtmlBlockCloseH6) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenH6]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockH6]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseH6]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseH6]() { goto ko } match = true return ko: position = position0 return }, /* 73 HtmlBlockOpenMenu <- ('<' Spnl ((&[M] 'MENU') | (&[m] 'menu')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'M': position++ if !matchString("ENU") { goto ko } case 'm': position++ if !matchString("enu") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 74 HtmlBlockCloseMenu <- ('<' Spnl '/' ((&[M] 'MENU') | (&[m] 'menu')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'M': position++ if !matchString("ENU") { goto ko } case 'm': position++ if !matchString("enu") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 75 HtmlBlockMenu <- (HtmlBlockOpenMenu (HtmlBlockMenu / (!HtmlBlockCloseMenu .))* HtmlBlockCloseMenu) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenMenu]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockMenu]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseMenu]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseMenu]() { goto ko } match = true return ko: position = position0 return }, /* 76 HtmlBlockOpenNoframes <- ('<' Spnl ((&[N] 'NOFRAMES') | (&[n] 'noframes')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'N': position++ if !matchString("OFRAMES") { goto ko } case 'n': position++ if !matchString("oframes") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 77 HtmlBlockCloseNoframes <- ('<' Spnl '/' ((&[N] 'NOFRAMES') | (&[n] 'noframes')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'N': position++ if !matchString("OFRAMES") { goto ko } case 'n': position++ if !matchString("oframes") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 78 HtmlBlockNoframes <- (HtmlBlockOpenNoframes (HtmlBlockNoframes / (!HtmlBlockCloseNoframes .))* HtmlBlockCloseNoframes) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenNoframes]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockNoframes]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseNoframes]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseNoframes]() { goto ko } match = true return ko: position = position0 return }, /* 79 HtmlBlockOpenNoscript <- ('<' Spnl ((&[N] 'NOSCRIPT') | (&[n] 'noscript')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'N': position++ if !matchString("OSCRIPT") { goto ko } case 'n': position++ if !matchString("oscript") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 80 HtmlBlockCloseNoscript <- ('<' Spnl '/' ((&[N] 'NOSCRIPT') | (&[n] 'noscript')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'N': position++ if !matchString("OSCRIPT") { goto ko } case 'n': position++ if !matchString("oscript") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 81 HtmlBlockNoscript <- (HtmlBlockOpenNoscript (HtmlBlockNoscript / (!HtmlBlockCloseNoscript .))* HtmlBlockCloseNoscript) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenNoscript]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockNoscript]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseNoscript]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseNoscript]() { goto ko } match = true return ko: position = position0 return }, /* 82 HtmlBlockOpenOl <- ('<' Spnl ((&[O] 'OL') | (&[o] 'ol')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'O': position++ // matchString(`OL`) if !matchChar('L') { goto ko } case 'o': position++ // matchString(`ol`) if !matchChar('l') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 83 HtmlBlockCloseOl <- ('<' Spnl '/' ((&[O] 'OL') | (&[o] 'ol')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'O': position++ // matchString(`OL`) if !matchChar('L') { goto ko } case 'o': position++ // matchString(`ol`) if !matchChar('l') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 84 HtmlBlockOl <- (HtmlBlockOpenOl (HtmlBlockOl / (!HtmlBlockCloseOl .))* HtmlBlockCloseOl) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenOl]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockOl]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseOl]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseOl]() { goto ko } match = true return ko: position = position0 return }, /* 85 HtmlBlockOpenP <- ('<' Spnl ((&[P] 'P') | (&[p] 'p')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'P': position++ // matchChar case 'p': position++ // matchChar default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 86 HtmlBlockCloseP <- ('<' Spnl '/' ((&[P] 'P') | (&[p] 'p')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'P': position++ // matchChar case 'p': position++ // matchChar default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 87 HtmlBlockP <- (HtmlBlockOpenP (HtmlBlockP / (!HtmlBlockCloseP .))* HtmlBlockCloseP) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenP]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockP]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseP]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseP]() { goto ko } match = true return ko: position = position0 return }, /* 88 HtmlBlockOpenPre <- ('<' Spnl ((&[P] 'PRE') | (&[p] 'pre')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'P': position++ if !matchString("RE") { goto ko } case 'p': position++ if !matchString("re") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 89 HtmlBlockClosePre <- ('<' Spnl '/' ((&[P] 'PRE') | (&[p] 'pre')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'P': position++ if !matchString("RE") { goto ko } case 'p': position++ if !matchString("re") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 90 HtmlBlockPre <- (HtmlBlockOpenPre (HtmlBlockPre / (!HtmlBlockClosePre .))* HtmlBlockClosePre) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenPre]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockPre]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockClosePre]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockClosePre]() { goto ko } match = true return ko: position = position0 return }, /* 91 HtmlBlockOpenTable <- ('<' Spnl ((&[T] 'TABLE') | (&[t] 'table')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("ABLE") { goto ko } case 't': position++ if !matchString("able") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 92 HtmlBlockCloseTable <- ('<' Spnl '/' ((&[T] 'TABLE') | (&[t] 'table')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("ABLE") { goto ko } case 't': position++ if !matchString("able") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 93 HtmlBlockTable <- (HtmlBlockOpenTable (HtmlBlockTable / (!HtmlBlockCloseTable .))* HtmlBlockCloseTable) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenTable]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockTable]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseTable]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseTable]() { goto ko } match = true return ko: position = position0 return }, /* 94 HtmlBlockOpenUl <- ('<' Spnl ((&[U] 'UL') | (&[u] 'ul')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'U': position++ // matchString(`UL`) if !matchChar('L') { goto ko } case 'u': position++ // matchString(`ul`) if !matchChar('l') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 95 HtmlBlockCloseUl <- ('<' Spnl '/' ((&[U] 'UL') | (&[u] 'ul')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'U': position++ // matchString(`UL`) if !matchChar('L') { goto ko } case 'u': position++ // matchString(`ul`) if !matchChar('l') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 96 HtmlBlockUl <- (HtmlBlockOpenUl (HtmlBlockUl / (!HtmlBlockCloseUl .))* HtmlBlockCloseUl) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenUl]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockUl]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseUl]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseUl]() { goto ko } match = true return ko: position = position0 return }, /* 97 HtmlBlockOpenDd <- ('<' Spnl ((&[D] 'DD') | (&[d] 'dd')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ // matchString(`DD`) if !matchChar('D') { goto ko } case 'd': position++ // matchString(`dd`) if !matchChar('d') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 98 HtmlBlockCloseDd <- ('<' Spnl '/' ((&[D] 'DD') | (&[d] 'dd')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ // matchString(`DD`) if !matchChar('D') { goto ko } case 'd': position++ // matchString(`dd`) if !matchChar('d') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 99 HtmlBlockDd <- (HtmlBlockOpenDd (HtmlBlockDd / (!HtmlBlockCloseDd .))* HtmlBlockCloseDd) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenDd]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockDd]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseDd]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseDd]() { goto ko } match = true return ko: position = position0 return }, /* 100 HtmlBlockOpenDt <- ('<' Spnl ((&[D] 'DT') | (&[d] 'dt')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ // matchString(`DT`) if !matchChar('T') { goto ko } case 'd': position++ // matchString(`dt`) if !matchChar('t') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 101 HtmlBlockCloseDt <- ('<' Spnl '/' ((&[D] 'DT') | (&[d] 'dt')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'D': position++ // matchString(`DT`) if !matchChar('T') { goto ko } case 'd': position++ // matchString(`dt`) if !matchChar('t') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 102 HtmlBlockDt <- (HtmlBlockOpenDt (HtmlBlockDt / (!HtmlBlockCloseDt .))* HtmlBlockCloseDt) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenDt]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockDt]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseDt]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseDt]() { goto ko } match = true return ko: position = position0 return }, /* 103 HtmlBlockOpenFrameset <- ('<' Spnl ((&[F] 'FRAMESET') | (&[f] 'frameset')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'F': position++ if !matchString("RAMESET") { goto ko } case 'f': position++ if !matchString("rameset") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 104 HtmlBlockCloseFrameset <- ('<' Spnl '/' ((&[F] 'FRAMESET') | (&[f] 'frameset')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'F': position++ if !matchString("RAMESET") { goto ko } case 'f': position++ if !matchString("rameset") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 105 HtmlBlockFrameset <- (HtmlBlockOpenFrameset (HtmlBlockFrameset / (!HtmlBlockCloseFrameset .))* HtmlBlockCloseFrameset) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenFrameset]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockFrameset]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseFrameset]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseFrameset]() { goto ko } match = true return ko: position = position0 return }, /* 106 HtmlBlockOpenLi <- ('<' Spnl ((&[L] 'LI') | (&[l] 'li')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'L': position++ // matchString(`LI`) if !matchChar('I') { goto ko } case 'l': position++ // matchString(`li`) if !matchChar('i') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 107 HtmlBlockCloseLi <- ('<' Spnl '/' ((&[L] 'LI') | (&[l] 'li')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'L': position++ // matchString(`LI`) if !matchChar('I') { goto ko } case 'l': position++ // matchString(`li`) if !matchChar('i') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 108 HtmlBlockLi <- (HtmlBlockOpenLi (HtmlBlockLi / (!HtmlBlockCloseLi .))* HtmlBlockCloseLi) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenLi]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockLi]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseLi]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseLi]() { goto ko } match = true return ko: position = position0 return }, /* 109 HtmlBlockOpenTbody <- ('<' Spnl ((&[T] 'TBODY') | (&[t] 'tbody')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("BODY") { goto ko } case 't': position++ if !matchString("body") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 110 HtmlBlockCloseTbody <- ('<' Spnl '/' ((&[T] 'TBODY') | (&[t] 'tbody')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("BODY") { goto ko } case 't': position++ if !matchString("body") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 111 HtmlBlockTbody <- (HtmlBlockOpenTbody (HtmlBlockTbody / (!HtmlBlockCloseTbody .))* HtmlBlockCloseTbody) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenTbody]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockTbody]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseTbody]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseTbody]() { goto ko } match = true return ko: position = position0 return }, /* 112 HtmlBlockOpenTd <- ('<' Spnl ((&[T] 'TD') | (&[t] 'td')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ // matchString(`TD`) if !matchChar('D') { goto ko } case 't': position++ // matchString(`td`) if !matchChar('d') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 113 HtmlBlockCloseTd <- ('<' Spnl '/' ((&[T] 'TD') | (&[t] 'td')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ // matchString(`TD`) if !matchChar('D') { goto ko } case 't': position++ // matchString(`td`) if !matchChar('d') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 114 HtmlBlockTd <- (HtmlBlockOpenTd (HtmlBlockTd / (!HtmlBlockCloseTd .))* HtmlBlockCloseTd) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenTd]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockTd]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseTd]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseTd]() { goto ko } match = true return ko: position = position0 return }, /* 115 HtmlBlockOpenTfoot <- ('<' Spnl ((&[T] 'TFOOT') | (&[t] 'tfoot')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("FOOT") { goto ko } case 't': position++ if !matchString("foot") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 116 HtmlBlockCloseTfoot <- ('<' Spnl '/' ((&[T] 'TFOOT') | (&[t] 'tfoot')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("FOOT") { goto ko } case 't': position++ if !matchString("foot") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 117 HtmlBlockTfoot <- (HtmlBlockOpenTfoot (HtmlBlockTfoot / (!HtmlBlockCloseTfoot .))* HtmlBlockCloseTfoot) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenTfoot]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockTfoot]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseTfoot]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseTfoot]() { goto ko } match = true return ko: position = position0 return }, /* 118 HtmlBlockOpenTh <- ('<' Spnl ((&[T] 'TH') | (&[t] 'th')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ // matchString(`TH`) if !matchChar('H') { goto ko } case 't': position++ // matchString(`th`) if !matchChar('h') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 119 HtmlBlockCloseTh <- ('<' Spnl '/' ((&[T] 'TH') | (&[t] 'th')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ // matchString(`TH`) if !matchChar('H') { goto ko } case 't': position++ // matchString(`th`) if !matchChar('h') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 120 HtmlBlockTh <- (HtmlBlockOpenTh (HtmlBlockTh / (!HtmlBlockCloseTh .))* HtmlBlockCloseTh) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenTh]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockTh]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseTh]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseTh]() { goto ko } match = true return ko: position = position0 return }, /* 121 HtmlBlockOpenThead <- ('<' Spnl ((&[T] 'THEAD') | (&[t] 'thead')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("HEAD") { goto ko } case 't': position++ if !matchString("head") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 122 HtmlBlockCloseThead <- ('<' Spnl '/' ((&[T] 'THEAD') | (&[t] 'thead')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ if !matchString("HEAD") { goto ko } case 't': position++ if !matchString("head") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 123 HtmlBlockThead <- (HtmlBlockOpenThead (HtmlBlockThead / (!HtmlBlockCloseThead .))* HtmlBlockCloseThead) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenThead]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockThead]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseThead]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseThead]() { goto ko } match = true return ko: position = position0 return }, /* 124 HtmlBlockOpenTr <- ('<' Spnl ((&[T] 'TR') | (&[t] 'tr')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ // matchString(`TR`) if !matchChar('R') { goto ko } case 't': position++ // matchString(`tr`) if !matchChar('r') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 125 HtmlBlockCloseTr <- ('<' Spnl '/' ((&[T] 'TR') | (&[t] 'tr')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'T': position++ // matchString(`TR`) if !matchChar('R') { goto ko } case 't': position++ // matchString(`tr`) if !matchChar('r') { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 126 HtmlBlockTr <- (HtmlBlockOpenTr (HtmlBlockTr / (!HtmlBlockCloseTr .))* HtmlBlockCloseTr) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenTr]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockTr]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockCloseTr]() { goto ok5 } goto out ok5: if !matchDot() { goto out } ok: goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseTr]() { goto ko } match = true return ko: position = position0 return }, /* 127 HtmlBlockOpenScript <- ('<' Spnl ((&[S] 'SCRIPT') | (&[s] 'script')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'S': position++ if !matchString("CRIPT") { goto ko } case 's': position++ if !matchString("cript") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 128 HtmlBlockCloseScript <- ('<' Spnl '/' ((&[S] 'SCRIPT') | (&[s] 'script')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'S': position++ if !matchString("CRIPT") { goto ko } case 's': position++ if !matchString("cript") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 129 HtmlBlockScript <- (HtmlBlockOpenScript (!HtmlBlockCloseScript .)* HtmlBlockCloseScript) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenScript]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockCloseScript]() { goto ok } goto out ok: if !matchDot() { goto out } goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseScript]() { goto ko } match = true return ko: position = position0 return }, /* 130 HtmlBlockOpenHead <- ('<' Spnl ((&[H] 'HEAD') | (&[h] 'head')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ if !matchString("EAD") { goto ko } case 'h': position++ if !matchString("ead") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 131 HtmlBlockCloseHead <- ('<' Spnl '/' ((&[H] 'HEAD') | (&[h] 'head')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'H': position++ if !matchString("EAD") { goto ko } case 'h': position++ if !matchString("ead") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 132 HtmlBlockHead <- (HtmlBlockOpenHead (!HtmlBlockCloseHead .)* HtmlBlockCloseHead) */ func() (match bool) { position0 := position if !p.rules[ruleHtmlBlockOpenHead]() { goto ko } loop: { position1 := position if !p.rules[ruleHtmlBlockCloseHead]() { goto ok } goto out ok: if !matchDot() { goto out } goto loop out: position = position1 } if !p.rules[ruleHtmlBlockCloseHead]() { goto ko } match = true return ko: position = position0 return }, /* 133 HtmlBlockInTags <- (HtmlBlockAddress / HtmlBlockBlockquote / HtmlBlockCenter / HtmlBlockDir / HtmlBlockDiv / HtmlBlockDl / HtmlBlockFieldset / HtmlBlockForm / HtmlBlockH1 / HtmlBlockH2 / HtmlBlockH3 / HtmlBlockH4 / HtmlBlockH5 / HtmlBlockH6 / HtmlBlockMenu / HtmlBlockNoframes / HtmlBlockNoscript / HtmlBlockOl / HtmlBlockP / HtmlBlockPre / HtmlBlockTable / HtmlBlockUl / HtmlBlockDd / HtmlBlockDt / HtmlBlockFrameset / HtmlBlockLi / HtmlBlockTbody / HtmlBlockTd / HtmlBlockTfoot / HtmlBlockTh / HtmlBlockThead / HtmlBlockTr / HtmlBlockScript / HtmlBlockHead) */ func() (match bool) { if !p.rules[ruleHtmlBlockAddress]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockBlockquote]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleHtmlBlockCenter]() { goto nextAlt4 } goto ok nextAlt4: if !p.rules[ruleHtmlBlockDir]() { goto nextAlt5 } goto ok nextAlt5: if !p.rules[ruleHtmlBlockDiv]() { goto nextAlt6 } goto ok nextAlt6: if !p.rules[ruleHtmlBlockDl]() { goto nextAlt7 } goto ok nextAlt7: if !p.rules[ruleHtmlBlockFieldset]() { goto nextAlt8 } goto ok nextAlt8: if !p.rules[ruleHtmlBlockForm]() { goto nextAlt9 } goto ok nextAlt9: if !p.rules[ruleHtmlBlockH1]() { goto nextAlt10 } goto ok nextAlt10: if !p.rules[ruleHtmlBlockH2]() { goto nextAlt11 } goto ok nextAlt11: if !p.rules[ruleHtmlBlockH3]() { goto nextAlt12 } goto ok nextAlt12: if !p.rules[ruleHtmlBlockH4]() { goto nextAlt13 } goto ok nextAlt13: if !p.rules[ruleHtmlBlockH5]() { goto nextAlt14 } goto ok nextAlt14: if !p.rules[ruleHtmlBlockH6]() { goto nextAlt15 } goto ok nextAlt15: if !p.rules[ruleHtmlBlockMenu]() { goto nextAlt16 } goto ok nextAlt16: if !p.rules[ruleHtmlBlockNoframes]() { goto nextAlt17 } goto ok nextAlt17: if !p.rules[ruleHtmlBlockNoscript]() { goto nextAlt18 } goto ok nextAlt18: if !p.rules[ruleHtmlBlockOl]() { goto nextAlt19 } goto ok nextAlt19: if !p.rules[ruleHtmlBlockP]() { goto nextAlt20 } goto ok nextAlt20: if !p.rules[ruleHtmlBlockPre]() { goto nextAlt21 } goto ok nextAlt21: if !p.rules[ruleHtmlBlockTable]() { goto nextAlt22 } goto ok nextAlt22: if !p.rules[ruleHtmlBlockUl]() { goto nextAlt23 } goto ok nextAlt23: if !p.rules[ruleHtmlBlockDd]() { goto nextAlt24 } goto ok nextAlt24: if !p.rules[ruleHtmlBlockDt]() { goto nextAlt25 } goto ok nextAlt25: if !p.rules[ruleHtmlBlockFrameset]() { goto nextAlt26 } goto ok nextAlt26: if !p.rules[ruleHtmlBlockLi]() { goto nextAlt27 } goto ok nextAlt27: if !p.rules[ruleHtmlBlockTbody]() { goto nextAlt28 } goto ok nextAlt28: if !p.rules[ruleHtmlBlockTd]() { goto nextAlt29 } goto ok nextAlt29: if !p.rules[ruleHtmlBlockTfoot]() { goto nextAlt30 } goto ok nextAlt30: if !p.rules[ruleHtmlBlockTh]() { goto nextAlt31 } goto ok nextAlt31: if !p.rules[ruleHtmlBlockThead]() { goto nextAlt32 } goto ok nextAlt32: if !p.rules[ruleHtmlBlockTr]() { goto nextAlt33 } goto ok nextAlt33: if !p.rules[ruleHtmlBlockScript]() { goto nextAlt34 } goto ok nextAlt34: if !p.rules[ruleHtmlBlockHead]() { return } ok: match = true return }, /* 134 HtmlBlock <- (&'<' < (HtmlBlockInTags / HtmlComment / HtmlBlockSelfClosing) > BlankLine+ { if p.extension.FilterHTML { yy = p.mkList(LIST, nil) } else { yy = p.mkString(yytext) yy.key = HTMLBLOCK } }) */ func() (match bool) { position0 := position if !peekChar('<') { goto ko } begin = position if !p.rules[ruleHtmlBlockInTags]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlComment]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleHtmlBlockSelfClosing]() { goto ko } ok: end = position if !p.rules[ruleBlankLine]() { goto ko } loop: if !p.rules[ruleBlankLine]() { goto out } goto loop out: do(41) match = true return ko: position = position0 return }, /* 135 HtmlBlockSelfClosing <- ('<' Spnl HtmlBlockType Spnl HtmlAttribute* '/' Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !p.rules[ruleHtmlBlockType]() { goto ko } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('/') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 136 HtmlBlockType <- ('dir' / 'div' / 'dl' / 'fieldset' / 'form' / 'h1' / 'h2' / 'h3' / 'h4' / 'h5' / 'h6' / 'noframes' / 'p' / 'table' / 'dd' / 'tbody' / 'td' / 'tfoot' / 'th' / 'thead' / 'DIR' / 'DIV' / 'DL' / 'FIELDSET' / 'FORM' / 'H1' / 'H2' / 'H3' / 'H4' / 'H5' / 'H6' / 'NOFRAMES' / 'P' / 'TABLE' / 'DD' / 'TBODY' / 'TD' / 'TFOOT' / 'TH' / 'THEAD' / ((&[S] 'SCRIPT') | (&[T] 'TR') | (&[L] 'LI') | (&[F] 'FRAMESET') | (&[D] 'DT') | (&[U] 'UL') | (&[P] 'PRE') | (&[O] 'OL') | (&[N] 'NOSCRIPT') | (&[M] 'MENU') | (&[I] 'ISINDEX') | (&[H] 'HR') | (&[C] 'CENTER') | (&[B] 'BLOCKQUOTE') | (&[A] 'ADDRESS') | (&[s] 'script') | (&[t] 'tr') | (&[l] 'li') | (&[f] 'frameset') | (&[d] 'dt') | (&[u] 'ul') | (&[p] 'pre') | (&[o] 'ol') | (&[n] 'noscript') | (&[m] 'menu') | (&[i] 'isindex') | (&[h] 'hr') | (&[c] 'center') | (&[b] 'blockquote') | (&[a] 'address'))) */ func() (match bool) { if !matchString("dir") { goto nextAlt } goto ok nextAlt: if !matchString("div") { goto nextAlt3 } goto ok nextAlt3: if !matchString("dl") { goto nextAlt4 } goto ok nextAlt4: if !matchString("fieldset") { goto nextAlt5 } goto ok nextAlt5: if !matchString("form") { goto nextAlt6 } goto ok nextAlt6: if !matchString("h1") { goto nextAlt7 } goto ok nextAlt7: if !matchString("h2") { goto nextAlt8 } goto ok nextAlt8: if !matchString("h3") { goto nextAlt9 } goto ok nextAlt9: if !matchString("h4") { goto nextAlt10 } goto ok nextAlt10: if !matchString("h5") { goto nextAlt11 } goto ok nextAlt11: if !matchString("h6") { goto nextAlt12 } goto ok nextAlt12: if !matchString("noframes") { goto nextAlt13 } goto ok nextAlt13: if !matchChar('p') { goto nextAlt14 } goto ok nextAlt14: if !matchString("table") { goto nextAlt15 } goto ok nextAlt15: if !matchString("dd") { goto nextAlt16 } goto ok nextAlt16: if !matchString("tbody") { goto nextAlt17 } goto ok nextAlt17: if !matchString("td") { goto nextAlt18 } goto ok nextAlt18: if !matchString("tfoot") { goto nextAlt19 } goto ok nextAlt19: if !matchString("th") { goto nextAlt20 } goto ok nextAlt20: if !matchString("thead") { goto nextAlt21 } goto ok nextAlt21: if !matchString("DIR") { goto nextAlt22 } goto ok nextAlt22: if !matchString("DIV") { goto nextAlt23 } goto ok nextAlt23: if !matchString("DL") { goto nextAlt24 } goto ok nextAlt24: if !matchString("FIELDSET") { goto nextAlt25 } goto ok nextAlt25: if !matchString("FORM") { goto nextAlt26 } goto ok nextAlt26: if !matchString("H1") { goto nextAlt27 } goto ok nextAlt27: if !matchString("H2") { goto nextAlt28 } goto ok nextAlt28: if !matchString("H3") { goto nextAlt29 } goto ok nextAlt29: if !matchString("H4") { goto nextAlt30 } goto ok nextAlt30: if !matchString("H5") { goto nextAlt31 } goto ok nextAlt31: if !matchString("H6") { goto nextAlt32 } goto ok nextAlt32: if !matchString("NOFRAMES") { goto nextAlt33 } goto ok nextAlt33: if !matchChar('P') { goto nextAlt34 } goto ok nextAlt34: if !matchString("TABLE") { goto nextAlt35 } goto ok nextAlt35: if !matchString("DD") { goto nextAlt36 } goto ok nextAlt36: if !matchString("TBODY") { goto nextAlt37 } goto ok nextAlt37: if !matchString("TD") { goto nextAlt38 } goto ok nextAlt38: if !matchString("TFOOT") { goto nextAlt39 } goto ok nextAlt39: if !matchString("TH") { goto nextAlt40 } goto ok nextAlt40: if !matchString("THEAD") { goto nextAlt41 } goto ok nextAlt41: { if position == len(p.Buffer) { return } switch p.Buffer[position] { case 'S': position++ if !matchString("CRIPT") { return } case 'T': position++ // matchString(`TR`) if !matchChar('R') { return } case 'L': position++ // matchString(`LI`) if !matchChar('I') { return } case 'F': position++ if !matchString("RAMESET") { return } case 'D': position++ // matchString(`DT`) if !matchChar('T') { return } case 'U': position++ // matchString(`UL`) if !matchChar('L') { return } case 'P': position++ if !matchString("RE") { return } case 'O': position++ // matchString(`OL`) if !matchChar('L') { return } case 'N': position++ if !matchString("OSCRIPT") { return } case 'M': position++ if !matchString("ENU") { return } case 'I': position++ if !matchString("SINDEX") { return } case 'H': position++ // matchString(`HR`) if !matchChar('R') { return } case 'C': position++ if !matchString("ENTER") { return } case 'B': position++ if !matchString("LOCKQUOTE") { return } case 'A': position++ if !matchString("DDRESS") { return } case 's': position++ if !matchString("cript") { return } case 't': position++ // matchString(`tr`) if !matchChar('r') { return } case 'l': position++ // matchString(`li`) if !matchChar('i') { return } case 'f': position++ if !matchString("rameset") { return } case 'd': position++ // matchString(`dt`) if !matchChar('t') { return } case 'u': position++ // matchString(`ul`) if !matchChar('l') { return } case 'p': position++ if !matchString("re") { return } case 'o': position++ // matchString(`ol`) if !matchChar('l') { return } case 'n': position++ if !matchString("oscript") { return } case 'm': position++ if !matchString("enu") { return } case 'i': position++ if !matchString("sindex") { return } case 'h': position++ // matchString(`hr`) if !matchChar('r') { return } case 'c': position++ if !matchString("enter") { return } case 'b': position++ if !matchString("lockquote") { return } case 'a': position++ if !matchString("ddress") { return } default: return } } ok: match = true return }, /* 137 StyleOpen <- ('<' Spnl ((&[S] 'STYLE') | (&[s] 'style')) Spnl HtmlAttribute* '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'S': position++ if !matchString("TYLE") { goto ko } case 's': position++ if !matchString("tyle") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } loop: if !p.rules[ruleHtmlAttribute]() { goto out } goto loop out: if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 138 StyleClose <- ('<' Spnl '/' ((&[S] 'STYLE') | (&[s] 'style')) Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('/') { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case 'S': position++ if !matchString("TYLE") { goto ko } case 's': position++ if !matchString("tyle") { goto ko } default: goto ko } } if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 139 InStyleTags <- (StyleOpen (!StyleClose .)* StyleClose) */ func() (match bool) { position0 := position if !p.rules[ruleStyleOpen]() { goto ko } loop: { position1 := position if !p.rules[ruleStyleClose]() { goto ok } goto out ok: if !matchDot() { goto out } goto loop out: position = position1 } if !p.rules[ruleStyleClose]() { goto ko } match = true return ko: position = position0 return }, /* 140 StyleBlock <- (< InStyleTags > BlankLine* { if p.extension.FilterStyles { yy = p.mkList(LIST, nil) } else { yy = p.mkString(yytext) yy.key = HTMLBLOCK } }) */ func() (match bool) { position0 := position begin = position if !p.rules[ruleInStyleTags]() { goto ko } end = position loop: if !p.rules[ruleBlankLine]() { goto out } goto loop out: do(42) match = true return ko: position = position0 return }, /* 141 Inlines <- (StartList ((!Endline Inline { a = cons(yy, a) }) / (Endline &Inline { a = cons(c, a) }))+ Endline? { yy = p.mkList(LIST, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) { position1 := position if !p.rules[ruleEndline]() { goto ok5 } goto nextAlt ok5: if !p.rules[ruleInline]() { goto nextAlt } do(43) goto ok nextAlt: position = position1 if !p.rules[ruleEndline]() { goto ko } doarg(yySet, -2) { position2 := position if !p.rules[ruleInline]() { goto ko } position = position2 } do(44) } ok: loop: { position1, thunkPosition1 := position, thunkPosition { position4 := position if !p.rules[ruleEndline]() { goto ok9 } goto nextAlt8 ok9: if !p.rules[ruleInline]() { goto nextAlt8 } do(43) goto ok7 nextAlt8: position = position4 if !p.rules[ruleEndline]() { goto out } doarg(yySet, -2) { position5 := position if !p.rules[ruleInline]() { goto out } position = position5 } do(44) } ok7: goto loop out: position, thunkPosition = position1, thunkPosition1 } if !p.rules[ruleEndline]() { goto ko11 } ko11: do(45) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 142 Inline <- (Str / Endline / UlOrStarLine / Space / Strong / Emph / Strike / Image / Link / NoteReference / InlineNote / Code / RawHtml / Entity / EscapedChar / Smart / Symbol) */ func() (match bool) { if !p.rules[ruleStr]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleEndline]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleUlOrStarLine]() { goto nextAlt4 } goto ok nextAlt4: if !p.rules[ruleSpace]() { goto nextAlt5 } goto ok nextAlt5: if !p.rules[ruleStrong]() { goto nextAlt6 } goto ok nextAlt6: if !p.rules[ruleEmph]() { goto nextAlt7 } goto ok nextAlt7: if !p.rules[ruleStrike]() { goto nextAlt8 } goto ok nextAlt8: if !p.rules[ruleImage]() { goto nextAlt9 } goto ok nextAlt9: if !p.rules[ruleLink]() { goto nextAlt10 } goto ok nextAlt10: if !p.rules[ruleNoteReference]() { goto nextAlt11 } goto ok nextAlt11: if !p.rules[ruleInlineNote]() { goto nextAlt12 } goto ok nextAlt12: if !p.rules[ruleCode]() { goto nextAlt13 } goto ok nextAlt13: if !p.rules[ruleRawHtml]() { goto nextAlt14 } goto ok nextAlt14: if !p.rules[ruleEntity]() { goto nextAlt15 } goto ok nextAlt15: if !p.rules[ruleEscapedChar]() { goto nextAlt16 } goto ok nextAlt16: if !p.rules[ruleSmart]() { goto nextAlt17 } goto ok nextAlt17: if !p.rules[ruleSymbol]() { return } ok: match = true return }, /* 143 Space <- (Spacechar+ { yy = p.mkString(" ") yy.key = SPACE }) */ func() (match bool) { position0 := position if !p.rules[ruleSpacechar]() { goto ko } loop: if !p.rules[ruleSpacechar]() { goto out } goto loop out: do(46) match = true return ko: position = position0 return }, /* 144 Str <- (StartList < NormalChar+ > { a = cons(p.mkString(yytext), a) } (StrChunk { a = cons(yy, a) })* { if a.next == nil { yy = a; } else { yy = p.mkList(LIST, a) } }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) begin = position if !p.rules[ruleNormalChar]() { goto ko } loop: if !p.rules[ruleNormalChar]() { goto out } goto loop out: end = position do(47) loop3: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleStrChunk]() { goto out4 } do(48) goto loop3 out4: position, thunkPosition = position1, thunkPosition1 } do(49) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 145 StrChunk <- ((< (NormalChar / ('_'+ &Alphanumeric))+ > { yy = p.mkString(yytext) }) / AposChunk) */ func() (match bool) { position0 := position { position1 := position begin = position if !p.rules[ruleNormalChar]() { goto nextAlt6 } goto ok5 nextAlt6: if !matchChar('_') { goto nextAlt } loop7: if !matchChar('_') { goto out8 } goto loop7 out8: { position2 := position if !p.rules[ruleAlphanumeric]() { goto nextAlt } position = position2 } ok5: loop: { position2 := position if !p.rules[ruleNormalChar]() { goto nextAlt11 } goto ok10 nextAlt11: if !matchChar('_') { goto out } loop12: if !matchChar('_') { goto out13 } goto loop12 out13: { position4 := position if !p.rules[ruleAlphanumeric]() { goto out } position = position4 } ok10: goto loop out: position = position2 } end = position do(50) goto ok nextAlt: position = position1 if !p.rules[ruleAposChunk]() { goto ko } } ok: match = true return ko: position = position0 return }, /* 146 AposChunk <- (&{p.extension.Smart} '\'' &Alphanumeric { yy = p.mkElem(APOSTROPHE) }) */ func() (match bool) { position0 := position if !(p.extension.Smart) { goto ko } if !matchChar('\'') { goto ko } { position1 := position if !p.rules[ruleAlphanumeric]() { goto ko } position = position1 } do(51) match = true return ko: position = position0 return }, /* 147 EscapedChar <- ('\\' !Newline < [-\\`|*_{}[\]()#+.!><] > { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position if !matchChar('\\') { goto ko } if !p.rules[ruleNewline]() { goto ok } goto ko ok: begin = position if !matchClass(1) { goto ko } end = position do(52) match = true return ko: position = position0 return }, /* 148 Entity <- ((HexEntity / DecEntity / CharEntity) { yy = p.mkString(yytext); yy.key = HTML }) */ func() (match bool) { position0 := position if !p.rules[ruleHexEntity]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleDecEntity]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleCharEntity]() { goto ko } ok: do(53) match = true return ko: position = position0 return }, /* 149 Endline <- (LineBreak / TerminalEndline / NormalEndline) */ func() (match bool) { if !p.rules[ruleLineBreak]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleTerminalEndline]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleNormalEndline]() { return } ok: match = true return }, /* 150 NormalEndline <- (Sp Newline !BlankLine !'>' !AtxStart !(Line ((&[\-] '-'+) | (&[=] '='+)) Newline) { yy = p.mkString("\n") yy.key = SPACE }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } if !p.rules[ruleBlankLine]() { goto ok } goto ko ok: if peekChar('>') { goto ko } if !p.rules[ruleAtxStart]() { goto ok2 } goto ko ok2: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleLine]() { goto ok3 } { if position == len(p.Buffer) { goto ok3 } switch p.Buffer[position] { case '-': if !matchChar('-') { goto ok3 } loop: if !matchChar('-') { goto out } goto loop out: break case '=': if !matchChar('=') { goto ok3 } loop7: if !matchChar('=') { goto out8 } goto loop7 out8: break default: goto ok3 } } if !p.rules[ruleNewline]() { goto ok3 } goto ko ok3: position, thunkPosition = position1, thunkPosition1 } do(54) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 151 TerminalEndline <- (Sp Newline !. { yy = nil }) */ func() (match bool) { position0 := position if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } if position < len(p.Buffer) { goto ko } do(55) match = true return ko: position = position0 return }, /* 152 LineBreak <- (' ' NormalEndline { yy = p.mkElem(LINEBREAK) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition if !matchString(" ") { goto ko } if !p.rules[ruleNormalEndline]() { goto ko } do(56) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 153 Symbol <- (< SpecialChar > { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position begin = position if !p.rules[ruleSpecialChar]() { goto ko } end = position do(57) match = true return ko: position = position0 return }, /* 154 UlOrStarLine <- ((UlLine / StarLine) { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position if !p.rules[ruleUlLine]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleStarLine]() { goto ko } ok: do(58) match = true return ko: position = position0 return }, /* 155 StarLine <- ((&[*] (< '****' '*'* >)) | (&[\t ] (< Spacechar '*'+ &Spacechar >))) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '*': begin = position if !matchString("****") { goto ko } loop: if !matchChar('*') { goto out } goto loop out: end = position case '\t', ' ': begin = position if !p.rules[ruleSpacechar]() { goto ko } if !matchChar('*') { goto ko } loop4: if !matchChar('*') { goto out5 } goto loop4 out5: { position1 := position if !p.rules[ruleSpacechar]() { goto ko } position = position1 } end = position default: goto ko } } match = true return ko: position = position0 return }, /* 156 UlLine <- ((&[_] (< '____' '_'* >)) | (&[\t ] (< Spacechar '_'+ &Spacechar >))) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '_': begin = position if !matchString("____") { goto ko } loop: if !matchChar('_') { goto out } goto loop out: end = position case '\t', ' ': begin = position if !p.rules[ruleSpacechar]() { goto ko } if !matchChar('_') { goto ko } loop4: if !matchChar('_') { goto out5 } goto loop4 out5: { position1 := position if !p.rules[ruleSpacechar]() { goto ko } position = position1 } end = position default: goto ko } } match = true return ko: position = position0 return }, /* 157 Emph <- ((&[_] EmphUl) | (&[*] EmphStar)) */ func() (match bool) { { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '_': if !p.rules[ruleEmphUl]() { return } case '*': if !p.rules[ruleEmphStar]() { return } default: return } } match = true return }, /* 158 Whitespace <- ((&[\n\r] Newline) | (&[\t ] Spacechar)) */ func() (match bool) { { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { return } case '\t', ' ': if !p.rules[ruleSpacechar]() { return } default: return } } match = true return }, /* 159 EmphStar <- ('*' !Whitespace StartList ((!'*' Inline { a = cons(b, a) }) / (StrongStar { a = cons(b, a) }))+ '*' { yy = p.mkList(EMPH, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !matchChar('*') { goto ko } if !p.rules[ruleWhitespace]() { goto ok } goto ko ok: if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) { position1, thunkPosition1 := position, thunkPosition if peekChar('*') { goto nextAlt } if !p.rules[ruleInline]() { goto nextAlt } doarg(yySet, -2) do(59) goto ok4 nextAlt: position, thunkPosition = position1, thunkPosition1 if !p.rules[ruleStrongStar]() { goto ko } doarg(yySet, -2) do(60) } ok4: loop: { position1, thunkPosition1 := position, thunkPosition { position3, thunkPosition3 := position, thunkPosition if peekChar('*') { goto nextAlt7 } if !p.rules[ruleInline]() { goto nextAlt7 } doarg(yySet, -2) do(59) goto ok6 nextAlt7: position, thunkPosition = position3, thunkPosition3 if !p.rules[ruleStrongStar]() { goto out } doarg(yySet, -2) do(60) } ok6: goto loop out: position, thunkPosition = position1, thunkPosition1 } if !matchChar('*') { goto ko } do(61) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 160 EmphUl <- ('_' !Whitespace StartList ((!'_' Inline { a = cons(b, a) }) / (StrongUl { a = cons(b, a) }))+ '_' { yy = p.mkList(EMPH, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !matchChar('_') { goto ko } if !p.rules[ruleWhitespace]() { goto ok } goto ko ok: if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) { position1, thunkPosition1 := position, thunkPosition if peekChar('_') { goto nextAlt } if !p.rules[ruleInline]() { goto nextAlt } doarg(yySet, -2) do(62) goto ok4 nextAlt: position, thunkPosition = position1, thunkPosition1 if !p.rules[ruleStrongUl]() { goto ko } doarg(yySet, -2) do(63) } ok4: loop: { position1, thunkPosition1 := position, thunkPosition { position3, thunkPosition3 := position, thunkPosition if peekChar('_') { goto nextAlt7 } if !p.rules[ruleInline]() { goto nextAlt7 } doarg(yySet, -2) do(62) goto ok6 nextAlt7: position, thunkPosition = position3, thunkPosition3 if !p.rules[ruleStrongUl]() { goto out } doarg(yySet, -2) do(63) } ok6: goto loop out: position, thunkPosition = position1, thunkPosition1 } if !matchChar('_') { goto ko } do(64) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 161 Strong <- ((&[_] StrongUl) | (&[*] StrongStar)) */ func() (match bool) { { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '_': if !p.rules[ruleStrongUl]() { return } case '*': if !p.rules[ruleStrongStar]() { return } default: return } } match = true return }, /* 162 StrongStar <- ('**' !Whitespace StartList (!'**' Inline { a = cons(b, a) })+ '**' { yy = p.mkList(STRONG, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !matchString("**") { goto ko } if !p.rules[ruleWhitespace]() { goto ok } goto ko ok: if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !matchString("**") { goto ok4 } goto ko ok4: if !p.rules[ruleInline]() { goto ko } doarg(yySet, -2) do(65) loop: { position1, thunkPosition1 := position, thunkPosition if !matchString("**") { goto ok5 } goto out ok5: if !p.rules[ruleInline]() { goto out } doarg(yySet, -2) do(65) goto loop out: position, thunkPosition = position1, thunkPosition1 } if !matchString("**") { goto ko } do(66) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 163 StrongUl <- ('__' !Whitespace StartList (!'__' Inline { a = cons(b, a) })+ '__' { yy = p.mkList(STRONG, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !matchString("__") { goto ko } if !p.rules[ruleWhitespace]() { goto ok } goto ko ok: if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !matchString("__") { goto ok4 } goto ko ok4: if !p.rules[ruleInline]() { goto ko } doarg(yySet, -2) do(67) loop: { position1, thunkPosition1 := position, thunkPosition if !matchString("__") { goto ok5 } goto out ok5: if !p.rules[ruleInline]() { goto out } doarg(yySet, -2) do(67) goto loop out: position, thunkPosition = position1, thunkPosition1 } if !matchString("__") { goto ko } do(68) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 164 TwoTildeOpen <- (&{p.extension.Strike} !TildeLine '~~' !Spacechar !Newline) */ func() (match bool) { position0 := position if !(p.extension.Strike) { goto ko } if !p.rules[ruleTildeLine]() { goto ok } goto ko ok: if !matchString("~~") { goto ko } if !p.rules[ruleSpacechar]() { goto ok2 } goto ko ok2: if !p.rules[ruleNewline]() { goto ok3 } goto ko ok3: match = true return ko: position = position0 return }, /* 165 TwoTildeClose <- (&{p.extension.Strike} !Spacechar !Newline Inline '~~' { yy = a; }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !(p.extension.Strike) { goto ko } if !p.rules[ruleSpacechar]() { goto ok } goto ko ok: if !p.rules[ruleNewline]() { goto ok2 } goto ko ok2: if !p.rules[ruleInline]() { goto ko } doarg(yySet, -1) if !matchString("~~") { goto ko } do(69) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 166 Strike <- (&{p.extension.Strike} '~~' !Whitespace StartList (!'~~' Inline { a = cons(b, a) })+ '~~' { yy = p.mkList(STRIKE, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !(p.extension.Strike) { goto ko } if !matchString("~~") { goto ko } if !p.rules[ruleWhitespace]() { goto ok } goto ko ok: if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !matchString("~~") { goto ok4 } goto ko ok4: if !p.rules[ruleInline]() { goto ko } doarg(yySet, -2) do(70) loop: { position1, thunkPosition1 := position, thunkPosition if !matchString("~~") { goto ok5 } goto out ok5: if !p.rules[ruleInline]() { goto out } doarg(yySet, -2) do(70) goto loop out: position, thunkPosition = position1, thunkPosition1 } if !matchString("~~") { goto ko } do(71) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 167 Image <- ('!' (ExplicitLink / ReferenceLink) { if yy.key == LINK { yy.key = IMAGE } else { result := yy yy.children = cons(p.mkString("!"), result.children) } }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition if !matchChar('!') { goto ko } if !p.rules[ruleExplicitLink]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleReferenceLink]() { goto ko } ok: do(72) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 168 Link <- (ExplicitLink / ReferenceLink / AutoLink) */ func() (match bool) { if !p.rules[ruleExplicitLink]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleReferenceLink]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleAutoLink]() { return } ok: match = true return }, /* 169 ReferenceLink <- (ReferenceLinkDouble / ReferenceLinkSingle) */ func() (match bool) { if !p.rules[ruleReferenceLinkDouble]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleReferenceLinkSingle]() { return } ok: match = true return }, /* 170 ReferenceLinkDouble <- (Label < Spnl > !'[]' Label { if match, found := p.findReference(b.children); found { yy = p.mkLink(a.children, match.url, match.title); a = nil b = nil } else { result := p.mkElem(LIST) result.children = cons(p.mkString("["), cons(a, cons(p.mkString("]"), cons(p.mkString(yytext), cons(p.mkString("["), cons(b, p.mkString("]"))))))) yy = result } }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleLabel]() { goto ko } doarg(yySet, -1) begin = position if !p.rules[ruleSpnl]() { goto ko } end = position if !matchString("[]") { goto ok } goto ko ok: if !p.rules[ruleLabel]() { goto ko } doarg(yySet, -2) do(73) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 171 ReferenceLinkSingle <- (Label < (Spnl '[]')? > { if match, found := p.findReference(a.children); found { yy = p.mkLink(a.children, match.url, match.title) a = nil } else { result := p.mkElem(LIST) result.children = cons(p.mkString("["), cons(a, cons(p.mkString("]"), p.mkString(yytext)))); yy = result } }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleLabel]() { goto ko } doarg(yySet, -1) begin = position { position1 := position if !p.rules[ruleSpnl]() { goto ko1 } if !matchString("[]") { goto ko1 } goto ok ko1: position = position1 } ok: end = position do(74) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 172 ExplicitLink <- (Label '(' Sp Source Spnl Title Sp ')' { yy = p.mkLink(l.children, s.contents.str, t.contents.str) s = nil t = nil l = nil }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 3) if !p.rules[ruleLabel]() { goto ko } doarg(yySet, -1) if !matchChar('(') { goto ko } if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleSource]() { goto ko } doarg(yySet, -2) if !p.rules[ruleSpnl]() { goto ko } if !p.rules[ruleTitle]() { goto ko } doarg(yySet, -3) if !p.rules[ruleSp]() { goto ko } if !matchChar(')') { goto ko } do(75) doarg(yyPop, 3) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 173 Source <- ((('<' < SourceContents > '>') / (< SourceContents >)) { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position { position1 := position if !matchChar('<') { goto nextAlt } begin = position if !p.rules[ruleSourceContents]() { goto nextAlt } end = position if !matchChar('>') { goto nextAlt } goto ok nextAlt: position = position1 begin = position if !p.rules[ruleSourceContents]() { goto ko } end = position } ok: do(76) match = true return ko: position = position0 return }, /* 174 SourceContents <- ((!'(' !')' !'>' Nonspacechar)+ / ('(' SourceContents ')'))* */ func() (match bool) { loop: { position1 := position if position == len(p.Buffer) { goto nextAlt } switch p.Buffer[position] { case '(', ')', '>': goto nextAlt default: if !p.rules[ruleNonspacechar]() { goto nextAlt } } loop5: if position == len(p.Buffer) { goto out6 } switch p.Buffer[position] { case '(', ')', '>': goto out6 default: if !p.rules[ruleNonspacechar]() { goto out6 } } goto loop5 out6: goto ok nextAlt: if !matchChar('(') { goto out } if !p.rules[ruleSourceContents]() { goto out } if !matchChar(')') { goto out } ok: goto loop out: position = position1 } match = true return }, /* 175 Title <- ((TitleSingle / TitleDouble / (< '' >)) { yy = p.mkString(yytext) }) */ func() (match bool) { if !p.rules[ruleTitleSingle]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleTitleDouble]() { goto nextAlt3 } goto ok nextAlt3: begin = position end = position ok: do(77) match = true return }, /* 176 TitleSingle <- ('\'' < (!('\'' Sp ((&[)] ')') | (&[\n\r] Newline))) .)* > '\'') */ func() (match bool) { position0 := position if !matchChar('\'') { goto ko } begin = position loop: { position1 := position { position2 := position if !matchChar('\'') { goto ok } if !p.rules[ruleSp]() { goto ok } { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case ')': position++ // matchChar case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } default: goto ok } } goto out ok: position = position2 } if !matchDot() { goto out } goto loop out: position = position1 } end = position if !matchChar('\'') { goto ko } match = true return ko: position = position0 return }, /* 177 TitleDouble <- ('"' < (!('"' Sp ((&[)] ')') | (&[\n\r] Newline))) .)* > '"') */ func() (match bool) { position0 := position if !matchChar('"') { goto ko } begin = position loop: { position1 := position { position2 := position if !matchChar('"') { goto ok } if !p.rules[ruleSp]() { goto ok } { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case ')': position++ // matchChar case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } default: goto ok } } goto out ok: position = position2 } if !matchDot() { goto out } goto loop out: position = position1 } end = position if !matchChar('"') { goto ko } match = true return ko: position = position0 return }, /* 178 AutoLink <- (AutoLinkUrl / AutoLinkEmail) */ func() (match bool) { if !p.rules[ruleAutoLinkUrl]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleAutoLinkEmail]() { return } ok: match = true return }, /* 179 AutoLinkUrl <- ('<' < [A-Za-z]+ '://' (!Newline !'>' .)+ > '>' { yy = p.mkLink(p.mkString(yytext), yytext, "") }) */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } begin = position if !matchClass(2) { goto ko } loop: if !matchClass(2) { goto out } goto loop out: if !matchString("://") { goto ko } if !p.rules[ruleNewline]() { goto ok } goto ko ok: if peekChar('>') { goto ko } if !matchDot() { goto ko } loop3: { position1 := position if !p.rules[ruleNewline]() { goto ok6 } goto out4 ok6: if peekChar('>') { goto out4 } if !matchDot() { goto out4 } goto loop3 out4: position = position1 } end = position if !matchChar('>') { goto ko } do(78) match = true return ko: position = position0 return }, /* 180 AutoLinkEmail <- ('<' 'mailto:'? < [-A-Za-z0-9+_./!%~$]+ '@' (!Newline !'>' .)+ > '>' { yy = p.mkLink(p.mkString(yytext), "mailto:"+yytext, "") }) */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !matchString("mailto:") { goto ko1 } ko1: begin = position if !matchClass(3) { goto ko } loop: if !matchClass(3) { goto out } goto loop out: if !matchChar('@') { goto ko } if !p.rules[ruleNewline]() { goto ok7 } goto ko ok7: if peekChar('>') { goto ko } if !matchDot() { goto ko } loop5: { position1 := position if !p.rules[ruleNewline]() { goto ok8 } goto out6 ok8: if peekChar('>') { goto out6 } if !matchDot() { goto out6 } goto loop5 out6: position = position1 } end = position if !matchChar('>') { goto ko } do(79) match = true return ko: position = position0 return }, /* 181 Reference <- (NonindentSpace !'[]' Label ':' Spnl RefSrc RefTitle BlankLine+ { yy = p.mkLink(l.children, s.contents.str, t.contents.str) s = nil t = nil l = nil yy.key = REFERENCE }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 3) if !p.rules[ruleNonindentSpace]() { goto ko } if !matchString("[]") { goto ok } goto ko ok: if !p.rules[ruleLabel]() { goto ko } doarg(yySet, -1) if !matchChar(':') { goto ko } if !p.rules[ruleSpnl]() { goto ko } if !p.rules[ruleRefSrc]() { goto ko } doarg(yySet, -2) if !p.rules[ruleRefTitle]() { goto ko } doarg(yySet, -3) if !p.rules[ruleBlankLine]() { goto ko } loop: if !p.rules[ruleBlankLine]() { goto out } goto loop out: do(80) doarg(yyPop, 3) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 182 Label <- ('[' ((!'^' &{p.extension.Notes}) / (&. &{!p.extension.Notes})) StartList (!']' Inline { a = cons(yy, a) })* ']' { yy = p.mkList(LIST, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !matchChar('[') { goto ko } if peekChar('^') { goto nextAlt } if !(p.extension.Notes) { goto nextAlt } goto ok nextAlt: if !(position < len(p.Buffer)) { goto ko } if !(!p.extension.Notes) { goto ko } ok: if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) loop: { position1 := position if peekChar(']') { goto out } if !p.rules[ruleInline]() { goto out } do(81) goto loop out: position = position1 } if !matchChar(']') { goto ko } do(82) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 183 RefSrc <- (< Nonspacechar+ > { yy = p.mkString(yytext) yy.key = HTML }) */ func() (match bool) { position0 := position begin = position if !p.rules[ruleNonspacechar]() { goto ko } loop: if !p.rules[ruleNonspacechar]() { goto out } goto loop out: end = position do(83) match = true return ko: position = position0 return }, /* 184 RefTitle <- ((RefTitleSingle / RefTitleDouble / RefTitleParens / EmptyTitle) { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position if !p.rules[ruleRefTitleSingle]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleRefTitleDouble]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleRefTitleParens]() { goto nextAlt4 } goto ok nextAlt4: if !p.rules[ruleEmptyTitle]() { goto ko } ok: do(84) match = true return ko: position = position0 return }, /* 185 EmptyTitle <- (< '' >) */ func() (match bool) { begin = position end = position match = true return }, /* 186 RefTitleSingle <- (Spnl '\'' < (!((&[\'] ('\'' Sp Newline)) | (&[\n\r] Newline)) .)* > '\'') */ func() (match bool) { position0 := position if !p.rules[ruleSpnl]() { goto ko } if !matchChar('\'') { goto ko } begin = position loop: { position1 := position { position2 := position { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case '\'': position++ // matchChar if !p.rules[ruleSp]() { goto ok } if !p.rules[ruleNewline]() { goto ok } case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } default: goto ok } } goto out ok: position = position2 } if !matchDot() { goto out } goto loop out: position = position1 } end = position if !matchChar('\'') { goto ko } match = true return ko: position = position0 return }, /* 187 RefTitleDouble <- (Spnl '"' < (!((&[\"] ('"' Sp Newline)) | (&[\n\r] Newline)) .)* > '"') */ func() (match bool) { position0 := position if !p.rules[ruleSpnl]() { goto ko } if !matchChar('"') { goto ko } begin = position loop: { position1 := position { position2 := position { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case '"': position++ // matchChar if !p.rules[ruleSp]() { goto ok } if !p.rules[ruleNewline]() { goto ok } case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } default: goto ok } } goto out ok: position = position2 } if !matchDot() { goto out } goto loop out: position = position1 } end = position if !matchChar('"') { goto ko } match = true return ko: position = position0 return }, /* 188 RefTitleParens <- (Spnl '(' < (!((&[)] (')' Sp Newline)) | (&[\n\r] Newline)) .)* > ')') */ func() (match bool) { position0 := position if !p.rules[ruleSpnl]() { goto ko } if !matchChar('(') { goto ko } begin = position loop: { position1 := position { position2 := position { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case ')': position++ // matchChar if !p.rules[ruleSp]() { goto ok } if !p.rules[ruleNewline]() { goto ok } case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } default: goto ok } } goto out ok: position = position2 } if !matchDot() { goto out } goto loop out: position = position1 } end = position if !matchChar(')') { goto ko } match = true return ko: position = position0 return }, /* 189 References <- (StartList ((Reference { a = cons(b, a) }) / SkipBlock)* { p.references = reverse(a) } commit) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) loop: { position1, thunkPosition1 := position, thunkPosition { position2, thunkPosition2 := position, thunkPosition if !p.rules[ruleReference]() { goto nextAlt } doarg(yySet, -2) do(85) goto ok nextAlt: position, thunkPosition = position2, thunkPosition2 if !p.rules[ruleSkipBlock]() { goto out } } ok: goto loop out: position, thunkPosition = position1, thunkPosition1 } do(86) if !(p.commit(thunkPosition0)) { goto ko } doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 190 Ticks1 <- ('`' !'`') */ func() (match bool) { position0 := position if !matchChar('`') { goto ko } if peekChar('`') { goto ko } match = true return ko: position = position0 return }, /* 191 Ticks2 <- ('``' !'`') */ func() (match bool) { position0 := position if !matchString("``") { goto ko } if peekChar('`') { goto ko } match = true return ko: position = position0 return }, /* 192 Ticks3 <- ('```' !'`') */ func() (match bool) { position0 := position if !matchString("```") { goto ko } if peekChar('`') { goto ko } match = true return ko: position = position0 return }, /* 193 Ticks4 <- ('````' !'`') */ func() (match bool) { position0 := position if !matchString("````") { goto ko } if peekChar('`') { goto ko } match = true return ko: position = position0 return }, /* 194 Ticks5 <- ('`````' !'`') */ func() (match bool) { position0 := position if !matchString("`````") { goto ko } if peekChar('`') { goto ko } match = true return ko: position = position0 return }, /* 195 Code <- (((Ticks1 Sp < ((!'`' Nonspacechar)+ / ((&[`] (!Ticks1 '`'+)) | (&[\t\n\r ] (!(Sp Ticks1) ((&[\n\r] (Newline !BlankLine)) | (&[\t ] Spacechar))))))+ > Sp Ticks1) / (Ticks2 Sp < ((!'`' Nonspacechar)+ / ((&[`] (!Ticks2 '`'+)) | (&[\t\n\r ] (!(Sp Ticks2) ((&[\n\r] (Newline !BlankLine)) | (&[\t ] Spacechar))))))+ > Sp Ticks2) / (Ticks3 Sp < ((!'`' Nonspacechar)+ / ((&[`] (!Ticks3 '`'+)) | (&[\t\n\r ] (!(Sp Ticks3) ((&[\n\r] (Newline !BlankLine)) | (&[\t ] Spacechar))))))+ > Sp Ticks3) / (Ticks4 Sp < ((!'`' Nonspacechar)+ / ((&[`] (!Ticks4 '`'+)) | (&[\t\n\r ] (!(Sp Ticks4) ((&[\n\r] (Newline !BlankLine)) | (&[\t ] Spacechar))))))+ > Sp Ticks4) / (Ticks5 Sp < ((!'`' Nonspacechar)+ / ((&[`] (!Ticks5 '`'+)) | (&[\t\n\r ] (!(Sp Ticks5) ((&[\n\r] (Newline !BlankLine)) | (&[\t ] Spacechar))))))+ > Sp Ticks5)) { yy = p.mkString(yytext); yy.key = CODE }) */ func() (match bool) { position0 := position { position1 := position if !p.rules[ruleTicks1]() { goto nextAlt } if !p.rules[ruleSp]() { goto nextAlt } begin = position if peekChar('`') { goto nextAlt6 } if !p.rules[ruleNonspacechar]() { goto nextAlt6 } loop7: if peekChar('`') { goto out8 } if !p.rules[ruleNonspacechar]() { goto out8 } goto loop7 out8: goto ok5 nextAlt6: { if position == len(p.Buffer) { goto nextAlt } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks1]() { goto ok10 } goto nextAlt ok10: if !matchChar('`') { goto nextAlt } loop11: if !matchChar('`') { goto out12 } goto loop11 out12: break default: { position2 := position if !p.rules[ruleSp]() { goto ok13 } if !p.rules[ruleTicks1]() { goto ok13 } goto nextAlt ok13: position = position2 } { if position == len(p.Buffer) { goto nextAlt } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto nextAlt } if !p.rules[ruleBlankLine]() { goto ok15 } goto nextAlt ok15: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto nextAlt } default: goto nextAlt } } } } ok5: loop: { position2 := position if peekChar('`') { goto nextAlt17 } if !p.rules[ruleNonspacechar]() { goto nextAlt17 } loop18: if peekChar('`') { goto out19 } if !p.rules[ruleNonspacechar]() { goto out19 } goto loop18 out19: goto ok16 nextAlt17: { if position == len(p.Buffer) { goto out } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks1]() { goto ok21 } goto out ok21: if !matchChar('`') { goto out } loop22: if !matchChar('`') { goto out23 } goto loop22 out23: break default: { position4 := position if !p.rules[ruleSp]() { goto ok24 } if !p.rules[ruleTicks1]() { goto ok24 } goto out ok24: position = position4 } { if position == len(p.Buffer) { goto out } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto out } if !p.rules[ruleBlankLine]() { goto ok26 } goto out ok26: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto out } default: goto out } } } } ok16: goto loop out: position = position2 } end = position if !p.rules[ruleSp]() { goto nextAlt } if !p.rules[ruleTicks1]() { goto nextAlt } goto ok nextAlt: position = position1 if !p.rules[ruleTicks2]() { goto nextAlt27 } if !p.rules[ruleSp]() { goto nextAlt27 } begin = position if peekChar('`') { goto nextAlt31 } if !p.rules[ruleNonspacechar]() { goto nextAlt31 } loop32: if peekChar('`') { goto out33 } if !p.rules[ruleNonspacechar]() { goto out33 } goto loop32 out33: goto ok30 nextAlt31: { if position == len(p.Buffer) { goto nextAlt27 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks2]() { goto ok35 } goto nextAlt27 ok35: if !matchChar('`') { goto nextAlt27 } loop36: if !matchChar('`') { goto out37 } goto loop36 out37: break default: { position5 := position if !p.rules[ruleSp]() { goto ok38 } if !p.rules[ruleTicks2]() { goto ok38 } goto nextAlt27 ok38: position = position5 } { if position == len(p.Buffer) { goto nextAlt27 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto nextAlt27 } if !p.rules[ruleBlankLine]() { goto ok40 } goto nextAlt27 ok40: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto nextAlt27 } default: goto nextAlt27 } } } } ok30: loop28: { position5 := position if peekChar('`') { goto nextAlt42 } if !p.rules[ruleNonspacechar]() { goto nextAlt42 } loop43: if peekChar('`') { goto out44 } if !p.rules[ruleNonspacechar]() { goto out44 } goto loop43 out44: goto ok41 nextAlt42: { if position == len(p.Buffer) { goto out29 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks2]() { goto ok46 } goto out29 ok46: if !matchChar('`') { goto out29 } loop47: if !matchChar('`') { goto out48 } goto loop47 out48: break default: { position7 := position if !p.rules[ruleSp]() { goto ok49 } if !p.rules[ruleTicks2]() { goto ok49 } goto out29 ok49: position = position7 } { if position == len(p.Buffer) { goto out29 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto out29 } if !p.rules[ruleBlankLine]() { goto ok51 } goto out29 ok51: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto out29 } default: goto out29 } } } } ok41: goto loop28 out29: position = position5 } end = position if !p.rules[ruleSp]() { goto nextAlt27 } if !p.rules[ruleTicks2]() { goto nextAlt27 } goto ok nextAlt27: position = position1 if !p.rules[ruleTicks3]() { goto nextAlt52 } if !p.rules[ruleSp]() { goto nextAlt52 } begin = position if peekChar('`') { goto nextAlt56 } if !p.rules[ruleNonspacechar]() { goto nextAlt56 } loop57: if peekChar('`') { goto out58 } if !p.rules[ruleNonspacechar]() { goto out58 } goto loop57 out58: goto ok55 nextAlt56: { if position == len(p.Buffer) { goto nextAlt52 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks3]() { goto ok60 } goto nextAlt52 ok60: if !matchChar('`') { goto nextAlt52 } loop61: if !matchChar('`') { goto out62 } goto loop61 out62: break default: { position8 := position if !p.rules[ruleSp]() { goto ok63 } if !p.rules[ruleTicks3]() { goto ok63 } goto nextAlt52 ok63: position = position8 } { if position == len(p.Buffer) { goto nextAlt52 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto nextAlt52 } if !p.rules[ruleBlankLine]() { goto ok65 } goto nextAlt52 ok65: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto nextAlt52 } default: goto nextAlt52 } } } } ok55: loop53: { position8 := position if peekChar('`') { goto nextAlt67 } if !p.rules[ruleNonspacechar]() { goto nextAlt67 } loop68: if peekChar('`') { goto out69 } if !p.rules[ruleNonspacechar]() { goto out69 } goto loop68 out69: goto ok66 nextAlt67: { if position == len(p.Buffer) { goto out54 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks3]() { goto ok71 } goto out54 ok71: if !matchChar('`') { goto out54 } loop72: if !matchChar('`') { goto out73 } goto loop72 out73: break default: { position10 := position if !p.rules[ruleSp]() { goto ok74 } if !p.rules[ruleTicks3]() { goto ok74 } goto out54 ok74: position = position10 } { if position == len(p.Buffer) { goto out54 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto out54 } if !p.rules[ruleBlankLine]() { goto ok76 } goto out54 ok76: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto out54 } default: goto out54 } } } } ok66: goto loop53 out54: position = position8 } end = position if !p.rules[ruleSp]() { goto nextAlt52 } if !p.rules[ruleTicks3]() { goto nextAlt52 } goto ok nextAlt52: position = position1 if !p.rules[ruleTicks4]() { goto nextAlt77 } if !p.rules[ruleSp]() { goto nextAlt77 } begin = position if peekChar('`') { goto nextAlt81 } if !p.rules[ruleNonspacechar]() { goto nextAlt81 } loop82: if peekChar('`') { goto out83 } if !p.rules[ruleNonspacechar]() { goto out83 } goto loop82 out83: goto ok80 nextAlt81: { if position == len(p.Buffer) { goto nextAlt77 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks4]() { goto ok85 } goto nextAlt77 ok85: if !matchChar('`') { goto nextAlt77 } loop86: if !matchChar('`') { goto out87 } goto loop86 out87: break default: { position11 := position if !p.rules[ruleSp]() { goto ok88 } if !p.rules[ruleTicks4]() { goto ok88 } goto nextAlt77 ok88: position = position11 } { if position == len(p.Buffer) { goto nextAlt77 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto nextAlt77 } if !p.rules[ruleBlankLine]() { goto ok90 } goto nextAlt77 ok90: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto nextAlt77 } default: goto nextAlt77 } } } } ok80: loop78: { position11 := position if peekChar('`') { goto nextAlt92 } if !p.rules[ruleNonspacechar]() { goto nextAlt92 } loop93: if peekChar('`') { goto out94 } if !p.rules[ruleNonspacechar]() { goto out94 } goto loop93 out94: goto ok91 nextAlt92: { if position == len(p.Buffer) { goto out79 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks4]() { goto ok96 } goto out79 ok96: if !matchChar('`') { goto out79 } loop97: if !matchChar('`') { goto out98 } goto loop97 out98: break default: { position13 := position if !p.rules[ruleSp]() { goto ok99 } if !p.rules[ruleTicks4]() { goto ok99 } goto out79 ok99: position = position13 } { if position == len(p.Buffer) { goto out79 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto out79 } if !p.rules[ruleBlankLine]() { goto ok101 } goto out79 ok101: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto out79 } default: goto out79 } } } } ok91: goto loop78 out79: position = position11 } end = position if !p.rules[ruleSp]() { goto nextAlt77 } if !p.rules[ruleTicks4]() { goto nextAlt77 } goto ok nextAlt77: position = position1 if !p.rules[ruleTicks5]() { goto ko } if !p.rules[ruleSp]() { goto ko } begin = position if peekChar('`') { goto nextAlt105 } if !p.rules[ruleNonspacechar]() { goto nextAlt105 } loop106: if peekChar('`') { goto out107 } if !p.rules[ruleNonspacechar]() { goto out107 } goto loop106 out107: goto ok104 nextAlt105: { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks5]() { goto ok109 } goto ko ok109: if !matchChar('`') { goto ko } loop110: if !matchChar('`') { goto out111 } goto loop110 out111: break default: { position14 := position if !p.rules[ruleSp]() { goto ok112 } if !p.rules[ruleTicks5]() { goto ok112 } goto ko ok112: position = position14 } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto ko } if !p.rules[ruleBlankLine]() { goto ok114 } goto ko ok114: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto ko } default: goto ko } } } } ok104: loop102: { position14 := position if peekChar('`') { goto nextAlt116 } if !p.rules[ruleNonspacechar]() { goto nextAlt116 } loop117: if peekChar('`') { goto out118 } if !p.rules[ruleNonspacechar]() { goto out118 } goto loop117 out118: goto ok115 nextAlt116: { if position == len(p.Buffer) { goto out103 } switch p.Buffer[position] { case '`': if !p.rules[ruleTicks5]() { goto ok120 } goto out103 ok120: if !matchChar('`') { goto out103 } loop121: if !matchChar('`') { goto out122 } goto loop121 out122: break default: { position16 := position if !p.rules[ruleSp]() { goto ok123 } if !p.rules[ruleTicks5]() { goto ok123 } goto out103 ok123: position = position16 } { if position == len(p.Buffer) { goto out103 } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto out103 } if !p.rules[ruleBlankLine]() { goto ok125 } goto out103 ok125: break case '\t', ' ': if !p.rules[ruleSpacechar]() { goto out103 } default: goto out103 } } } } ok115: goto loop102 out103: position = position14 } end = position if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleTicks5]() { goto ko } } ok: do(87) match = true return ko: position = position0 return }, /* 196 RawHtml <- (< (HtmlComment / HtmlBlockScript / HtmlTag) > { if p.extension.FilterHTML { yy = p.mkList(LIST, nil) } else { yy = p.mkString(yytext) yy.key = HTML } }) */ func() (match bool) { position0 := position begin = position if !p.rules[ruleHtmlComment]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleHtmlBlockScript]() { goto nextAlt3 } goto ok nextAlt3: if !p.rules[ruleHtmlTag]() { goto ko } ok: end = position do(88) match = true return ko: position = position0 return }, /* 197 BlankLine <- (Sp Newline) */ func() (match bool) { position0 := position if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } match = true return ko: position = position0 return }, /* 198 Quoted <- ((&[\'] ('\'' (!'\'' .)* '\'')) | (&[\"] ('"' (!'"' .)* '"'))) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '\'': position++ // matchChar loop: if position == len(p.Buffer) { goto out } switch p.Buffer[position] { case '\'': goto out default: position++ } goto loop out: if !matchChar('\'') { goto ko } case '"': position++ // matchChar loop4: if position == len(p.Buffer) { goto out5 } switch p.Buffer[position] { case '"': goto out5 default: position++ } goto loop4 out5: if !matchChar('"') { goto ko } default: goto ko } } match = true return ko: position = position0 return }, /* 199 HtmlAttribute <- (((&[\-] '-') | (&[0-9A-Za-z] [A-Za-z0-9]))+ Spnl ('=' Spnl (Quoted / (!'>' Nonspacechar)+))? Spnl) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '-': position++ // matchChar default: if !matchClass(5) { goto ko } } } loop: { if position == len(p.Buffer) { goto out } switch p.Buffer[position] { case '-': position++ // matchChar default: if !matchClass(5) { goto out } } } goto loop out: if !p.rules[ruleSpnl]() { goto ko } { position1 := position if !matchChar('=') { goto ko5 } if !p.rules[ruleSpnl]() { goto ko5 } if !p.rules[ruleQuoted]() { goto nextAlt } goto ok7 nextAlt: if peekChar('>') { goto ko5 } if !p.rules[ruleNonspacechar]() { goto ko5 } loop9: if peekChar('>') { goto out10 } if !p.rules[ruleNonspacechar]() { goto out10 } goto loop9 out10: ok7: goto ok6 ko5: position = position1 } ok6: if !p.rules[ruleSpnl]() { goto ko } match = true return ko: position = position0 return }, /* 200 HtmlComment <- ('' .)* '-->') */ func() (match bool) { position0 := position if !matchString("") { goto ok } goto out ok: if !matchDot() { goto out } goto loop out: position = position1 } if !matchString("-->") { goto ko } match = true return ko: position = position0 return }, /* 201 HtmlTag <- ('<' Spnl '/'? [A-Za-z0-9]+ Spnl HtmlAttribute* '/'? Spnl '>') */ func() (match bool) { position0 := position if !matchChar('<') { goto ko } if !p.rules[ruleSpnl]() { goto ko } matchChar('/') if !matchClass(5) { goto ko } loop: if !matchClass(5) { goto out } goto loop out: if !p.rules[ruleSpnl]() { goto ko } loop3: if !p.rules[ruleHtmlAttribute]() { goto out4 } goto loop3 out4: matchChar('/') if !p.rules[ruleSpnl]() { goto ko } if !matchChar('>') { goto ko } match = true return ko: position = position0 return }, /* 202 Eof <- !. */ func() (match bool) { if position < len(p.Buffer) { return } match = true return }, /* 203 Spacechar <- ((&[\t] '\t') | (&[ ] ' ')) */ func() (match bool) { { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '\t': position++ // matchChar case ' ': position++ // matchChar default: return } } match = true return }, /* 204 Nonspacechar <- (!Spacechar !Newline .) */ func() (match bool) { position0 := position if !p.rules[ruleSpacechar]() { goto ok } goto ko ok: if !p.rules[ruleNewline]() { goto ok2 } goto ko ok2: if !matchDot() { goto ko } match = true return ko: position = position0 return }, /* 205 Newline <- ((&[\r] ('\r' '\n'?)) | (&[\n] '\n')) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '\r': position++ // matchChar matchChar('\n') case '\n': position++ // matchChar default: goto ko } } match = true return ko: position = position0 return }, /* 206 Sp <- Spacechar* */ func() (match bool) { loop: if !p.rules[ruleSpacechar]() { goto out } goto loop out: match = true return }, /* 207 Spnl <- (Sp (Newline Sp)?) */ func() (match bool) { position0 := position if !p.rules[ruleSp]() { goto ko } { position1 := position if !p.rules[ruleNewline]() { goto ko1 } if !p.rules[ruleSp]() { goto ko1 } goto ok ko1: position = position1 } ok: match = true return ko: position = position0 return }, /* 208 SpecialChar <- ('\'' / '"' / ((&[\\] '\\') | (&[#] '#') | (&[!] '!') | (&[<] '<') | (&[)] ')') | (&[(] '(') | (&[\]] ']') | (&[\[] '[') | (&[&] '&') | (&[`] '`') | (&[_] '_') | (&[*] '*') | (&[~] '~') | (&[\"\'\-.^] ExtendedSpecialChar))) */ func() (match bool) { if !matchChar('\'') { goto nextAlt } goto ok nextAlt: if !matchChar('"') { goto nextAlt3 } goto ok nextAlt3: { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '\\': position++ // matchChar case '#': position++ // matchChar case '!': position++ // matchChar case '<': position++ // matchChar case ')': position++ // matchChar case '(': position++ // matchChar case ']': position++ // matchChar case '[': position++ // matchChar case '&': position++ // matchChar case '`': position++ // matchChar case '_': position++ // matchChar case '*': position++ // matchChar case '~': position++ // matchChar default: if !p.rules[ruleExtendedSpecialChar]() { return } } } ok: match = true return }, /* 209 NormalChar <- (!((&[\n\r] Newline) | (&[\t ] Spacechar) | (&[!-#&-*\-.<\[-`~] SpecialChar)) .) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } case '\t', ' ': if !p.rules[ruleSpacechar]() { goto ok } default: if !p.rules[ruleSpecialChar]() { goto ok } } } goto ko ok: if !matchDot() { goto ko } match = true return ko: position = position0 return }, /* 210 Alphanumeric <- ((&[\377] '\377') | (&[\376] '\376') | (&[\375] '\375') | (&[\374] '\374') | (&[\373] '\373') | (&[\372] '\372') | (&[\371] '\371') | (&[\370] '\370') | (&[\367] '\367') | (&[\366] '\366') | (&[\365] '\365') | (&[\364] '\364') | (&[\363] '\363') | (&[\362] '\362') | (&[\361] '\361') | (&[\360] '\360') | (&[\357] '\357') | (&[\356] '\356') | (&[\355] '\355') | (&[\354] '\354') | (&[\353] '\353') | (&[\352] '\352') | (&[\351] '\351') | (&[\350] '\350') | (&[\347] '\347') | (&[\346] '\346') | (&[\345] '\345') | (&[\344] '\344') | (&[\343] '\343') | (&[\342] '\342') | (&[\341] '\341') | (&[\340] '\340') | (&[\337] '\337') | (&[\336] '\336') | (&[\335] '\335') | (&[\334] '\334') | (&[\333] '\333') | (&[\332] '\332') | (&[\331] '\331') | (&[\330] '\330') | (&[\327] '\327') | (&[\326] '\326') | (&[\325] '\325') | (&[\324] '\324') | (&[\323] '\323') | (&[\322] '\322') | (&[\321] '\321') | (&[\320] '\320') | (&[\317] '\317') | (&[\316] '\316') | (&[\315] '\315') | (&[\314] '\314') | (&[\313] '\313') | (&[\312] '\312') | (&[\311] '\311') | (&[\310] '\310') | (&[\307] '\307') | (&[\306] '\306') | (&[\305] '\305') | (&[\304] '\304') | (&[\303] '\303') | (&[\302] '\302') | (&[\301] '\301') | (&[\300] '\300') | (&[\277] '\277') | (&[\276] '\276') | (&[\275] '\275') | (&[\274] '\274') | (&[\273] '\273') | (&[\272] '\272') | (&[\271] '\271') | (&[\270] '\270') | (&[\267] '\267') | (&[\266] '\266') | (&[\265] '\265') | (&[\264] '\264') | (&[\263] '\263') | (&[\262] '\262') | (&[\261] '\261') | (&[\260] '\260') | (&[\257] '\257') | (&[\256] '\256') | (&[\255] '\255') | (&[\254] '\254') | (&[\253] '\253') | (&[\252] '\252') | (&[\251] '\251') | (&[\250] '\250') | (&[\247] '\247') | (&[\246] '\246') | (&[\245] '\245') | (&[\244] '\244') | (&[\243] '\243') | (&[\242] '\242') | (&[\241] '\241') | (&[\240] '\240') | (&[\237] '\237') | (&[\236] '\236') | (&[\235] '\235') | (&[\234] '\234') | (&[\233] '\233') | (&[\232] '\232') | (&[\231] '\231') | (&[\230] '\230') | (&[\227] '\227') | (&[\226] '\226') | (&[\225] '\225') | (&[\224] '\224') | (&[\223] '\223') | (&[\222] '\222') | (&[\221] '\221') | (&[\220] '\220') | (&[\217] '\217') | (&[\216] '\216') | (&[\215] '\215') | (&[\214] '\214') | (&[\213] '\213') | (&[\212] '\212') | (&[\211] '\211') | (&[\210] '\210') | (&[\207] '\207') | (&[\206] '\206') | (&[\205] '\205') | (&[\204] '\204') | (&[\203] '\203') | (&[\202] '\202') | (&[\201] '\201') | (&[\200] '\200') | (&[0-9A-Za-z] [0-9A-Za-z])) */ func() (match bool) { { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '\377': position++ // matchChar case '\376': position++ // matchChar case '\375': position++ // matchChar case '\374': position++ // matchChar case '\373': position++ // matchChar case '\372': position++ // matchChar case '\371': position++ // matchChar case '\370': position++ // matchChar case '\367': position++ // matchChar case '\366': position++ // matchChar case '\365': position++ // matchChar case '\364': position++ // matchChar case '\363': position++ // matchChar case '\362': position++ // matchChar case '\361': position++ // matchChar case '\360': position++ // matchChar case '\357': position++ // matchChar case '\356': position++ // matchChar case '\355': position++ // matchChar case '\354': position++ // matchChar case '\353': position++ // matchChar case '\352': position++ // matchChar case '\351': position++ // matchChar case '\350': position++ // matchChar case '\347': position++ // matchChar case '\346': position++ // matchChar case '\345': position++ // matchChar case '\344': position++ // matchChar case '\343': position++ // matchChar case '\342': position++ // matchChar case '\341': position++ // matchChar case '\340': position++ // matchChar case '\337': position++ // matchChar case '\336': position++ // matchChar case '\335': position++ // matchChar case '\334': position++ // matchChar case '\333': position++ // matchChar case '\332': position++ // matchChar case '\331': position++ // matchChar case '\330': position++ // matchChar case '\327': position++ // matchChar case '\326': position++ // matchChar case '\325': position++ // matchChar case '\324': position++ // matchChar case '\323': position++ // matchChar case '\322': position++ // matchChar case '\321': position++ // matchChar case '\320': position++ // matchChar case '\317': position++ // matchChar case '\316': position++ // matchChar case '\315': position++ // matchChar case '\314': position++ // matchChar case '\313': position++ // matchChar case '\312': position++ // matchChar case '\311': position++ // matchChar case '\310': position++ // matchChar case '\307': position++ // matchChar case '\306': position++ // matchChar case '\305': position++ // matchChar case '\304': position++ // matchChar case '\303': position++ // matchChar case '\302': position++ // matchChar case '\301': position++ // matchChar case '\300': position++ // matchChar case '\277': position++ // matchChar case '\276': position++ // matchChar case '\275': position++ // matchChar case '\274': position++ // matchChar case '\273': position++ // matchChar case '\272': position++ // matchChar case '\271': position++ // matchChar case '\270': position++ // matchChar case '\267': position++ // matchChar case '\266': position++ // matchChar case '\265': position++ // matchChar case '\264': position++ // matchChar case '\263': position++ // matchChar case '\262': position++ // matchChar case '\261': position++ // matchChar case '\260': position++ // matchChar case '\257': position++ // matchChar case '\256': position++ // matchChar case '\255': position++ // matchChar case '\254': position++ // matchChar case '\253': position++ // matchChar case '\252': position++ // matchChar case '\251': position++ // matchChar case '\250': position++ // matchChar case '\247': position++ // matchChar case '\246': position++ // matchChar case '\245': position++ // matchChar case '\244': position++ // matchChar case '\243': position++ // matchChar case '\242': position++ // matchChar case '\241': position++ // matchChar case '\240': position++ // matchChar case '\237': position++ // matchChar case '\236': position++ // matchChar case '\235': position++ // matchChar case '\234': position++ // matchChar case '\233': position++ // matchChar case '\232': position++ // matchChar case '\231': position++ // matchChar case '\230': position++ // matchChar case '\227': position++ // matchChar case '\226': position++ // matchChar case '\225': position++ // matchChar case '\224': position++ // matchChar case '\223': position++ // matchChar case '\222': position++ // matchChar case '\221': position++ // matchChar case '\220': position++ // matchChar case '\217': position++ // matchChar case '\216': position++ // matchChar case '\215': position++ // matchChar case '\214': position++ // matchChar case '\213': position++ // matchChar case '\212': position++ // matchChar case '\211': position++ // matchChar case '\210': position++ // matchChar case '\207': position++ // matchChar case '\206': position++ // matchChar case '\205': position++ // matchChar case '\204': position++ // matchChar case '\203': position++ // matchChar case '\202': position++ // matchChar case '\201': position++ // matchChar case '\200': position++ // matchChar default: if !matchClass(4) { return } } } match = true return }, /* 211 AlphanumericAscii <- [A-Za-z0-9] */ func() (match bool) { if !matchClass(5) { return } match = true return }, /* 212 Digit <- [0-9] */ func() (match bool) { if !matchClass(0) { return } match = true return }, /* 213 HexEntity <- (< '&' '#' [Xx] [0-9a-fA-F]+ ';' >) */ func() (match bool) { position0 := position begin = position if !matchChar('&') { goto ko } if !matchChar('#') { goto ko } if !matchClass(6) { goto ko } if !matchClass(7) { goto ko } loop: if !matchClass(7) { goto out } goto loop out: if !matchChar(';') { goto ko } end = position match = true return ko: position = position0 return }, /* 214 DecEntity <- (< '&' '#' [0-9]+ > ';' >) */ func() (match bool) { position0 := position begin = position if !matchChar('&') { goto ko } if !matchChar('#') { goto ko } if !matchClass(0) { goto ko } loop: if !matchClass(0) { goto out } goto loop out: end = position if !matchChar(';') { goto ko } end = position match = true return ko: position = position0 return }, /* 215 CharEntity <- (< '&' [A-Za-z0-9]+ ';' >) */ func() (match bool) { position0 := position begin = position if !matchChar('&') { goto ko } if !matchClass(5) { goto ko } loop: if !matchClass(5) { goto out } goto loop out: if !matchChar(';') { goto ko } end = position match = true return ko: position = position0 return }, /* 216 NonindentSpace <- (' ' / ' ' / ' ' / '') */ func() (match bool) { if !matchString(" ") { goto nextAlt } goto ok nextAlt: if !matchString(" ") { goto nextAlt3 } goto ok nextAlt3: if !matchChar(' ') { goto nextAlt4 } goto ok nextAlt4: ok: match = true return }, /* 217 Indent <- ((&[ ] ' ') | (&[\t] '\t')) */ func() (match bool) { { if position == len(p.Buffer) { return } switch p.Buffer[position] { case ' ': position++ if !matchString(" ") { return } case '\t': position++ // matchChar default: return } } match = true return }, /* 218 IndentedLine <- (Indent Line) */ func() (match bool) { position0 := position if !p.rules[ruleIndent]() { goto ko } if !p.rules[ruleLine]() { goto ko } match = true return ko: position = position0 return }, /* 219 OptionallyIndentedLine <- (Indent? Line) */ func() (match bool) { position0 := position if !p.rules[ruleIndent]() { goto ko1 } ko1: if !p.rules[ruleLine]() { goto ko } match = true return ko: position = position0 return }, /* 220 StartList <- (&. { yy = nil }) */ func() (match bool) { if !(position < len(p.Buffer)) { return } do(89) match = true return }, /* 221 Line <- (RawLine { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position if !p.rules[ruleRawLine]() { goto ko } do(90) match = true return ko: position = position0 return }, /* 222 RawLine <- ((< (!'\r' !'\n' .)* Newline >) / (< .+ > !.)) */ func() (match bool) { position0 := position { position1 := position begin = position loop: if position == len(p.Buffer) { goto out } switch p.Buffer[position] { case '\r', '\n': goto out default: position++ } goto loop out: if !p.rules[ruleNewline]() { goto nextAlt } end = position goto ok nextAlt: position = position1 begin = position if !matchDot() { goto ko } loop5: if !matchDot() { goto out6 } goto loop5 out6: end = position if position < len(p.Buffer) { goto ko } } ok: match = true return ko: position = position0 return }, /* 223 SkipBlock <- (HtmlBlock / ((!'#' !SetextBottom1 !SetextBottom2 !BlankLine RawLine)+ BlankLine*) / BlankLine+ / RawLine) */ func() (match bool) { position0 := position { position1 := position if !p.rules[ruleHtmlBlock]() { goto nextAlt } goto ok nextAlt: if peekChar('#') { goto nextAlt3 } if !p.rules[ruleSetextBottom1]() { goto ok6 } goto nextAlt3 ok6: if !p.rules[ruleSetextBottom2]() { goto ok7 } goto nextAlt3 ok7: if !p.rules[ruleBlankLine]() { goto ok8 } goto nextAlt3 ok8: if !p.rules[ruleRawLine]() { goto nextAlt3 } loop: { position2 := position if peekChar('#') { goto out } if !p.rules[ruleSetextBottom1]() { goto ok9 } goto out ok9: if !p.rules[ruleSetextBottom2]() { goto ok10 } goto out ok10: if !p.rules[ruleBlankLine]() { goto ok11 } goto out ok11: if !p.rules[ruleRawLine]() { goto out } goto loop out: position = position2 } loop12: if !p.rules[ruleBlankLine]() { goto out13 } goto loop12 out13: goto ok nextAlt3: position = position1 if !p.rules[ruleBlankLine]() { goto nextAlt14 } loop15: if !p.rules[ruleBlankLine]() { goto out16 } goto loop15 out16: goto ok nextAlt14: position = position1 if !p.rules[ruleRawLine]() { goto ko } } ok: match = true return ko: position = position0 return }, /* 224 ExtendedSpecialChar <- ((&[^] (&{p.extension.Notes} '^')) | (&[\"\'\-.] (&{p.extension.Smart} ((&[\"] '"') | (&[\'] '\'') | (&[\-] '-') | (&[.] '.'))))) */ func() (match bool) { position0 := position { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '^': if !(p.extension.Notes) { goto ko } if !matchChar('^') { goto ko } default: if !(p.extension.Smart) { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '"': position++ // matchChar case '\'': position++ // matchChar case '-': position++ // matchChar case '.': position++ // matchChar default: goto ko } } } } match = true return ko: position = position0 return }, /* 225 Smart <- (&{p.extension.Smart} (SingleQuoted / ((&[\'] Apostrophe) | (&[\"] DoubleQuoted) | (&[\-] Dash) | (&[.] Ellipsis)))) */ func() (match bool) { if !(p.extension.Smart) { return } if !p.rules[ruleSingleQuoted]() { goto nextAlt } goto ok nextAlt: { if position == len(p.Buffer) { return } switch p.Buffer[position] { case '\'': if !p.rules[ruleApostrophe]() { return } case '"': if !p.rules[ruleDoubleQuoted]() { return } case '-': if !p.rules[ruleDash]() { return } case '.': if !p.rules[ruleEllipsis]() { return } default: return } } ok: match = true return }, /* 226 Apostrophe <- ('\'' { yy = p.mkElem(APOSTROPHE) }) */ func() (match bool) { position0 := position if !matchChar('\'') { goto ko } do(91) match = true return ko: position = position0 return }, /* 227 Ellipsis <- (('...' / '. . .') { yy = p.mkElem(ELLIPSIS) }) */ func() (match bool) { position0 := position if !matchString("...") { goto nextAlt } goto ok nextAlt: if !matchString(". . .") { goto ko } ok: do(92) match = true return ko: position = position0 return }, /* 228 Dash <- (EmDash / EnDash) */ func() (match bool) { if !p.rules[ruleEmDash]() { goto nextAlt } goto ok nextAlt: if !p.rules[ruleEnDash]() { return } ok: match = true return }, /* 229 EnDash <- ('-' &[0-9] { yy = p.mkElem(ENDASH) }) */ func() (match bool) { position0 := position if !matchChar('-') { goto ko } if !peekClass(0) { goto ko } do(93) match = true return ko: position = position0 return }, /* 230 EmDash <- (('---' / '--') { yy = p.mkElem(EMDASH) }) */ func() (match bool) { position0 := position if !matchString("---") { goto nextAlt } goto ok nextAlt: if !matchString("--") { goto ko } ok: do(94) match = true return ko: position = position0 return }, /* 231 SingleQuoteStart <- ('\'' !((&[\n\r] Newline) | (&[\t ] Spacechar))) */ func() (match bool) { position0 := position if !matchChar('\'') { goto ko } { if position == len(p.Buffer) { goto ok } switch p.Buffer[position] { case '\n', '\r': if !p.rules[ruleNewline]() { goto ok } case '\t', ' ': if !p.rules[ruleSpacechar]() { goto ok } default: goto ok } } goto ko ok: match = true return ko: position = position0 return }, /* 232 SingleQuoteEnd <- ('\'' !Alphanumeric) */ func() (match bool) { position0 := position if !matchChar('\'') { goto ko } if !p.rules[ruleAlphanumeric]() { goto ok } goto ko ok: match = true return ko: position = position0 return }, /* 233 SingleQuoted <- (SingleQuoteStart StartList (!SingleQuoteEnd Inline { a = cons(b, a) })+ SingleQuoteEnd { yy = p.mkList(SINGLEQUOTED, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleSingleQuoteStart]() { goto ko } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleSingleQuoteEnd]() { goto ok } goto ko ok: if !p.rules[ruleInline]() { goto ko } doarg(yySet, -2) do(95) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleSingleQuoteEnd]() { goto ok4 } goto out ok4: if !p.rules[ruleInline]() { goto out } doarg(yySet, -2) do(95) goto loop out: position, thunkPosition = position1, thunkPosition1 } if !p.rules[ruleSingleQuoteEnd]() { goto ko } do(96) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 234 DoubleQuoteStart <- '"' */ func() (match bool) { if !matchChar('"') { return } match = true return }, /* 235 DoubleQuoteEnd <- '"' */ func() (match bool) { if !matchChar('"') { return } match = true return }, /* 236 DoubleQuoted <- ('"' StartList (!'"' Inline { a = cons(b, a) })+ '"' { yy = p.mkList(DOUBLEQUOTED, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !matchChar('"') { goto ko } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if peekChar('"') { goto ko } if !p.rules[ruleInline]() { goto ko } doarg(yySet, -2) do(97) loop: { position1, thunkPosition1 := position, thunkPosition if peekChar('"') { goto out } if !p.rules[ruleInline]() { goto out } doarg(yySet, -2) do(97) goto loop out: position, thunkPosition = position1, thunkPosition1 } if !matchChar('"') { goto ko } do(98) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 237 NoteReference <- (&{p.extension.Notes} RawNoteReference { if match, ok := p.find_note(ref.contents.str); ok { yy = p.mkElem(NOTE) yy.children = match.children yy.contents.str = "" } else { yy = p.mkString("[^"+ref.contents.str+"]") } }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !(p.extension.Notes) { goto ko } if !p.rules[ruleRawNoteReference]() { goto ko } doarg(yySet, -1) do(99) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 238 RawNoteReference <- ('[^' < (!Newline !']' .)+ > ']' { yy = p.mkString(yytext) }) */ func() (match bool) { position0 := position if !matchString("[^") { goto ko } begin = position if !p.rules[ruleNewline]() { goto ok } goto ko ok: if peekChar(']') { goto ko } if !matchDot() { goto ko } loop: { position1 := position if !p.rules[ruleNewline]() { goto ok4 } goto out ok4: if peekChar(']') { goto out } if !matchDot() { goto out } goto loop out: position = position1 } end = position if !matchChar(']') { goto ko } do(100) match = true return ko: position = position0 return }, /* 239 Note <- (&{p.extension.Notes} NonindentSpace RawNoteReference ':' Sp StartList (RawNoteBlock { a = cons(yy, a) }) (&Indent RawNoteBlock { a = cons(yy, a) })* { yy = p.mkList(NOTE, a) yy.contents.str = ref.contents.str }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !(p.extension.Notes) { goto ko } if !p.rules[ruleNonindentSpace]() { goto ko } if !p.rules[ruleRawNoteReference]() { goto ko } doarg(yySet, -1) if !matchChar(':') { goto ko } if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -2) if !p.rules[ruleRawNoteBlock]() { goto ko } do(101) loop: { position1, thunkPosition1 := position, thunkPosition { position2 := position if !p.rules[ruleIndent]() { goto out } position = position2 } if !p.rules[ruleRawNoteBlock]() { goto out } do(102) goto loop out: position, thunkPosition = position1, thunkPosition1 } do(103) doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 240 InlineNote <- (&{p.extension.Notes} '^[' StartList (!']' Inline { a = cons(yy, a) })+ ']' { yy = p.mkList(NOTE, a) yy.contents.str = "" }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !(p.extension.Notes) { goto ko } if !matchString("^[") { goto ko } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if peekChar(']') { goto ko } if !p.rules[ruleInline]() { goto ko } do(104) loop: { position1 := position if peekChar(']') { goto out } if !p.rules[ruleInline]() { goto out } do(104) goto loop out: position = position1 } if !matchChar(']') { goto ko } do(105) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 241 Notes <- (StartList ((Note { a = cons(b, a) }) / SkipBlock)* { p.notes = reverse(a) } commit) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 2) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) loop: { position1, thunkPosition1 := position, thunkPosition { position2, thunkPosition2 := position, thunkPosition if !p.rules[ruleNote]() { goto nextAlt } doarg(yySet, -2) do(106) goto ok nextAlt: position, thunkPosition = position2, thunkPosition2 if !p.rules[ruleSkipBlock]() { goto out } } ok: goto loop out: position, thunkPosition = position1, thunkPosition1 } do(107) if !(p.commit(thunkPosition0)) { goto ko } doarg(yyPop, 2) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 242 RawNoteBlock <- (StartList (!BlankLine OptionallyIndentedLine { a = cons(yy, a) })+ (< BlankLine* > { a = cons(p.mkString(yytext), a) }) { yy = p.mkStringFromList(a, true) yy.key = RAW }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleBlankLine]() { goto ok } goto ko ok: if !p.rules[ruleOptionallyIndentedLine]() { goto ko } do(108) loop: { position1 := position if !p.rules[ruleBlankLine]() { goto ok4 } goto out ok4: if !p.rules[ruleOptionallyIndentedLine]() { goto out } do(108) goto loop out: position = position1 } begin = position loop5: if !p.rules[ruleBlankLine]() { goto out6 } goto loop5 out6: end = position do(109) do(110) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 243 DefinitionList <- (&{p.extension.Dlists} StartList (Definition { a = cons(yy, a) })+ { yy = p.mkList(DEFINITIONLIST, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !(p.extension.Dlists) { goto ko } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleDefinition]() { goto ko } do(111) loop: { position1, thunkPosition1 := position, thunkPosition if !p.rules[ruleDefinition]() { goto out } do(111) goto loop out: position, thunkPosition = position1, thunkPosition1 } do(112) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 244 Definition <- (&(NonindentSpace !Defmark Nonspacechar RawLine BlankLine? Defmark) StartList (DListTitle { a = cons(yy, a) })+ (DefTight / DefLoose) { for e := yy.children; e != nil; e = e.next { e.key = DEFDATA } a = cons(yy, a) } { yy = p.mkList(LIST, a) }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) { position1 := position if !p.rules[ruleNonindentSpace]() { goto ko } if !p.rules[ruleDefmark]() { goto ok } goto ko ok: if !p.rules[ruleNonspacechar]() { goto ko } if !p.rules[ruleRawLine]() { goto ko } if !p.rules[ruleBlankLine]() { goto ko3 } ko3: if !p.rules[ruleDefmark]() { goto ko } position = position1 } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleDListTitle]() { goto ko } do(113) loop: { position2, thunkPosition2 := position, thunkPosition if !p.rules[ruleDListTitle]() { goto out } do(113) goto loop out: position, thunkPosition = position2, thunkPosition2 } if !p.rules[ruleDefTight]() { goto nextAlt } goto ok7 nextAlt: if !p.rules[ruleDefLoose]() { goto ko } ok7: do(114) do(115) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 245 DListTitle <- (NonindentSpace !Defmark &Nonspacechar StartList (!Endline Inline { a = cons(yy, a) })+ Sp Newline { yy = p.mkList(LIST, a) yy.key = DEFTITLE }) */ func() (match bool) { position0, thunkPosition0 := position, thunkPosition doarg(yyPush, 1) if !p.rules[ruleNonindentSpace]() { goto ko } if !p.rules[ruleDefmark]() { goto ok } goto ko ok: { position1 := position if !p.rules[ruleNonspacechar]() { goto ko } position = position1 } if !p.rules[ruleStartList]() { goto ko } doarg(yySet, -1) if !p.rules[ruleEndline]() { goto ok5 } goto ko ok5: if !p.rules[ruleInline]() { goto ko } do(116) loop: { position2 := position if !p.rules[ruleEndline]() { goto ok6 } goto out ok6: if !p.rules[ruleInline]() { goto out } do(116) goto loop out: position = position2 } if !p.rules[ruleSp]() { goto ko } if !p.rules[ruleNewline]() { goto ko } do(117) doarg(yyPop, 1) match = true return ko: position, thunkPosition = position0, thunkPosition0 return }, /* 246 DefTight <- (&Defmark ListTight) */ func() (match bool) { { position1 := position if !p.rules[ruleDefmark]() { return } position = position1 } if !p.rules[ruleListTight]() { return } match = true return }, /* 247 DefLoose <- (BlankLine &Defmark ListLoose) */ func() (match bool) { position0 := position if !p.rules[ruleBlankLine]() { goto ko } { position1 := position if !p.rules[ruleDefmark]() { goto ko } position = position1 } if !p.rules[ruleListLoose]() { goto ko } match = true return ko: position = position0 return }, /* 248 Defmark <- (NonindentSpace ((&[~] '~') | (&[:] ':')) Spacechar+) */ func() (match bool) { position0 := position if !p.rules[ruleNonindentSpace]() { goto ko } { if position == len(p.Buffer) { goto ko } switch p.Buffer[position] { case '~': position++ // matchChar case ':': position++ // matchChar default: goto ko } } if !p.rules[ruleSpacechar]() { goto ko } loop: if !p.rules[ruleSpacechar]() { goto out } goto loop out: match = true return ko: position = position0 return }, /* 249 DefMarker <- (&{p.extension.Dlists} Defmark) */ func() (match bool) { if !(p.extension.Dlists) { return } if !p.rules[ruleDefmark]() { return } match = true return }, nil, } } /* * List manipulation functions */ /* cons - cons an element onto a list, returning pointer to new head */ func cons(new, list *element) *element { new.next = list return new } /* reverse - reverse a list, returning pointer to new list */ func reverse(list *element) (new *element) { for list != nil { next := list.next new = cons(list, new) list = next } return } /* * Auxiliary functions for parsing actions. * These make it easier to build up data structures (including lists) * in the parsing actions. */ /* p.mkElem - generic constructor for element */ func (p *yyParser) mkElem(key int) *element { r := p.state.heap.row if len(r) == 0 { r = p.state.heap.nextRow() } e := &r[0] *e = element{} p.state.heap.row = r[1:] e.key = key return e } /* p.mkString - constructor for STR element */ func (p *yyParser) mkString(s string) (result *element) { result = p.mkElem(STR) result.contents.str = s return } /* p.mkStringFromList - makes STR element by concatenating a * reversed list of strings, adding optional extra newline */ func (p *yyParser) mkStringFromList(list *element, extra_newline bool) (result *element) { s := "" for list = reverse(list); list != nil; list = list.next { s += list.contents.str } if extra_newline { s += "\n" } result = p.mkElem(STR) result.contents.str = s return } /* p.mkList - makes new list with key 'key' and children the reverse of 'lst'. * This is designed to be used with cons to build lists in a parser action. * The reversing is necessary because cons adds to the head of a list. */ func (p *yyParser) mkList(key int, lst *element) (el *element) { el = p.mkElem(key) el.children = reverse(lst) return } /* p.mkLink - constructor for LINK element */ func (p *yyParser) mkLink(label *element, url, title string) (el *element) { el = p.mkElem(LINK) el.contents.link = &link{label: label, url: url, title: title} return } /* match_inlines - returns true if inline lists match (case-insensitive...) */ func match_inlines(l1, l2 *element) bool { for l1 != nil && l2 != nil { if l1.key != l2.key { return false } switch l1.key { case SPACE, LINEBREAK, ELLIPSIS, EMDASH, ENDASH, APOSTROPHE: break case CODE, STR, HTML: if strings.ToUpper(l1.contents.str) != strings.ToUpper(l2.contents.str) { return false } case EMPH, STRONG, LIST, SINGLEQUOTED, DOUBLEQUOTED: if !match_inlines(l1.children, l2.children) { return false } case LINK, IMAGE: return false /* No links or images within links */ default: log.Fatalf("match_inlines encountered unknown key = %d\n", l1.key) } l1 = l1.next l2 = l2.next } return l1 == nil && l2 == nil /* return true if both lists exhausted */ } /* find_reference - return true if link found in references matching label. * 'link' is modified with the matching url and title. */ func (p *yyParser) findReference(label *element) (*link, bool) { for cur := p.references; cur != nil; cur = cur.next { l := cur.contents.link if match_inlines(label, l.label) { return l, true } } return nil, false } /* find_note - return true if note found in notes matching label. * if found, 'result' is set to point to matched note. */ func (p *yyParser) find_note(label string) (*element, bool) { for el := p.notes; el != nil; el = el.next { if label == el.contents.str { return el, true } } return nil, false } /* print tree of elements, for debugging only. */ func print_tree(w io.Writer, elt *element, indent int) { var key string for elt != nil { for i := 0; i < indent; i++ { fmt.Fprint(w, "\t") } key = keynames[elt.key] if key == "" { key = "?" } if elt.key == STR { fmt.Fprintf(w, "%p:\t%s\t'%s'\n", elt, key, elt.contents.str) } else { fmt.Fprintf(w, "%p:\t%s %p\n", elt, key, elt.next) } if elt.children != nil { print_tree(w, elt.children, indent+1) } elt = elt.next } } var keynames = [numVAL]string{ LIST: "LIST", RAW: "RAW", SPACE: "SPACE", LINEBREAK: "LINEBREAK", ELLIPSIS: "ELLIPSIS", EMDASH: "EMDASH", ENDASH: "ENDASH", APOSTROPHE: "APOSTROPHE", SINGLEQUOTED: "SINGLEQUOTED", DOUBLEQUOTED: "DOUBLEQUOTED", STR: "STR", LINK: "LINK", IMAGE: "IMAGE", CODE: "CODE", HTML: "HTML", EMPH: "EMPH", STRONG: "STRONG", STRIKE: "STRIKE", PLAIN: "PLAIN", PARA: "PARA", LISTITEM: "LISTITEM", BULLETLIST: "BULLETLIST", ORDEREDLIST: "ORDEREDLIST", H1: "H1", H2: "H2", H3: "H3", H4: "H4", H5: "H5", H6: "H6", BLOCKQUOTE: "BLOCKQUOTE", VERBATIM: "VERBATIM", HTMLBLOCK: "HTMLBLOCK", HRULE: "HRULE", REFERENCE: "REFERENCE", NOTE: "NOTE", DEFINITIONLIST: "DEFINITIONLIST", DEFTITLE: "DEFTITLE", DEFDATA: "DEFDATA", }