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 ruletableKeyComp 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 ruleAction25 ) var rul3s = [...]string{ "Unknown", "TOML", "Expression", "newline", "ws", "wsnl", "comment", "keyval", "key", "bareKey", "quotedKey", "val", "table", "stdTable", "arrayTable", "inlineTable", "inlineTableKeyValues", "tableKey", "tableKeyComp", "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", "Action25", } 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 [88]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, end) 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.AddTableKey() case ruleAction18: p.SetBasicString(p.buffer, begin, end) case ruleAction19: p.SetMultilineString() case ruleAction20: p.AddMultilineBasicBody(p.buffer, begin, end) case ruleAction21: p.SetLiteralString(p.buffer, begin, end) case ruleAction22: p.SetMultilineLiteralString(p.buffer, begin, end) case ruleAction23: p.StartArray() case ruleAction24: p.AddArrayVal() case ruleAction25: 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 { position82 := position if buffer[position] != rune('"') { goto l70 } position++ l83: { position84, tokenIndex84 := position, tokenIndex if !_rules[rulebasicChar]() { goto l84 } goto l83 l84: position, tokenIndex = position84, tokenIndex84 } if buffer[position] != rune('"') { goto l70 } position++ add(rulePegText, position82) } { 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 <- <(<('"' basicChar* '"')> 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, tokenIndex104 := position, tokenIndex { position106 := position { position107, tokenIndex107 := position, tokenIndex if buffer[position] != rune('Z') { goto l108 } position++ goto l107 l108: position, tokenIndex = position107, tokenIndex107 { position109 := position { position110, tokenIndex110 := position, tokenIndex if buffer[position] != rune('-') { goto l111 } position++ goto l110 l111: position, tokenIndex = position110, tokenIndex110 if buffer[position] != rune('+') { goto l104 } position++ } l110: if !_rules[ruletimeHour]() { goto l104 } if buffer[position] != rune(':') { goto l104 } position++ if !_rules[ruletimeMinute]() { goto l104 } add(ruletimeNumoffset, position109) } } l107: add(ruletimeOffset, position106) } goto l105 l104: position, tokenIndex = position104, tokenIndex104 } l105: 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 { position114 := position { position115 := position if !_rules[ruleinteger]() { goto l113 } { position116, tokenIndex116 := position, tokenIndex if !_rules[rulefrac]() { goto l117 } { position118, tokenIndex118 := position, tokenIndex if !_rules[ruleexp]() { goto l118 } goto l119 l118: position, tokenIndex = position118, tokenIndex118 } l119: goto l116 l117: position, tokenIndex = position116, tokenIndex116 { position120, tokenIndex120 := position, tokenIndex if !_rules[rulefrac]() { goto l120 } goto l121 l120: position, tokenIndex = position120, tokenIndex120 } l121: if !_rules[ruleexp]() { goto l113 } } l116: add(rulefloat, position115) } add(rulePegText, position114) } { add(ruleAction8, position) } goto l90 l113: position, tokenIndex = position90, tokenIndex90 { switch buffer[position] { case '{': { position124 := position if buffer[position] != rune('{') { goto l88 } position++ { add(ruleAction15, position) } if !_rules[rulews]() { goto l88 } { position126 := position l127: { position128, tokenIndex128 := position, tokenIndex if !_rules[rulekeyval]() { goto l128 } { position129, tokenIndex129 := position, tokenIndex { position131 := position if !_rules[rulews]() { goto l129 } if buffer[position] != rune(',') { goto l129 } position++ if !_rules[rulews]() { goto l129 } add(ruleinlineTableValSep, position131) } goto l130 l129: position, tokenIndex = position129, tokenIndex129 } l130: goto l127 l128: position, tokenIndex = position128, tokenIndex128 } add(ruleinlineTableKeyValues, position126) } if !_rules[rulews]() { goto l88 } if buffer[position] != rune('}') { goto l88 } position++ { add(ruleAction16, position) } add(ruleinlineTable, position124) } break case '[': { position133 := position { position134 := position if buffer[position] != rune('[') { goto l88 } position++ { add(ruleAction23, position) } if !_rules[rulewsnl]() { goto l88 } { position136, tokenIndex136 := position, tokenIndex { position138 := position if !_rules[ruleval]() { goto l136 } { add(ruleAction24, position) } l140: { position141, tokenIndex141 := position, tokenIndex if !_rules[rulewsnl]() { goto l141 } { position142, tokenIndex142 := position, tokenIndex if !_rules[rulecomment]() { goto l142 } goto l143 l142: position, tokenIndex = position142, tokenIndex142 } l143: if !_rules[rulewsnl]() { goto l141 } if !_rules[rulearraySep]() { goto l141 } if !_rules[rulewsnl]() { goto l141 } { position144, tokenIndex144 := position, tokenIndex if !_rules[rulecomment]() { goto l144 } goto l145 l144: position, tokenIndex = position144, tokenIndex144 } l145: if !_rules[rulewsnl]() { goto l141 } if !_rules[ruleval]() { goto l141 } { add(ruleAction25, position) } goto l140 l141: position, tokenIndex = position141, tokenIndex141 } if !_rules[rulewsnl]() { goto l136 } { position147, tokenIndex147 := position, tokenIndex if !_rules[rulearraySep]() { goto l147 } goto l148 l147: position, tokenIndex = position147, tokenIndex147 } l148: if !_rules[rulewsnl]() { goto l136 } { position149, tokenIndex149 := position, tokenIndex if !_rules[rulecomment]() { goto l149 } goto l150 l149: position, tokenIndex = position149, tokenIndex149 } l150: add(rulearrayValues, position138) } goto l137 l136: position, tokenIndex = position136, tokenIndex136 } l137: if !_rules[rulewsnl]() { goto l88 } if buffer[position] != rune(']') { goto l88 } position++ add(rulearray, position134) } add(rulePegText, position133) } { add(ruleAction12, position) } break case 'f', 't': { position152 := position { position153 := position { position154, tokenIndex154 := position, tokenIndex if buffer[position] != rune('t') { goto l155 } position++ if buffer[position] != rune('r') { goto l155 } position++ if buffer[position] != rune('u') { goto l155 } position++ if buffer[position] != rune('e') { goto l155 } position++ goto l154 l155: position, tokenIndex = position154, tokenIndex154 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++ } l154: add(ruleboolean, position153) } add(rulePegText, position152) } { add(ruleAction11, position) } break case '"', '\'': { position157 := position { position158 := position { position159, tokenIndex159 := position, tokenIndex { position161 := position if buffer[position] != rune('\'') { goto l160 } position++ if buffer[position] != rune('\'') { goto l160 } position++ if buffer[position] != rune('\'') { goto l160 } position++ { position162 := position { position163 := position l164: { position165, tokenIndex165 := position, tokenIndex { position166, tokenIndex166 := position, tokenIndex if buffer[position] != rune('\'') { goto l166 } position++ if buffer[position] != rune('\'') { goto l166 } position++ if buffer[position] != rune('\'') { goto l166 } position++ goto l165 l166: position, tokenIndex = position166, tokenIndex166 } { position167, tokenIndex167 := position, tokenIndex { position169 := position { position170, tokenIndex170 := position, tokenIndex if buffer[position] != rune('\t') { goto l171 } position++ goto l170 l171: position, tokenIndex = position170, tokenIndex170 if c := buffer[position]; c < rune(' ') || c > rune('\U0010ffff') { goto l168 } position++ } l170: add(rulemlLiteralChar, position169) } goto l167 l168: position, tokenIndex = position167, tokenIndex167 if !_rules[rulenewline]() { goto l165 } } l167: goto l164 l165: position, tokenIndex = position165, tokenIndex165 } add(rulemlLiteralBody, position163) } add(rulePegText, position162) } if buffer[position] != rune('\'') { goto l160 } position++ if buffer[position] != rune('\'') { goto l160 } position++ if buffer[position] != rune('\'') { goto l160 } position++ { add(ruleAction22, position) } add(rulemlLiteralString, position161) } goto l159 l160: position, tokenIndex = position159, tokenIndex159 { position174 := position if buffer[position] != rune('\'') { goto l173 } position++ { position175 := position l176: { position177, tokenIndex177 := position, tokenIndex { position178 := position { switch buffer[position] { case '\t': if buffer[position] != rune('\t') { goto l177 } position++ break case ' ', '!', '"', '#', '$', '%', '&': if c := buffer[position]; c < rune(' ') || c > rune('&') { goto l177 } position++ break default: if c := buffer[position]; c < rune('(') || c > rune('\U0010ffff') { goto l177 } position++ break } } add(ruleliteralChar, position178) } goto l176 l177: position, tokenIndex = position177, tokenIndex177 } add(rulePegText, position175) } if buffer[position] != rune('\'') { goto l173 } position++ { add(ruleAction21, position) } add(ruleliteralString, position174) } goto l159 l173: position, tokenIndex = position159, tokenIndex159 { position182 := position if buffer[position] != rune('"') { goto l181 } position++ if buffer[position] != rune('"') { goto l181 } position++ if buffer[position] != rune('"') { goto l181 } position++ { position183 := position l184: { position185, tokenIndex185 := position, tokenIndex { position186, tokenIndex186 := position, tokenIndex { position188 := position { position189, tokenIndex189 := position, tokenIndex if !_rules[rulebasicChar]() { goto l190 } goto l189 l190: position, tokenIndex = position189, tokenIndex189 if !_rules[rulenewline]() { goto l187 } } l189: add(rulePegText, position188) } { add(ruleAction20, position) } goto l186 l187: position, tokenIndex = position186, tokenIndex186 if !_rules[ruleescape]() { goto l185 } if !_rules[rulenewline]() { goto l185 } if !_rules[rulewsnl]() { goto l185 } } l186: goto l184 l185: position, tokenIndex = position185, tokenIndex185 } add(rulemlBasicBody, position183) } if buffer[position] != rune('"') { goto l181 } position++ if buffer[position] != rune('"') { goto l181 } position++ if buffer[position] != rune('"') { goto l181 } position++ { add(ruleAction19, position) } add(rulemlBasicString, position182) } goto l159 l181: position, tokenIndex = position159, tokenIndex159 { position193 := position { position194 := position if buffer[position] != rune('"') { goto l88 } position++ l195: { position196, tokenIndex196 := position, tokenIndex if !_rules[rulebasicChar]() { goto l196 } goto l195 l196: position, tokenIndex = position196, tokenIndex196 } if buffer[position] != rune('"') { goto l88 } position++ add(rulePegText, position194) } { add(ruleAction18, position) } add(rulebasicString, position193) } } l159: add(rulestring, position158) } add(rulePegText, position157) } { add(ruleAction10, position) } break default: { position199 := position if !_rules[ruleinteger]() { goto l88 } add(rulePegText, position199) } { 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 <- <(tableKeyComp (tableKeySep tableKeyComp)*)> */ func() bool { position206, tokenIndex206 := position, tokenIndex { position207 := position if !_rules[ruletableKeyComp]() { goto l206 } l208: { position209, tokenIndex209 := position, tokenIndex { position210 := position if !_rules[rulews]() { goto l209 } if buffer[position] != rune('.') { goto l209 } position++ if !_rules[rulews]() { goto l209 } add(ruletableKeySep, position210) } if !_rules[ruletableKeyComp]() { goto l209 } goto l208 l209: position, tokenIndex = position209, tokenIndex209 } add(ruletableKey, position207) } return true l206: position, tokenIndex = position206, tokenIndex206 return false }, /* 17 tableKeyComp <- <(key Action17)> */ func() bool { position211, tokenIndex211 := position, tokenIndex { position212 := position if !_rules[rulekey]() { goto l211 } { add(ruleAction17, position) } add(ruletableKeyComp, position212) } return true l211: position, tokenIndex = position211, tokenIndex211 return false }, /* 18 tableKeySep <- <(ws '.' ws)> */ nil, /* 19 inlineTableValSep <- <(ws ',' ws)> */ nil, /* 20 integer <- <(('-' / '+')? int)> */ func() bool { position216, tokenIndex216 := position, tokenIndex { position217 := position { position218, tokenIndex218 := position, tokenIndex { position220, tokenIndex220 := position, tokenIndex if buffer[position] != rune('-') { goto l221 } position++ goto l220 l221: position, tokenIndex = position220, tokenIndex220 if buffer[position] != rune('+') { goto l218 } position++ } l220: goto l219 l218: position, tokenIndex = position218, tokenIndex218 } l219: { position222 := position { position223, tokenIndex223 := position, tokenIndex if c := buffer[position]; c < rune('1') || c > rune('9') { goto l224 } position++ { position227, tokenIndex227 := position, tokenIndex if !_rules[ruledigit]() { goto l228 } goto l227 l228: position, tokenIndex = position227, tokenIndex227 if buffer[position] != rune('_') { goto l224 } position++ if !_rules[ruledigit]() { goto l224 } } l227: l225: { position226, tokenIndex226 := position, tokenIndex { position229, tokenIndex229 := position, tokenIndex if !_rules[ruledigit]() { goto l230 } goto l229 l230: position, tokenIndex = position229, tokenIndex229 if buffer[position] != rune('_') { goto l226 } position++ if !_rules[ruledigit]() { goto l226 } } l229: goto l225 l226: position, tokenIndex = position226, tokenIndex226 } goto l223 l224: position, tokenIndex = position223, tokenIndex223 if !_rules[ruledigit]() { goto l216 } } l223: add(ruleint, position222) } add(ruleinteger, position217) } return true l216: position, tokenIndex = position216, tokenIndex216 return false }, /* 21 int <- <(([1-9] (digit / ('_' digit))+) / digit)> */ nil, /* 22 float <- <(integer ((frac exp?) / (frac? exp)))> */ nil, /* 23 frac <- <('.' digit (digit / ('_' digit))*)> */ func() bool { position233, tokenIndex233 := position, tokenIndex { position234 := position if buffer[position] != rune('.') { goto l233 } position++ if !_rules[ruledigit]() { goto l233 } l235: { position236, tokenIndex236 := position, tokenIndex { position237, tokenIndex237 := position, tokenIndex if !_rules[ruledigit]() { goto l238 } goto l237 l238: position, tokenIndex = position237, tokenIndex237 if buffer[position] != rune('_') { goto l236 } position++ if !_rules[ruledigit]() { goto l236 } } l237: goto l235 l236: position, tokenIndex = position236, tokenIndex236 } add(rulefrac, position234) } return true l233: position, tokenIndex = position233, tokenIndex233 return false }, /* 24 exp <- <(('e' / 'E') ('-' / '+')? digit (digit / ('_' digit))*)> */ func() bool { position239, tokenIndex239 := position, tokenIndex { position240 := position { position241, tokenIndex241 := position, tokenIndex if buffer[position] != rune('e') { goto l242 } position++ goto l241 l242: position, tokenIndex = position241, tokenIndex241 if buffer[position] != rune('E') { goto l239 } position++ } l241: { position243, tokenIndex243 := position, tokenIndex { position245, tokenIndex245 := position, tokenIndex if buffer[position] != rune('-') { goto l246 } position++ goto l245 l246: position, tokenIndex = position245, tokenIndex245 if buffer[position] != rune('+') { goto l243 } position++ } l245: goto l244 l243: position, tokenIndex = position243, tokenIndex243 } l244: if !_rules[ruledigit]() { goto l239 } l247: { position248, tokenIndex248 := position, tokenIndex { position249, tokenIndex249 := position, tokenIndex if !_rules[ruledigit]() { goto l250 } goto l249 l250: position, tokenIndex = position249, tokenIndex249 if buffer[position] != rune('_') { goto l248 } position++ if !_rules[ruledigit]() { goto l248 } } l249: goto l247 l248: position, tokenIndex = position248, tokenIndex248 } add(ruleexp, position240) } return true l239: position, tokenIndex = position239, tokenIndex239 return false }, /* 25 string <- <(mlLiteralString / literalString / mlBasicString / basicString)> */ nil, /* 26 basicString <- <(<('"' basicChar* '"')> Action18)> */ nil, /* 27 basicChar <- <(basicUnescaped / escaped)> */ func() bool { position253, tokenIndex253 := position, tokenIndex { position254 := position { position255, tokenIndex255 := position, tokenIndex { position257 := position { switch buffer[position] { case ' ', '!': if c := buffer[position]; c < rune(' ') || c > rune('!') { goto l256 } 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 l256 } position++ break default: if c := buffer[position]; c < rune(']') || c > rune('\U0010ffff') { goto l256 } position++ break } } add(rulebasicUnescaped, position257) } goto l255 l256: position, tokenIndex = position255, tokenIndex255 { position259 := position if !_rules[ruleescape]() { goto l253 } { switch buffer[position] { case 'U': if buffer[position] != rune('U') { goto l253 } position++ if !_rules[rulehexQuad]() { goto l253 } if !_rules[rulehexQuad]() { goto l253 } break case 'u': if buffer[position] != rune('u') { goto l253 } position++ if !_rules[rulehexQuad]() { goto l253 } break case '\\': if buffer[position] != rune('\\') { goto l253 } position++ break case '/': if buffer[position] != rune('/') { goto l253 } position++ break case '"': if buffer[position] != rune('"') { goto l253 } position++ break case 'r': if buffer[position] != rune('r') { goto l253 } position++ break case 'f': if buffer[position] != rune('f') { goto l253 } position++ break case 'n': if buffer[position] != rune('n') { goto l253 } position++ break case 't': if buffer[position] != rune('t') { goto l253 } position++ break default: if buffer[position] != rune('b') { goto l253 } position++ break } } add(ruleescaped, position259) } } l255: add(rulebasicChar, position254) } return true l253: position, tokenIndex = position253, tokenIndex253 return false }, /* 28 escaped <- <(escape ((&('U') ('U' hexQuad hexQuad)) | (&('u') ('u' hexQuad)) | (&('\\') '\\') | (&('/') '/') | (&('"') '"') | (&('r') 'r') | (&('f') 'f') | (&('n') 'n') | (&('t') 't') | (&('b') 'b')))> */ nil, /* 29 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, /* 30 escape <- <'\\'> */ func() bool { position263, tokenIndex263 := position, tokenIndex { position264 := position if buffer[position] != rune('\\') { goto l263 } position++ add(ruleescape, position264) } return true l263: position, tokenIndex = position263, tokenIndex263 return false }, /* 31 mlBasicString <- <('"' '"' '"' mlBasicBody ('"' '"' '"') Action19)> */ nil, /* 32 mlBasicBody <- <((<(basicChar / newline)> Action20) / (escape newline wsnl))*> */ nil, /* 33 literalString <- <('\'' '\'' Action21)> */ nil, /* 34 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, /* 35 mlLiteralString <- <('\'' '\'' '\'' ('\'' '\'' '\'') Action22)> */ nil, /* 36 mlLiteralBody <- <(!('\'' '\'' '\'') (mlLiteralChar / newline))*> */ nil, /* 37 mlLiteralChar <- <('\t' / [ -\U0010ffff])> */ nil, /* 38 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 { position272, tokenIndex272 := position, tokenIndex { position273 := position { switch buffer[position] { case 'a', 'b', 'c', 'd', 'e', 'f': if c := buffer[position]; c < rune('a') || c > rune('f') { goto l272 } position++ break case 'A', 'B', 'C', 'D', 'E', 'F': if c := buffer[position]; c < rune('A') || c > rune('F') { goto l272 } position++ break default: if c := buffer[position]; c < rune('0') || c > rune('9') { goto l272 } position++ break } } add(rulehexdigit, position273) } return true l272: position, tokenIndex = position272, tokenIndex272 return false }, /* 39 hexQuad <- <(hexdigit hexdigit hexdigit hexdigit)> */ func() bool { position275, tokenIndex275 := position, tokenIndex { position276 := position if !_rules[rulehexdigit]() { goto l275 } if !_rules[rulehexdigit]() { goto l275 } if !_rules[rulehexdigit]() { goto l275 } if !_rules[rulehexdigit]() { goto l275 } add(rulehexQuad, position276) } return true l275: position, tokenIndex = position275, tokenIndex275 return false }, /* 40 boolean <- <(('t' 'r' 'u' 'e') / ('f' 'a' 'l' 's' 'e'))> */ nil, /* 41 dateFullYear <- */ nil, /* 42 dateMonth <- */ nil, /* 43 dateMDay <- */ nil, /* 44 timeHour <- */ func() bool { position281, tokenIndex281 := position, tokenIndex { position282 := position if !_rules[ruledigitDual]() { goto l281 } add(ruletimeHour, position282) } return true l281: position, tokenIndex = position281, tokenIndex281 return false }, /* 45 timeMinute <- */ func() bool { position283, tokenIndex283 := position, tokenIndex { position284 := position if !_rules[ruledigitDual]() { goto l283 } add(ruletimeMinute, position284) } return true l283: position, tokenIndex = position283, tokenIndex283 return false }, /* 46 timeSecond <- */ nil, /* 47 timeSecfrac <- <('.' digit+)> */ nil, /* 48 timeNumoffset <- <(('-' / '+') timeHour ':' timeMinute)> */ nil, /* 49 timeOffset <- <('Z' / timeNumoffset)> */ nil, /* 50 partialTime <- <(timeHour ':' timeMinute ':' timeSecond timeSecfrac?)> */ func() bool { position289, tokenIndex289 := position, tokenIndex { position290 := position if !_rules[ruletimeHour]() { goto l289 } if buffer[position] != rune(':') { goto l289 } position++ if !_rules[ruletimeMinute]() { goto l289 } if buffer[position] != rune(':') { goto l289 } position++ { position291 := position if !_rules[ruledigitDual]() { goto l289 } add(ruletimeSecond, position291) } { position292, tokenIndex292 := position, tokenIndex { position294 := position if buffer[position] != rune('.') { goto l292 } position++ if !_rules[ruledigit]() { goto l292 } l295: { position296, tokenIndex296 := position, tokenIndex if !_rules[ruledigit]() { goto l296 } goto l295 l296: position, tokenIndex = position296, tokenIndex296 } add(ruletimeSecfrac, position294) } goto l293 l292: position, tokenIndex = position292, tokenIndex292 } l293: add(rulepartialTime, position290) } return true l289: position, tokenIndex = position289, tokenIndex289 return false }, /* 51 fullDate <- <(dateFullYear '-' dateMonth '-' dateMDay)> */ nil, /* 52 fullTime <- <(partialTime timeOffset?)> */ nil, /* 53 datetime <- <((fullDate ('T' fullTime)?) / partialTime)> */ nil, /* 54 digit <- <[0-9]> */ func() bool { position300, tokenIndex300 := position, tokenIndex { position301 := position if c := buffer[position]; c < rune('0') || c > rune('9') { goto l300 } position++ add(ruledigit, position301) } return true l300: position, tokenIndex = position300, tokenIndex300 return false }, /* 55 digitDual <- <(digit digit)> */ func() bool { position302, tokenIndex302 := position, tokenIndex { position303 := position if !_rules[ruledigit]() { goto l302 } if !_rules[ruledigit]() { goto l302 } add(ruledigitDual, position303) } return true l302: position, tokenIndex = position302, tokenIndex302 return false }, /* 56 digitQuad <- <(digitDual digitDual)> */ nil, /* 57 array <- <('[' Action23 wsnl arrayValues? wsnl ']')> */ nil, /* 58 arrayValues <- <(val Action24 (wsnl comment? wsnl arraySep wsnl comment? wsnl val Action25)* wsnl arraySep? wsnl comment?)> */ nil, /* 59 arraySep <- <','> */ func() bool { position307, tokenIndex307 := position, tokenIndex { position308 := position if buffer[position] != rune(',') { goto l307 } position++ add(rulearraySep, position308) } return true l307: position, tokenIndex = position307, tokenIndex307 return false }, /* 61 Action0 <- <{ _ = buffer }> */ nil, nil, /* 63 Action1 <- <{ p.SetTableString(begin, end) }> */ nil, /* 64 Action2 <- <{ p.AddLineCount(end - begin) }> */ nil, /* 65 Action3 <- <{ p.AddLineCount(end - begin) }> */ nil, /* 66 Action4 <- <{ p.AddKeyValue() }> */ nil, /* 67 Action5 <- <{ p.SetKey(p.buffer, begin, end) }> */ nil, /* 68 Action6 <- <{ p.SetKey(p.buffer, begin, end) }> */ nil, /* 69 Action7 <- <{ p.SetTime(begin, end) }> */ nil, /* 70 Action8 <- <{ p.SetFloat64(begin, end) }> */ nil, /* 71 Action9 <- <{ p.SetInt64(begin, end) }> */ nil, /* 72 Action10 <- <{ p.SetString(begin, end) }> */ nil, /* 73 Action11 <- <{ p.SetBool(begin, end) }> */ nil, /* 74 Action12 <- <{ p.SetArray(begin, end) }> */ nil, /* 75 Action13 <- <{ p.SetTable(p.buffer, begin, end) }> */ nil, /* 76 Action14 <- <{ p.SetArrayTable(p.buffer, begin, end) }> */ nil, /* 77 Action15 <- <{ p.StartInlineTable() }> */ nil, /* 78 Action16 <- <{ p.EndInlineTable() }> */ nil, /* 79 Action17 <- <{ p.AddTableKey() }> */ nil, /* 80 Action18 <- <{ p.SetBasicString(p.buffer, begin, end) }> */ nil, /* 81 Action19 <- <{ p.SetMultilineString() }> */ nil, /* 82 Action20 <- <{ p.AddMultilineBasicBody(p.buffer, begin, end) }> */ nil, /* 83 Action21 <- <{ p.SetLiteralString(p.buffer, begin, end) }> */ nil, /* 84 Action22 <- <{ p.SetMultilineLiteralString(p.buffer, begin, end) }> */ nil, /* 85 Action23 <- <{ p.StartArray() }> */ nil, /* 86 Action24 <- <{ p.AddArrayVal() }> */ nil, /* 87 Action25 <- <{ p.AddArrayVal() }> */ nil, } p.rules = _rules }