Compatiblity with the latest parsekit version.

This commit is contained in:
Maurice Makaay 2019-05-25 22:53:37 +00:00
parent 0ac419fb9e
commit 9ab468a3ba
3 changed files with 35 additions and 20 deletions

View File

@ -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()
} }

View File

@ -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)
}
} }

View File

@ -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")
} }
} }