package toml import ( "fmt" "math" "sort" "strconv" ) const endSymbol rune = 1114112 /* The rule types inferred from the grammar are below. */ type pegRule uint8 const ( ruleUnknown pegRule = iota ruleTOML ruleExpression rulenewline rulews rulewsnl rulecomment rulekeyval rulekey rulebareKey rulequotedKey ruleval ruletable rulestdTable rulearrayTable ruleinlineTable ruleinlineTableKeyValues ruletableKey ruletableKeySep ruleinlineTableValSep ruleinteger ruleint rulefloat rulefrac ruleexp rulestring rulebasicString rulebasicChar ruleescaped rulebasicUnescaped ruleescape rulemlBasicString rulemlBasicBody ruleliteralString ruleliteralChar rulemlLiteralString rulemlLiteralBody rulemlLiteralChar rulehexdigit rulehexQuad ruleboolean ruledateFullYear ruledateMonth ruledateMDay ruletimeHour ruletimeMinute ruletimeSecond ruletimeSecfrac ruletimeNumoffset ruletimeOffset rulepartialTime rulefullDate rulefullTime ruledatetime ruledigit ruledigitDual ruledigitQuad rulearray rulearrayValues rulearraySep ruleAction0 rulePegText ruleAction1 ruleAction2 ruleAction3 ruleAction4 ruleAction5 ruleAction6 ruleAction7 ruleAction8 ruleAction9 ruleAction10 ruleAction11 ruleAction12 ruleAction13 ruleAction14 ruleAction15 ruleAction16 ruleAction17 ruleAction18 ruleAction19 ruleAction20 ruleAction21 ruleAction22 ruleAction23 ruleAction24 ) var rul3s = [...]string{ "Unknown", "TOML", "Expression", "newline", "ws", "wsnl", "comment", "keyval", "key", "bareKey", "quotedKey", "val", "table", "stdTable", "arrayTable", "inlineTable", "inlineTableKeyValues", "tableKey", "tableKeySep", "inlineTableValSep", "integer", "int", "float", "frac", "exp", "string", "basicString", "basicChar", "escaped", "basicUnescaped", "escape", "mlBasicString", "mlBasicBody", "literalString", "literalChar", "mlLiteralString", "mlLiteralBody", "mlLiteralChar", "hexdigit", "hexQuad", "boolean", "dateFullYear", "dateMonth", "dateMDay", "timeHour", "timeMinute", "timeSecond", "timeSecfrac", "timeNumoffset", "timeOffset", "partialTime", "fullDate", "fullTime", "datetime", "digit", "digitDual", "digitQuad", "array", "arrayValues", "arraySep", "Action0", "PegText", "Action1", "Action2", "Action3", "Action4", "Action5", "Action6", "Action7", "Action8", "Action9", "Action10", "Action11", "Action12", "Action13", "Action14", "Action15", "Action16", "Action17", "Action18", "Action19", "Action20", "Action21", "Action22", "Action23", "Action24", } type token32 struct { pegRule begin, end uint32 } func (t *token32) String() string { return fmt.Sprintf("\x1B[34m%v\x1B[m %v %v", rul3s[t.pegRule], t.begin, t.end) } type node32 struct { token32 up, next *node32 } func (node *node32) print(pretty bool, buffer string) { var print func(node *node32, depth int) print = func(node *node32, depth int) { for node != nil { for c := 0; c < depth; c++ { fmt.Printf(" ") } rule := rul3s[node.pegRule] quote := strconv.Quote(string(([]rune(buffer)[node.begin:node.end]))) if !pretty { fmt.Printf("%v %v\n", rule, quote) } else { fmt.Printf("\x1B[34m%v\x1B[m %v\n", rule, quote) } if node.up != nil { print(node.up, depth+1) } node = node.next } } print(node, 0) } func (node *node32) Print(buffer string) { node.print(false, buffer) } func (node *node32) PrettyPrint(buffer string) { node.print(true, buffer) } type tokens32 struct { tree []token32 } func (t *tokens32) Trim(length uint32) { t.tree = t.tree[:length] } func (t *tokens32) Print() { for _, token := range t.tree { fmt.Println(token.String()) } } func (t *tokens32) AST() *node32 { type element struct { node *node32 down *element } tokens := t.Tokens() var stack *element for _, token := range tokens { if token.begin == token.end { continue } node := &node32{token32: token} for stack != nil && stack.node.begin >= token.begin && stack.node.end <= token.end { stack.node.next = node.up node.up = stack.node stack = stack.down } stack = &element{node: node, down: stack} } if stack != nil { return stack.node } return nil } func (t *tokens32) PrintSyntaxTree(buffer string) { t.AST().Print(buffer) } func (t *tokens32) PrettyPrintSyntaxTree(buffer string) { t.AST().PrettyPrint(buffer) } func (t *tokens32) Add(rule pegRule, begin, end, index uint32) { if tree := t.tree; int(index) >= len(tree) { expanded := make([]token32, 2*len(tree)) copy(expanded, tree) t.tree = expanded } t.tree[index] = token32{ pegRule: rule, begin: begin, end: end, } } func (t *tokens32) Tokens() []token32 { return t.tree } type tomlParser struct { toml Buffer string buffer []rune rules [86]func() bool parse func(rule ...int) error reset func() Pretty bool tokens32 } func (p *tomlParser) Parse(rule ...int) error { return p.parse(rule...) } func (p *tomlParser) Reset() { p.reset() } type textPosition struct { line, symbol int } type textPositionMap map[int]textPosition func translatePositions(buffer []rune, positions []int) textPositionMap { length, translations, j, line, symbol := len(positions), make(textPositionMap, len(positions)), 0, 1, 0 sort.Ints(positions) search: for i, c := range buffer { if c == '\n' { line, symbol = line+1, 0 } else { symbol++ } if i == positions[j] { translations[positions[j]] = textPosition{line, symbol} for j++; j < length; j++ { if i != positions[j] { continue search } } break search } } return translations } type parseError struct { p *tomlParser max token32 } func (e *parseError) Error() string { tokens, error := []token32{e.max}, "\n" positions, p := make([]int, 2*len(tokens)), 0 for _, token := range tokens { positions[p], p = int(token.begin), p+1 positions[p], p = int(token.end), p+1 } translations := translatePositions(e.p.buffer, positions) format := "parse error near %v (line %v symbol %v - line %v symbol %v):\n%v\n" if e.p.Pretty { format = "parse error near \x1B[34m%v\x1B[m (line %v symbol %v - line %v symbol %v):\n%v\n" } for _, token := range tokens { begin, end := int(token.begin), int(token.end) error += fmt.Sprintf(format, rul3s[token.pegRule], translations[begin].line, translations[begin].symbol, translations[end].line, translations[end].symbol, strconv.Quote(string(e.p.buffer[begin:end]))) } return error } func (p *tomlParser) PrintSyntaxTree() { if p.Pretty { p.tokens32.PrettyPrintSyntaxTree(p.Buffer) } else { p.tokens32.PrintSyntaxTree(p.Buffer) } } func (p *tomlParser) Execute() { buffer, _buffer, text, begin, end := p.Buffer, p.buffer, "", 0, 0 for _, token := range p.Tokens() { switch token.pegRule { case rulePegText: begin, end = int(token.begin), int(token.end) text = string(_buffer[begin:end]) case ruleAction0: _ = buffer case ruleAction1: p.SetTableString(begin, end) case ruleAction2: p.AddLineCount(end - begin) case ruleAction3: p.AddLineCount(end - begin) case ruleAction4: p.AddKeyValue() case ruleAction5: p.SetKey(p.buffer, begin, end) case ruleAction6: p.SetKey(p.buffer, begin-1, end+1) case ruleAction7: p.SetTime(begin, end) case ruleAction8: p.SetFloat64(begin, end) case ruleAction9: p.SetInt64(begin, end) case ruleAction10: p.SetString(begin, end) case ruleAction11: p.SetBool(begin, end) case ruleAction12: p.SetArray(begin, end) case ruleAction13: p.SetTable(p.buffer, begin, end) case ruleAction14: p.SetArrayTable(p.buffer, begin, end) case ruleAction15: p.StartInlineTable() case ruleAction16: p.EndInlineTable() case ruleAction17: p.SetBasicString(p.buffer, begin, end) case ruleAction18: p.SetMultilineString() case ruleAction19: p.AddMultilineBasicBody(p.buffer, begin, end) case ruleAction20: p.SetLiteralString(p.buffer, begin, end) case ruleAction21: p.SetMultilineLiteralString(p.buffer, begin, end) case ruleAction22: p.StartArray() case ruleAction23: p.AddArrayVal() case ruleAction24: p.AddArrayVal() } } _, _, _, _, _ = buffer, _buffer, text, begin, end } func (p *tomlParser) Init() { var ( max token32 position, tokenIndex uint32 buffer []rune ) p.reset = func() { max = token32{} position, tokenIndex = 0, 0 p.buffer = []rune(p.Buffer) if len(p.buffer) == 0 || p.buffer[len(p.buffer)-1] != endSymbol { p.buffer = append(p.buffer, endSymbol) } buffer = p.buffer } p.reset() _rules := p.rules tree := tokens32{tree: make([]token32, math.MaxInt16)} p.parse = func(rule ...int) error { r := 1 if len(rule) > 0 { r = rule[0] } matches := p.rules[r]() p.tokens32 = tree if matches { p.Trim(tokenIndex) return nil } return &parseError{p, max} } add := func(rule pegRule, begin uint32) { tree.Add(rule, begin, position, tokenIndex) tokenIndex++ if begin != position && position > max.end { max = token32{rule, begin, position} } } matchDot := func() bool { if buffer[position] != endSymbol { position++ return true } return false } /*matchChar := func(c byte) bool { if buffer[position] == c { position++ return true } return false }*/ /*matchRange := func(lower byte, upper byte) bool { if c := buffer[position]; c >= lower && c <= upper { position++ return true } return false }*/ _rules = [...]func() bool{ nil, /* 0 TOML <- <(Expression (newline Expression)* newline? !. Action0)> */ func() bool { position0, tokenIndex0 := position, tokenIndex { position1 := position if !_rules[ruleExpression]() { goto l0 } l2: { position3, tokenIndex3 := position, tokenIndex if !_rules[rulenewline]() { goto l3 } if !_rules[ruleExpression]() { goto l3 } goto l2 l3: position, tokenIndex = position3, tokenIndex3 } { position4, tokenIndex4 := position, tokenIndex if !_rules[rulenewline]() { goto l4 } goto l5 l4: position, tokenIndex = position4, tokenIndex4 } l5: { position6, tokenIndex6 := position, tokenIndex if !matchDot() { goto l6 } goto l0 l6: position, tokenIndex = position6, tokenIndex6 } { add(ruleAction0, position) } add(ruleTOML, position1) } return true l0: position, tokenIndex = position0, tokenIndex0 return false }, /* 1 Expression <- <((<(ws table ws comment? (wsnl keyval ws comment?)*)> Action1) / (ws keyval ws comment?) / (ws comment?) / ws)> */ func() bool { position8, tokenIndex8 := position, tokenIndex { position9 := position { position10, tokenIndex10 := position, tokenIndex { position12 := position if !_rules[rulews]() { goto l11 } { position13 := position { position14, tokenIndex14 := position, tokenIndex { position16 := position if buffer[position] != rune('[') { goto l15 } position++ if !_rules[rulews]() { goto l15 } { position17 := position if !_rules[ruletableKey]() { goto l15 } add(rulePegText, position17) } if !_rules[rulews]() { goto l15 } if buffer[position] != rune(']') { goto l15 } position++ { add(ruleAction13, position) } add(rulestdTable, position16) } goto l14 l15: position, tokenIndex = position14, tokenIndex14 { position19 := position if buffer[position] != rune('[') { goto l11 } position++ if buffer[position] != rune('[') { goto l11 } position++ if !_rules[rulews]() { goto l11 } { position20 := position if !_rules[ruletableKey]() { goto l11 } add(rulePegText, position20) } if !_rules[rulews]() { goto l11 } if buffer[position] != rune(']') { goto l11 } position++ if buffer[position] != rune(']') { goto l11 } position++ { add(ruleAction14, position) } add(rulearrayTable, position19) } } l14: add(ruletable, position13) } if !_rules[rulews]() { goto l11 } { position22, tokenIndex22 := position, tokenIndex if !_rules[rulecomment]() { goto l22 } goto l23 l22: position, tokenIndex = position22, tokenIndex22 } l23: l24: { position25, tokenIndex25 := position, tokenIndex if !_rules[rulewsnl]() { goto l25 } if !_rules[rulekeyval]() { goto l25 } if !_rules[rulews]() { goto l25 } { position26, tokenIndex26 := position, tokenIndex if !_rules[rulecomment]() { goto l26 } goto l27 l26: position, tokenIndex = position26, tokenIndex26 } l27: goto l24 l25: position, tokenIndex = position25, tokenIndex25 } add(rulePegText, position12) } { add(ruleAction1, position) } goto l10 l11: position, tokenIndex = position10, tokenIndex10 if !_rules[rulews]() { goto l29 } if !_rules[rulekeyval]() { goto l29 } if !_rules[rulews]() { goto l29 } { position30, tokenIndex30 := position, tokenIndex if !_rules[rulecomment]() { goto l30 } goto l31 l30: position, tokenIndex = position30, tokenIndex30 } l31: goto l10 l29: position, tokenIndex = position10, tokenIndex10 if !_rules[rulews]() { goto l32 } { position33, tokenIndex33 := position, tokenIndex if !_rules[rulecomment]() { goto l33 } goto l34 l33: position, tokenIndex = position33, tokenIndex33 } l34: goto l10 l32: position, tokenIndex = position10, tokenIndex10 if !_rules[rulews]() { goto l8 } } l10: add(ruleExpression, position9) } return true l8: position, tokenIndex = position8, tokenIndex8 return false }, /* 2 newline <- <(<('\r' / '\n')+> Action2)> */ func() bool { position35, tokenIndex35 := position, tokenIndex { position36 := position { position37 := position { position40, tokenIndex40 := position, tokenIndex if buffer[position] != rune('\r') { goto l41 } position++ goto l40 l41: position, tokenIndex = position40, tokenIndex40 if buffer[position] != rune('\n') { goto l35 } position++ } l40: l38: { position39, tokenIndex39 := position, tokenIndex { position42, tokenIndex42 := position, tokenIndex if buffer[position] != rune('\r') { goto l43 } position++ goto l42 l43: position, tokenIndex = position42, tokenIndex42 if buffer[position] != rune('\n') { goto l39 } position++ } l42: goto l38 l39: position, tokenIndex = position39, tokenIndex39 } add(rulePegText, position37) } { add(ruleAction2, position) } add(rulenewline, position36) } return true l35: position, tokenIndex = position35, tokenIndex35 return false }, /* 3 ws <- <(' ' / '\t')*> */ func() bool { { position46 := position l47: { position48, tokenIndex48 := position, tokenIndex { position49, tokenIndex49 := position, tokenIndex if buffer[position] != rune(' ') { goto l50 } position++ goto l49 l50: position, tokenIndex = position49, tokenIndex49 if buffer[position] != rune('\t') { goto l48 } position++ } l49: goto l47 l48: position, tokenIndex = position48, tokenIndex48 } add(rulews, position46) } return true }, /* 4 wsnl <- <((&('\t') '\t') | (&(' ') ' ') | (&('\n' | '\r') (<('\r' / '\n')> Action3)))*> */ func() bool { { position52 := position l53: { position54, tokenIndex54 := position, tokenIndex { switch buffer[position] { case '\t': if buffer[position] != rune('\t') { goto l54 } position++ break case ' ': if buffer[position] != rune(' ') { goto l54 } position++ break default: { position56 := position { position57, tokenIndex57 := position, tokenIndex if buffer[position] != rune('\r') { goto l58 } position++ goto l57 l58: position, tokenIndex = position57, tokenIndex57 if buffer[position] != rune('\n') { goto l54 } position++ } l57: add(rulePegText, position56) } { add(ruleAction3, position) } break } } goto l53 l54: position, tokenIndex = position54, tokenIndex54 } add(rulewsnl, position52) } return true }, /* 5 comment <- <('#' <('\t' / [ -\U0010ffff])*>)> */ func() bool { position60, tokenIndex60 := position, tokenIndex { position61 := position if buffer[position] != rune('#') { goto l60 } position++ { position62 := position l63: { position64, tokenIndex64 := position, tokenIndex { position65, tokenIndex65 := position, tokenIndex if buffer[position] != rune('\t') { goto l66 } position++ goto l65 l66: position, tokenIndex = position65, tokenIndex65 if c := buffer[position]; c < rune(' ') || c > rune('\U0010ffff') { goto l64 } position++ } l65: goto l63 l64: position, tokenIndex = position64, tokenIndex64 } add(rulePegText, position62) } add(rulecomment, position61) } return true l60: position, tokenIndex = position60, tokenIndex60 return false }, /* 6 keyval <- <(key ws '=' ws val Action4)> */ func() bool { position67, tokenIndex67 := position, tokenIndex { position68 := position if !_rules[rulekey]() { goto l67 } if !_rules[rulews]() { goto l67 } if buffer[position] != rune('=') { goto l67 } position++ if !_rules[rulews]() { goto l67 } if !_rules[ruleval]() { goto l67 } { add(ruleAction4, position) } add(rulekeyval, position68) } return true l67: position, tokenIndex = position67, tokenIndex67 return false }, /* 7 key <- <(bareKey / quotedKey)> */ func() bool { position70, tokenIndex70 := position, tokenIndex { position71 := position { position72, tokenIndex72 := position, tokenIndex { position74 := position { position75 := position { switch buffer[position] { case '_': if buffer[position] != rune('_') { goto l73 } position++ break case '-': if buffer[position] != rune('-') { goto l73 } position++ break case 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z': if c := buffer[position]; c < rune('a') || c > rune('z') { goto l73 } position++ break case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': if c := buffer[position]; c < rune('0') || c > rune('9') { goto l73 } position++ break default: if c := buffer[position]; c < rune('A') || c > rune('Z') { goto l73 } position++ break } } l76: { position77, tokenIndex77 := position, tokenIndex { switch buffer[position] { case '_': if buffer[position] != rune('_') { goto l77 } position++ break case '-': if buffer[position] != rune('-') { goto l77 } position++ break case 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z': if c := buffer[position]; c < rune('a') || c > rune('z') { goto l77 } position++ break case '0', '1', '2', '3', '4', '5', '6', '7', '8', '9': if c := buffer[position]; c < rune('0') || c > rune('9') { goto l77 } position++ break default: if c := buffer[position]; c < rune('A') || c > rune('Z') { goto l77 } position++ break } } goto l76 l77: position, tokenIndex = position77, tokenIndex77 } add(rulePegText, position75) } { add(ruleAction5, position) } add(rulebareKey, position74) } goto l72 l73: position, tokenIndex = position72, tokenIndex72 { position81 := position if buffer[position] != rune('"') { goto l70 } position++ { position82 := position if !_rules[rulebasicChar]() { goto l70 } l83: { position84, tokenIndex84 := position, tokenIndex if !_rules[rulebasicChar]() { goto l84 } goto l83 l84: position, tokenIndex = position84, tokenIndex84 } add(rulePegText, position82) } if buffer[position] != rune('"') { goto l70 } position++ { add(ruleAction6, position) } add(rulequotedKey, position81) } } l72: add(rulekey, position71) } return true l70: position, tokenIndex = position70, tokenIndex70 return false }, /* 8 bareKey <- <(<((&('_') '_') | (&('-') '-') | (&('a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z') [a-z]) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') [0-9]) | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z') [A-Z]))+> Action5)> */ nil, /* 9 quotedKey <- <('"' '"' Action6)> */ nil, /* 10 val <- <(( Action7) / ( Action8) / ((&('{') inlineTable) | (&('[') ( Action12)) | (&('f' | 't') ( Action11)) | (&('"' | '\'') ( Action10)) | (&('+' | '-' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') ( Action9))))> */ func() bool { position88, tokenIndex88 := position, tokenIndex { position89 := position { position90, tokenIndex90 := position, tokenIndex { position92 := position { position93 := position { position94, tokenIndex94 := position, tokenIndex { position96 := position { position97 := position { position98 := position if !_rules[ruledigitDual]() { goto l95 } if !_rules[ruledigitDual]() { goto l95 } add(ruledigitQuad, position98) } add(ruledateFullYear, position97) } if buffer[position] != rune('-') { goto l95 } position++ { position99 := position if !_rules[ruledigitDual]() { goto l95 } add(ruledateMonth, position99) } if buffer[position] != rune('-') { goto l95 } position++ { position100 := position if !_rules[ruledigitDual]() { goto l95 } add(ruledateMDay, position100) } add(rulefullDate, position96) } { position101, tokenIndex101 := position, tokenIndex if buffer[position] != rune('T') { goto l101 } position++ { position103 := position if !_rules[rulepartialTime]() { goto l101 } { position104 := position { position105, tokenIndex105 := position, tokenIndex if buffer[position] != rune('Z') { goto l106 } position++ goto l105 l106: position, tokenIndex = position105, tokenIndex105 { position107 := position { position108, tokenIndex108 := position, tokenIndex if buffer[position] != rune('-') { goto l109 } position++ goto l108 l109: position, tokenIndex = position108, tokenIndex108 if buffer[position] != rune('+') { goto l101 } position++ } l108: if !_rules[ruletimeHour]() { goto l101 } if buffer[position] != rune(':') { goto l101 } position++ if !_rules[ruletimeMinute]() { goto l101 } add(ruletimeNumoffset, position107) } } l105: add(ruletimeOffset, position104) } add(rulefullTime, position103) } goto l102 l101: position, tokenIndex = position101, tokenIndex101 } l102: goto l94 l95: position, tokenIndex = position94, tokenIndex94 if !_rules[rulepartialTime]() { goto l91 } } l94: add(ruledatetime, position93) } add(rulePegText, position92) } { add(ruleAction7, position) } goto l90 l91: position, tokenIndex = position90, tokenIndex90 { position112 := position { position113 := position if !_rules[ruleinteger]() { goto l111 } { position114, tokenIndex114 := position, tokenIndex if !_rules[rulefrac]() { goto l115 } { position116, tokenIndex116 := position, tokenIndex if !_rules[ruleexp]() { goto l116 } goto l117 l116: position, tokenIndex = position116, tokenIndex116 } l117: goto l114 l115: position, tokenIndex = position114, tokenIndex114 { position118, tokenIndex118 := position, tokenIndex if !_rules[rulefrac]() { goto l118 } goto l119 l118: position, tokenIndex = position118, tokenIndex118 } l119: if !_rules[ruleexp]() { goto l111 } } l114: add(rulefloat, position113) } add(rulePegText, position112) } { add(ruleAction8, position) } goto l90 l111: position, tokenIndex = position90, tokenIndex90 { switch buffer[position] { case '{': { position122 := position if buffer[position] != rune('{') { goto l88 } position++ { add(ruleAction15, position) } if !_rules[rulews]() { goto l88 } { position124 := position l125: { position126, tokenIndex126 := position, tokenIndex if !_rules[rulekeyval]() { goto l126 } { position127, tokenIndex127 := position, tokenIndex { position129 := position if !_rules[rulews]() { goto l127 } if buffer[position] != rune(',') { goto l127 } position++ if !_rules[rulews]() { goto l127 } add(ruleinlineTableValSep, position129) } goto l128 l127: position, tokenIndex = position127, tokenIndex127 } l128: goto l125 l126: position, tokenIndex = position126, tokenIndex126 } add(ruleinlineTableKeyValues, position124) } if !_rules[rulews]() { goto l88 } if buffer[position] != rune('}') { goto l88 } position++ { add(ruleAction16, position) } add(ruleinlineTable, position122) } break case '[': { position131 := position { position132 := position if buffer[position] != rune('[') { goto l88 } position++ { add(ruleAction22, position) } if !_rules[rulewsnl]() { goto l88 } { position134, tokenIndex134 := position, tokenIndex { position136 := position if !_rules[ruleval]() { goto l134 } { add(ruleAction23, position) } l138: { position139, tokenIndex139 := position, tokenIndex if !_rules[rulewsnl]() { goto l139 } { position140, tokenIndex140 := position, tokenIndex if !_rules[rulecomment]() { goto l140 } goto l141 l140: position, tokenIndex = position140, tokenIndex140 } l141: if !_rules[rulewsnl]() { goto l139 } if !_rules[rulearraySep]() { goto l139 } if !_rules[rulewsnl]() { goto l139 } { position142, tokenIndex142 := position, tokenIndex if !_rules[rulecomment]() { goto l142 } goto l143 l142: position, tokenIndex = position142, tokenIndex142 } l143: if !_rules[rulewsnl]() { goto l139 } if !_rules[ruleval]() { goto l139 } { add(ruleAction24, position) } goto l138 l139: position, tokenIndex = position139, tokenIndex139 } if !_rules[rulewsnl]() { goto l134 } { position145, tokenIndex145 := position, tokenIndex if !_rules[rulearraySep]() { goto l145 } goto l146 l145: position, tokenIndex = position145, tokenIndex145 } l146: if !_rules[rulewsnl]() { goto l134 } { position147, tokenIndex147 := position, tokenIndex if !_rules[rulecomment]() { goto l147 } goto l148 l147: position, tokenIndex = position147, tokenIndex147 } l148: add(rulearrayValues, position136) } goto l135 l134: position, tokenIndex = position134, tokenIndex134 } l135: if !_rules[rulewsnl]() { goto l88 } if buffer[position] != rune(']') { goto l88 } position++ add(rulearray, position132) } add(rulePegText, position131) } { add(ruleAction12, position) } break case 'f', 't': { position150 := position { position151 := position { position152, tokenIndex152 := position, tokenIndex if buffer[position] != rune('t') { goto l153 } position++ if buffer[position] != rune('r') { goto l153 } position++ if buffer[position] != rune('u') { goto l153 } position++ if buffer[position] != rune('e') { goto l153 } position++ goto l152 l153: position, tokenIndex = position152, tokenIndex152 if buffer[position] != rune('f') { goto l88 } position++ if buffer[position] != rune('a') { goto l88 } position++ if buffer[position] != rune('l') { goto l88 } position++ if buffer[position] != rune('s') { goto l88 } position++ if buffer[position] != rune('e') { goto l88 } position++ } l152: add(ruleboolean, position151) } add(rulePegText, position150) } { add(ruleAction11, position) } break case '"', '\'': { position155 := position { position156 := position { position157, tokenIndex157 := position, tokenIndex { position159 := position if buffer[position] != rune('\'') { goto l158 } position++ if buffer[position] != rune('\'') { goto l158 } position++ if buffer[position] != rune('\'') { goto l158 } position++ { position160 := position { position161 := position l162: { position163, tokenIndex163 := position, tokenIndex { position164, tokenIndex164 := position, tokenIndex if buffer[position] != rune('\'') { goto l164 } position++ if buffer[position] != rune('\'') { goto l164 } position++ if buffer[position] != rune('\'') { goto l164 } position++ goto l163 l164: position, tokenIndex = position164, tokenIndex164 } { position165, tokenIndex165 := position, tokenIndex { position167 := position { position168, tokenIndex168 := position, tokenIndex if buffer[position] != rune('\t') { goto l169 } position++ goto l168 l169: position, tokenIndex = position168, tokenIndex168 if c := buffer[position]; c < rune(' ') || c > rune('\U0010ffff') { goto l166 } position++ } l168: add(rulemlLiteralChar, position167) } goto l165 l166: position, tokenIndex = position165, tokenIndex165 if !_rules[rulenewline]() { goto l163 } } l165: goto l162 l163: position, tokenIndex = position163, tokenIndex163 } add(rulemlLiteralBody, position161) } add(rulePegText, position160) } if buffer[position] != rune('\'') { goto l158 } position++ if buffer[position] != rune('\'') { goto l158 } position++ if buffer[position] != rune('\'') { goto l158 } position++ { add(ruleAction21, position) } add(rulemlLiteralString, position159) } goto l157 l158: position, tokenIndex = position157, tokenIndex157 { position172 := position if buffer[position] != rune('\'') { goto l171 } position++ { position173 := position l174: { position175, tokenIndex175 := position, tokenIndex { position176 := position { switch buffer[position] { case '\t': if buffer[position] != rune('\t') { goto l175 } position++ break case ' ', '!', '"', '#', '$', '%', '&': if c := buffer[position]; c < rune(' ') || c > rune('&') { goto l175 } position++ break default: if c := buffer[position]; c < rune('(') || c > rune('\U0010ffff') { goto l175 } position++ break } } add(ruleliteralChar, position176) } goto l174 l175: position, tokenIndex = position175, tokenIndex175 } add(rulePegText, position173) } if buffer[position] != rune('\'') { goto l171 } position++ { add(ruleAction20, position) } add(ruleliteralString, position172) } goto l157 l171: position, tokenIndex = position157, tokenIndex157 { position180 := position if buffer[position] != rune('"') { goto l179 } position++ if buffer[position] != rune('"') { goto l179 } position++ if buffer[position] != rune('"') { goto l179 } position++ { position181 := position l182: { position183, tokenIndex183 := position, tokenIndex { position184, tokenIndex184 := position, tokenIndex { position186 := position { position187, tokenIndex187 := position, tokenIndex if !_rules[rulebasicChar]() { goto l188 } goto l187 l188: position, tokenIndex = position187, tokenIndex187 if !_rules[rulenewline]() { goto l185 } } l187: add(rulePegText, position186) } { add(ruleAction19, position) } goto l184 l185: position, tokenIndex = position184, tokenIndex184 if !_rules[ruleescape]() { goto l183 } if !_rules[rulenewline]() { goto l183 } if !_rules[rulewsnl]() { goto l183 } } l184: goto l182 l183: position, tokenIndex = position183, tokenIndex183 } add(rulemlBasicBody, position181) } if buffer[position] != rune('"') { goto l179 } position++ if buffer[position] != rune('"') { goto l179 } position++ if buffer[position] != rune('"') { goto l179 } position++ { add(ruleAction18, position) } add(rulemlBasicString, position180) } goto l157 l179: position, tokenIndex = position157, tokenIndex157 { position191 := position { position192 := position if buffer[position] != rune('"') { goto l88 } position++ l193: { position194, tokenIndex194 := position, tokenIndex if !_rules[rulebasicChar]() { goto l194 } goto l193 l194: position, tokenIndex = position194, tokenIndex194 } if buffer[position] != rune('"') { goto l88 } position++ add(rulePegText, position192) } { add(ruleAction17, position) } add(rulebasicString, position191) } } l157: add(rulestring, position156) } add(rulePegText, position155) } { add(ruleAction10, position) } break default: { position197 := position if !_rules[ruleinteger]() { goto l88 } add(rulePegText, position197) } { add(ruleAction9, position) } break } } } l90: add(ruleval, position89) } return true l88: position, tokenIndex = position88, tokenIndex88 return false }, /* 11 table <- <(stdTable / arrayTable)> */ nil, /* 12 stdTable <- <('[' ws ws ']' Action13)> */ nil, /* 13 arrayTable <- <('[' '[' ws ws (']' ']') Action14)> */ nil, /* 14 inlineTable <- <('{' Action15 ws inlineTableKeyValues ws '}' Action16)> */ nil, /* 15 inlineTableKeyValues <- <(keyval inlineTableValSep?)*> */ nil, /* 16 tableKey <- <(key (tableKeySep key)*)> */ func() bool { position204, tokenIndex204 := position, tokenIndex { position205 := position if !_rules[rulekey]() { goto l204 } l206: { position207, tokenIndex207 := position, tokenIndex { position208 := position if !_rules[rulews]() { goto l207 } if buffer[position] != rune('.') { goto l207 } position++ if !_rules[rulews]() { goto l207 } add(ruletableKeySep, position208) } if !_rules[rulekey]() { goto l207 } goto l206 l207: position, tokenIndex = position207, tokenIndex207 } add(ruletableKey, position205) } return true l204: position, tokenIndex = position204, tokenIndex204 return false }, /* 17 tableKeySep <- <(ws '.' ws)> */ nil, /* 18 inlineTableValSep <- <(ws ',' ws)> */ nil, /* 19 integer <- <(('-' / '+')? int)> */ func() bool { position211, tokenIndex211 := position, tokenIndex { position212 := position { position213, tokenIndex213 := position, tokenIndex { position215, tokenIndex215 := position, tokenIndex if buffer[position] != rune('-') { goto l216 } position++ goto l215 l216: position, tokenIndex = position215, tokenIndex215 if buffer[position] != rune('+') { goto l213 } position++ } l215: goto l214 l213: position, tokenIndex = position213, tokenIndex213 } l214: { position217 := position { position218, tokenIndex218 := position, tokenIndex if c := buffer[position]; c < rune('1') || c > rune('9') { goto l219 } position++ { position222, tokenIndex222 := position, tokenIndex if !_rules[ruledigit]() { goto l223 } goto l222 l223: position, tokenIndex = position222, tokenIndex222 if buffer[position] != rune('_') { goto l219 } position++ if !_rules[ruledigit]() { goto l219 } } l222: l220: { position221, tokenIndex221 := position, tokenIndex { position224, tokenIndex224 := position, tokenIndex if !_rules[ruledigit]() { goto l225 } goto l224 l225: position, tokenIndex = position224, tokenIndex224 if buffer[position] != rune('_') { goto l221 } position++ if !_rules[ruledigit]() { goto l221 } } l224: goto l220 l221: position, tokenIndex = position221, tokenIndex221 } goto l218 l219: position, tokenIndex = position218, tokenIndex218 if !_rules[ruledigit]() { goto l211 } } l218: add(ruleint, position217) } add(ruleinteger, position212) } return true l211: position, tokenIndex = position211, tokenIndex211 return false }, /* 20 int <- <(([1-9] (digit / ('_' digit))+) / digit)> */ nil, /* 21 float <- <(integer ((frac exp?) / (frac? exp)))> */ nil, /* 22 frac <- <('.' digit (digit / ('_' digit))*)> */ func() bool { position228, tokenIndex228 := position, tokenIndex { position229 := position if buffer[position] != rune('.') { goto l228 } position++ if !_rules[ruledigit]() { goto l228 } l230: { position231, tokenIndex231 := position, tokenIndex { position232, tokenIndex232 := position, tokenIndex if !_rules[ruledigit]() { goto l233 } goto l232 l233: position, tokenIndex = position232, tokenIndex232 if buffer[position] != rune('_') { goto l231 } position++ if !_rules[ruledigit]() { goto l231 } } l232: goto l230 l231: position, tokenIndex = position231, tokenIndex231 } add(rulefrac, position229) } return true l228: position, tokenIndex = position228, tokenIndex228 return false }, /* 23 exp <- <(('e' / 'E') ('-' / '+')? digit (digit / ('_' digit))*)> */ func() bool { position234, tokenIndex234 := position, tokenIndex { position235 := position { position236, tokenIndex236 := position, tokenIndex if buffer[position] != rune('e') { goto l237 } position++ goto l236 l237: position, tokenIndex = position236, tokenIndex236 if buffer[position] != rune('E') { goto l234 } position++ } l236: { position238, tokenIndex238 := position, tokenIndex { position240, tokenIndex240 := position, tokenIndex if buffer[position] != rune('-') { goto l241 } position++ goto l240 l241: position, tokenIndex = position240, tokenIndex240 if buffer[position] != rune('+') { goto l238 } position++ } l240: goto l239 l238: position, tokenIndex = position238, tokenIndex238 } l239: if !_rules[ruledigit]() { goto l234 } l242: { position243, tokenIndex243 := position, tokenIndex { position244, tokenIndex244 := position, tokenIndex if !_rules[ruledigit]() { goto l245 } goto l244 l245: position, tokenIndex = position244, tokenIndex244 if buffer[position] != rune('_') { goto l243 } position++ if !_rules[ruledigit]() { goto l243 } } l244: goto l242 l243: position, tokenIndex = position243, tokenIndex243 } add(ruleexp, position235) } return true l234: position, tokenIndex = position234, tokenIndex234 return false }, /* 24 string <- <(mlLiteralString / literalString / mlBasicString / basicString)> */ nil, /* 25 basicString <- <(<('"' basicChar* '"')> Action17)> */ nil, /* 26 basicChar <- <(basicUnescaped / escaped)> */ func() bool { position248, tokenIndex248 := position, tokenIndex { position249 := position { position250, tokenIndex250 := position, tokenIndex { position252 := position { switch buffer[position] { case ' ', '!': if c := buffer[position]; c < rune(' ') || c > rune('!') { goto l251 } position++ break case '#', '$', '%', '&', '\'', '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z', '[': if c := buffer[position]; c < rune('#') || c > rune('[') { goto l251 } position++ break default: if c := buffer[position]; c < rune(']') || c > rune('\U0010ffff') { goto l251 } position++ break } } add(rulebasicUnescaped, position252) } goto l250 l251: position, tokenIndex = position250, tokenIndex250 { position254 := position if !_rules[ruleescape]() { goto l248 } { switch buffer[position] { case 'U': if buffer[position] != rune('U') { goto l248 } position++ if !_rules[rulehexQuad]() { goto l248 } if !_rules[rulehexQuad]() { goto l248 } break case 'u': if buffer[position] != rune('u') { goto l248 } position++ if !_rules[rulehexQuad]() { goto l248 } break case '\\': if buffer[position] != rune('\\') { goto l248 } position++ break case '/': if buffer[position] != rune('/') { goto l248 } position++ break case '"': if buffer[position] != rune('"') { goto l248 } position++ break case 'r': if buffer[position] != rune('r') { goto l248 } position++ break case 'f': if buffer[position] != rune('f') { goto l248 } position++ break case 'n': if buffer[position] != rune('n') { goto l248 } position++ break case 't': if buffer[position] != rune('t') { goto l248 } position++ break default: if buffer[position] != rune('b') { goto l248 } position++ break } } add(ruleescaped, position254) } } l250: add(rulebasicChar, position249) } return true l248: position, tokenIndex = position248, tokenIndex248 return false }, /* 27 escaped <- <(escape ((&('U') ('U' hexQuad hexQuad)) | (&('u') ('u' hexQuad)) | (&('\\') '\\') | (&('/') '/') | (&('"') '"') | (&('r') 'r') | (&('f') 'f') | (&('n') 'n') | (&('t') 't') | (&('b') 'b')))> */ nil, /* 28 basicUnescaped <- <((&(' ' | '!') [ -!]) | (&('#' | '$' | '%' | '&' | '\'' | '(' | ')' | '*' | '+' | ',' | '-' | '.' | '/' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' | '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | '[') [#-[]) | (&(']' | '^' | '_' | '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | '{' | '|' | '}' | '~' | '\u007f' | '\u0080' | '\u0081' | '\u0082' | '\u0083' | '\u0084' | '\u0085' | '\u0086' | '\u0087' | '\u0088' | '\u0089' | '\u008a' | '\u008b' | '\u008c' | '\u008d' | '\u008e' | '\u008f' | '\u0090' | '\u0091' | '\u0092' | '\u0093' | '\u0094' | '\u0095' | '\u0096' | '\u0097' | '\u0098' | '\u0099' | '\u009a' | '\u009b' | '\u009c' | '\u009d' | '\u009e' | '\u009f' | '\u00a0' | '¡' | '¢' | '£' | '¤' | '¥' | '¦' | '§' | '¨' | '©' | 'ª' | '«' | '¬' | '\u00ad' | '®' | '¯' | '°' | '±' | '²' | '³' | '´' | 'µ' | '¶' | '·' | '¸' | '¹' | 'º' | '»' | '¼' | '½' | '¾' | '¿' | 'À' | 'Á' | 'Â' | 'Ã' | 'Ä' | 'Å' | 'Æ' | 'Ç' | 'È' | 'É' | 'Ê' | 'Ë' | 'Ì' | 'Í' | 'Î' | 'Ï' | 'Ð' | 'Ñ' | 'Ò' | 'Ó' | 'Ô' | 'Õ' | 'Ö' | '×' | 'Ø' | 'Ù' | 'Ú' | 'Û' | 'Ü' | 'Ý' | 'Þ' | 'ß' | 'à' | 'á' | 'â' | 'ã' | 'ä' | 'å' | 'æ' | 'ç' | 'è' | 'é' | 'ê' | 'ë' | 'ì' | 'í' | 'î' | 'ï' | 'ð' | 'ñ' | 'ò' | 'ó' | 'ô' | 'õ' | 'ö' | '÷' | 'ø' | 'ù' | 'ú' | 'û' | 'ü' | 'ý' | 'þ' | 'ÿ') []-\U0010ffff]))> */ nil, /* 29 escape <- <'\\'> */ func() bool { position258, tokenIndex258 := position, tokenIndex { position259 := position if buffer[position] != rune('\\') { goto l258 } position++ add(ruleescape, position259) } return true l258: position, tokenIndex = position258, tokenIndex258 return false }, /* 30 mlBasicString <- <('"' '"' '"' mlBasicBody ('"' '"' '"') Action18)> */ nil, /* 31 mlBasicBody <- <((<(basicChar / newline)> Action19) / (escape newline wsnl))*> */ nil, /* 32 literalString <- <('\'' '\'' Action20)> */ nil, /* 33 literalChar <- <((&('\t') '\t') | (&(' ' | '!' | '"' | '#' | '$' | '%' | '&') [ -&]) | (&('(' | ')' | '*' | '+' | ',' | '-' | '.' | '/' | '0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9' | ':' | ';' | '<' | '=' | '>' | '?' | '@' | 'A' | 'B' | 'C' | 'D' | 'E' | 'F' | 'G' | 'H' | 'I' | 'J' | 'K' | 'L' | 'M' | 'N' | 'O' | 'P' | 'Q' | 'R' | 'S' | 'T' | 'U' | 'V' | 'W' | 'X' | 'Y' | 'Z' | '[' | '\\' | ']' | '^' | '_' | '`' | 'a' | 'b' | 'c' | 'd' | 'e' | 'f' | 'g' | 'h' | 'i' | 'j' | 'k' | 'l' | 'm' | 'n' | 'o' | 'p' | 'q' | 'r' | 's' | 't' | 'u' | 'v' | 'w' | 'x' | 'y' | 'z' | '{' | '|' | '}' | '~' | '\u007f' | '\u0080' | '\u0081' | '\u0082' | '\u0083' | '\u0084' | '\u0085' | '\u0086' | '\u0087' | '\u0088' | '\u0089' | '\u008a' | '\u008b' | '\u008c' | '\u008d' | '\u008e' | '\u008f' | '\u0090' | '\u0091' | '\u0092' | '\u0093' | '\u0094' | '\u0095' | '\u0096' | '\u0097' | '\u0098' | '\u0099' | '\u009a' | '\u009b' | '\u009c' | '\u009d' | '\u009e' | '\u009f' | '\u00a0' | '¡' | '¢' | '£' | '¤' | '¥' | '¦' | '§' | '¨' | '©' | 'ª' | '«' | '¬' | '\u00ad' | '®' | '¯' | '°' | '±' | '²' | '³' | '´' | 'µ' | '¶' | '·' | '¸' | '¹' | 'º' | '»' | '¼' | '½' | '¾' | '¿' | 'À' | 'Á' | 'Â' | 'Ã' | 'Ä' | 'Å' | 'Æ' | 'Ç' | 'È' | 'É' | 'Ê' | 'Ë' | 'Ì' | 'Í' | 'Î' | 'Ï' | 'Ð' | 'Ñ' | 'Ò' | 'Ó' | 'Ô' | 'Õ' | 'Ö' | '×' | 'Ø' | 'Ù' | 'Ú' | 'Û' | 'Ü' | 'Ý' | 'Þ' | 'ß' | 'à' | 'á' | 'â' | 'ã' | 'ä' | 'å' | 'æ' | 'ç' | 'è' | 'é' | 'ê' | 'ë' | 'ì' | 'í' | 'î' | 'ï' | 'ð' | 'ñ' | 'ò' | 'ó' | 'ô' | 'õ' | 'ö' | '÷' | 'ø' | 'ù' | 'ú' | 'û' | 'ü' | 'ý' | 'þ' | 'ÿ') [(-\U0010ffff]))> */ nil, /* 34 mlLiteralString <- <('\'' '\'' '\'' ('\'' '\'' '\'') Action21)> */ nil, /* 35 mlLiteralBody <- <(!('\'' '\'' '\'') (mlLiteralChar / newline))*> */ nil, /* 36 mlLiteralChar <- <('\t' / [ -\U0010ffff])> */ nil, /* 37 hexdigit <- <((&('a' | 'b' | 'c' | 'd' | 'e' | 'f') [a-f]) | (&('A' | 'B' | 'C' | 'D' | 'E' | 'F') [A-F]) | (&('0' | '1' | '2' | '3' | '4' | '5' | '6' | '7' | '8' | '9') [0-9]))> */ func() bool { position267, tokenIndex267 := position, tokenIndex { position268 := position { switch buffer[position] { case 'a', 'b', 'c', 'd', 'e', 'f': if c := buffer[position]; c < rune('a') || c > rune('f') { goto l267 } position++ break case 'A', 'B', 'C', 'D', 'E', 'F': if c := buffer[position]; c < rune('A') || c > rune('F') { goto l267 } position++ break default: if c := buffer[position]; c < rune('0') || c > rune('9') { goto l267 } position++ break } } add(rulehexdigit, position268) } return true l267: position, tokenIndex = position267, tokenIndex267 return false }, /* 38 hexQuad <- <(hexdigit hexdigit hexdigit hexdigit)> */ func() bool { position270, tokenIndex270 := position, tokenIndex { position271 := position if !_rules[rulehexdigit]() { goto l270 } if !_rules[rulehexdigit]() { goto l270 } if !_rules[rulehexdigit]() { goto l270 } if !_rules[rulehexdigit]() { goto l270 } add(rulehexQuad, position271) } return true l270: position, tokenIndex = position270, tokenIndex270 return false }, /* 39 boolean <- <(('t' 'r' 'u' 'e') / ('f' 'a' 'l' 's' 'e'))> */ nil, /* 40 dateFullYear <- */ nil, /* 41 dateMonth <- */ nil, /* 42 dateMDay <- */ nil, /* 43 timeHour <- */ func() bool { position276, tokenIndex276 := position, tokenIndex { position277 := position if !_rules[ruledigitDual]() { goto l276 } add(ruletimeHour, position277) } return true l276: position, tokenIndex = position276, tokenIndex276 return false }, /* 44 timeMinute <- */ func() bool { position278, tokenIndex278 := position, tokenIndex { position279 := position if !_rules[ruledigitDual]() { goto l278 } add(ruletimeMinute, position279) } return true l278: position, tokenIndex = position278, tokenIndex278 return false }, /* 45 timeSecond <- */ nil, /* 46 timeSecfrac <- <('.' digit+)> */ nil, /* 47 timeNumoffset <- <(('-' / '+') timeHour ':' timeMinute)> */ nil, /* 48 timeOffset <- <('Z' / timeNumoffset)> */ nil, /* 49 partialTime <- <(timeHour ':' timeMinute ':' timeSecond timeSecfrac?)> */ func() bool { position284, tokenIndex284 := position, tokenIndex { position285 := position if !_rules[ruletimeHour]() { goto l284 } if buffer[position] != rune(':') { goto l284 } position++ if !_rules[ruletimeMinute]() { goto l284 } if buffer[position] != rune(':') { goto l284 } position++ { position286 := position if !_rules[ruledigitDual]() { goto l284 } add(ruletimeSecond, position286) } { position287, tokenIndex287 := position, tokenIndex { position289 := position if buffer[position] != rune('.') { goto l287 } position++ if !_rules[ruledigit]() { goto l287 } l290: { position291, tokenIndex291 := position, tokenIndex if !_rules[ruledigit]() { goto l291 } goto l290 l291: position, tokenIndex = position291, tokenIndex291 } add(ruletimeSecfrac, position289) } goto l288 l287: position, tokenIndex = position287, tokenIndex287 } l288: add(rulepartialTime, position285) } return true l284: position, tokenIndex = position284, tokenIndex284 return false }, /* 50 fullDate <- <(dateFullYear '-' dateMonth '-' dateMDay)> */ nil, /* 51 fullTime <- <(partialTime timeOffset)> */ nil, /* 52 datetime <- <((fullDate ('T' fullTime)?) / partialTime)> */ nil, /* 53 digit <- <[0-9]> */ func() bool { position295, tokenIndex295 := position, tokenIndex { position296 := position if c := buffer[position]; c < rune('0') || c > rune('9') { goto l295 } position++ add(ruledigit, position296) } return true l295: position, tokenIndex = position295, tokenIndex295 return false }, /* 54 digitDual <- <(digit digit)> */ func() bool { position297, tokenIndex297 := position, tokenIndex { position298 := position if !_rules[ruledigit]() { goto l297 } if !_rules[ruledigit]() { goto l297 } add(ruledigitDual, position298) } return true l297: position, tokenIndex = position297, tokenIndex297 return false }, /* 55 digitQuad <- <(digitDual digitDual)> */ nil, /* 56 array <- <('[' Action22 wsnl arrayValues? wsnl ']')> */ nil, /* 57 arrayValues <- <(val Action23 (wsnl comment? wsnl arraySep wsnl comment? wsnl val Action24)* wsnl arraySep? wsnl comment?)> */ nil, /* 58 arraySep <- <','> */ func() bool { position302, tokenIndex302 := position, tokenIndex { position303 := position if buffer[position] != rune(',') { goto l302 } position++ add(rulearraySep, position303) } return true l302: position, tokenIndex = position302, tokenIndex302 return false }, /* 60 Action0 <- <{ _ = buffer }> */ nil, nil, /* 62 Action1 <- <{ p.SetTableString(begin, end) }> */ nil, /* 63 Action2 <- <{ p.AddLineCount(end - begin) }> */ nil, /* 64 Action3 <- <{ p.AddLineCount(end - begin) }> */ nil, /* 65 Action4 <- <{ p.AddKeyValue() }> */ nil, /* 66 Action5 <- <{ p.SetKey(p.buffer, begin, end) }> */ nil, /* 67 Action6 <- <{ p.SetKey(p.buffer, begin-1, end+1) }> */ nil, /* 68 Action7 <- <{ p.SetTime(begin, end) }> */ nil, /* 69 Action8 <- <{ p.SetFloat64(begin, end) }> */ nil, /* 70 Action9 <- <{ p.SetInt64(begin, end) }> */ nil, /* 71 Action10 <- <{ p.SetString(begin, end) }> */ nil, /* 72 Action11 <- <{ p.SetBool(begin, end) }> */ nil, /* 73 Action12 <- <{ p.SetArray(begin, end) }> */ nil, /* 74 Action13 <- <{ p.SetTable(p.buffer, begin, end) }> */ nil, /* 75 Action14 <- <{ p.SetArrayTable(p.buffer, begin, end) }> */ nil, /* 76 Action15 <- <{ p.StartInlineTable() }> */ nil, /* 77 Action16 <- <{ p.EndInlineTable() }> */ nil, /* 78 Action17 <- <{ p.SetBasicString(p.buffer, begin, end) }> */ nil, /* 79 Action18 <- <{ p.SetMultilineString() }> */ nil, /* 80 Action19 <- <{ p.AddMultilineBasicBody(p.buffer, begin, end) }> */ nil, /* 81 Action20 <- <{ p.SetLiteralString(p.buffer, begin, end) }> */ nil, /* 82 Action21 <- <{ p.SetMultilineLiteralString(p.buffer, begin, end) }> */ nil, /* 83 Action22 <- <{ p.StartArray() }> */ nil, /* 84 Action23 <- <{ p.AddArrayVal() }> */ nil, /* 85 Action24 <- <{ p.AddArrayVal() }> */ nil, } p.rules = _rules }