Compatiblity with the latest parsekit version.
This commit is contained in:
parent
0ac419fb9e
commit
9ab468a3ba
|
@ -13,7 +13,7 @@ var comment = c.Seq(
|
||||||
|
|
||||||
func startComment(p *parsekit.P) {
|
func startComment(p *parsekit.P) {
|
||||||
p.Expects("comment")
|
p.Expects("comment")
|
||||||
if p.On(comment).Accept().End() {
|
if p.On(comment).Accept() {
|
||||||
p.EmitLiteral(ItemComment)
|
p.EmitLiteral(ItemComment)
|
||||||
p.RouteReturn()
|
p.RouteReturn()
|
||||||
}
|
}
|
||||||
|
|
|
@ -34,9 +34,12 @@ var (
|
||||||
|
|
||||||
func startKeyValuePair(p *parsekit.P) {
|
func startKeyValuePair(p *parsekit.P) {
|
||||||
switch {
|
switch {
|
||||||
case p.On(a.WhitespaceAndNewlines).Skip().RouteRepeat().End():
|
case p.On(a.WhitespaceAndNewlines).Skip():
|
||||||
case p.On(a.Hash).RouteTo(startComment).ThenReturnHere().End():
|
p.RouteRepeat()
|
||||||
case p.On(startOfKey).RouteTo(startKey).End():
|
case p.On(a.Hash).Stay():
|
||||||
|
p.RouteTo(startComment).ThenReturnHere()
|
||||||
|
case p.On(startOfKey).Stay():
|
||||||
|
p.RouteTo(startKey)
|
||||||
default:
|
default:
|
||||||
p.ExpectEndOfFile()
|
p.ExpectEndOfFile()
|
||||||
}
|
}
|
||||||
|
@ -44,19 +47,21 @@ func startKeyValuePair(p *parsekit.P) {
|
||||||
|
|
||||||
func startKey(p *parsekit.P) {
|
func startKey(p *parsekit.P) {
|
||||||
p.Expects("a key name")
|
p.Expects("a key name")
|
||||||
p.On(bareKeyRune).RouteTo(startBareKey)
|
if p.On(bareKeyRune).Stay() {
|
||||||
|
p.RouteTo(startBareKey)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func startBareKey(p *parsekit.P) {
|
func startBareKey(p *parsekit.P) {
|
||||||
p.Expects("a bare key name")
|
p.Expects("a bare key name")
|
||||||
if p.On(bareKey).Accept().End() {
|
if p.On(bareKey).Accept() {
|
||||||
p.EmitLiteral(ItemKey)
|
p.EmitLiteral(ItemKey)
|
||||||
p.RouteTo(endOfKeyOrDot)
|
p.RouteTo(endOfKeyOrDot)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func endOfKeyOrDot(p *parsekit.P) {
|
func endOfKeyOrDot(p *parsekit.P) {
|
||||||
if p.On(keySeparatorDot).Skip().End() {
|
if p.On(keySeparatorDot).Skip() {
|
||||||
p.Emit(ItemKeyDot, ".")
|
p.Emit(ItemKeyDot, ".")
|
||||||
p.RouteTo(startKey)
|
p.RouteTo(startKey)
|
||||||
} else {
|
} else {
|
||||||
|
@ -66,7 +71,7 @@ func endOfKeyOrDot(p *parsekit.P) {
|
||||||
|
|
||||||
func startAssignment(p *parsekit.P) {
|
func startAssignment(p *parsekit.P) {
|
||||||
p.Expects("a value assignment")
|
p.Expects("a value assignment")
|
||||||
if p.On(keyAssignment).Skip().End() {
|
if p.On(keyAssignment).Skip() {
|
||||||
p.Emit(ItemAssignment, "=")
|
p.Emit(ItemAssignment, "=")
|
||||||
p.RouteTo(startValue)
|
p.RouteTo(startValue)
|
||||||
}
|
}
|
||||||
|
@ -76,5 +81,7 @@ func startAssignment(p *parsekit.P) {
|
||||||
// Datetime, Array, or Inline Table. Unspecified values are invalid.
|
// Datetime, Array, or Inline Table. Unspecified values are invalid.
|
||||||
func startValue(p *parsekit.P) {
|
func startValue(p *parsekit.P) {
|
||||||
p.Expects("a value")
|
p.Expects("a value")
|
||||||
p.On(c.Any(a.SingleQuote, a.DoubleQuote)).RouteTo(startString)
|
if p.On(c.Any(a.SingleQuote, a.DoubleQuote)).Stay() {
|
||||||
|
p.RouteTo(startString)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -36,25 +36,33 @@ var (
|
||||||
func startString(p *parsekit.P) {
|
func startString(p *parsekit.P) {
|
||||||
p.Expects("a string value")
|
p.Expects("a string value")
|
||||||
switch {
|
switch {
|
||||||
case p.On(doubleQuote3).RouteTo(startMultiLineBasicString).End():
|
case p.On(doubleQuote3).Stay():
|
||||||
case p.On(a.DoubleQuote).RouteTo(startBasicString).End():
|
p.RouteTo(startMultiLineBasicString)
|
||||||
|
case p.On(a.DoubleQuote).Stay():
|
||||||
|
p.RouteTo(startBasicString)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func startBasicString(p *parsekit.P) {
|
func startBasicString(p *parsekit.P) {
|
||||||
p.Expects("a basic string")
|
p.Expects("a basic string")
|
||||||
p.On(a.DoubleQuote).Skip().RouteTo(parseBasicString).ThenTo(basicStringSpecifics)
|
if p.On(a.DoubleQuote).Skip() {
|
||||||
|
p.RouteTo(parseBasicString).ThenTo(basicStringSpecifics)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func parseBasicString(p *parsekit.P) {
|
func parseBasicString(p *parsekit.P) {
|
||||||
p.Expects("string contents")
|
p.Expects("string contents")
|
||||||
switch {
|
switch {
|
||||||
case p.On(charThatMustBeEscaped).End():
|
case p.On(charThatMustBeEscaped).Stay():
|
||||||
p.EmitError("invalid character in basic string: %q (must be escaped)", p.LastMatch)
|
p.EmitError("invalid character in basic string: %q (must be escaped)", p.LastMatch)
|
||||||
case p.On(validEscape).Accept().RouteRepeat().End():
|
case p.On(validEscape).Accept():
|
||||||
case p.On(a.Backslash).RouteReturn().End():
|
p.RouteRepeat()
|
||||||
case p.On(a.DoubleQuote).RouteReturn().End():
|
case p.On(a.Backslash).Stay():
|
||||||
case p.On(a.AnyRune).Accept().RouteRepeat().End():
|
p.RouteReturn()
|
||||||
|
case p.On(a.DoubleQuote).Stay():
|
||||||
|
p.RouteReturn()
|
||||||
|
case p.On(a.AnyRune).Accept():
|
||||||
|
p.RouteRepeat()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -66,17 +74,17 @@ func parseBasicString(p *parsekit.P) {
|
||||||
func basicStringSpecifics(p *parsekit.P) {
|
func basicStringSpecifics(p *parsekit.P) {
|
||||||
p.Expects("string contents")
|
p.Expects("string contents")
|
||||||
switch {
|
switch {
|
||||||
case p.On(a.DoubleQuote).Skip().End():
|
case p.On(a.DoubleQuote).Skip():
|
||||||
p.EmitInterpreted(ItemString)
|
p.EmitInterpreted(ItemString)
|
||||||
p.RouteTo(startKeyValuePair)
|
p.RouteTo(startKeyValuePair)
|
||||||
case p.On(a.Backslash).End():
|
case p.On(a.Backslash).Stay():
|
||||||
p.EmitError("invalid escape sequence")
|
p.EmitError("invalid escape sequence")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func startMultiLineBasicString(p *parsekit.P) {
|
func startMultiLineBasicString(p *parsekit.P) {
|
||||||
p.Expects("a multi-line basic string")
|
p.Expects("a multi-line basic string")
|
||||||
if p.On(doubleQuote3).Skip().End() {
|
if p.On(doubleQuote3).Skip() {
|
||||||
p.EmitError("not yet implemented")
|
p.EmitError("not yet implemented")
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue