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) {
p.Expects("comment")
if p.On(comment).Accept().End() {
if p.On(comment).Accept() {
p.EmitLiteral(ItemComment)
p.RouteReturn()
}

View File

@ -34,9 +34,12 @@ var (
func startKeyValuePair(p *parsekit.P) {
switch {
case p.On(a.WhitespaceAndNewlines).Skip().RouteRepeat().End():
case p.On(a.Hash).RouteTo(startComment).ThenReturnHere().End():
case p.On(startOfKey).RouteTo(startKey).End():
case p.On(a.WhitespaceAndNewlines).Skip():
p.RouteRepeat()
case p.On(a.Hash).Stay():
p.RouteTo(startComment).ThenReturnHere()
case p.On(startOfKey).Stay():
p.RouteTo(startKey)
default:
p.ExpectEndOfFile()
}
@ -44,19 +47,21 @@ func startKeyValuePair(p *parsekit.P) {
func startKey(p *parsekit.P) {
p.Expects("a key name")
p.On(bareKeyRune).RouteTo(startBareKey)
if p.On(bareKeyRune).Stay() {
p.RouteTo(startBareKey)
}
}
func startBareKey(p *parsekit.P) {
p.Expects("a bare key name")
if p.On(bareKey).Accept().End() {
if p.On(bareKey).Accept() {
p.EmitLiteral(ItemKey)
p.RouteTo(endOfKeyOrDot)
}
}
func endOfKeyOrDot(p *parsekit.P) {
if p.On(keySeparatorDot).Skip().End() {
if p.On(keySeparatorDot).Skip() {
p.Emit(ItemKeyDot, ".")
p.RouteTo(startKey)
} else {
@ -66,7 +71,7 @@ func endOfKeyOrDot(p *parsekit.P) {
func startAssignment(p *parsekit.P) {
p.Expects("a value assignment")
if p.On(keyAssignment).Skip().End() {
if p.On(keyAssignment).Skip() {
p.Emit(ItemAssignment, "=")
p.RouteTo(startValue)
}
@ -76,5 +81,7 @@ func startAssignment(p *parsekit.P) {
// Datetime, Array, or Inline Table. Unspecified values are invalid.
func startValue(p *parsekit.P) {
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) {
p.Expects("a string value")
switch {
case p.On(doubleQuote3).RouteTo(startMultiLineBasicString).End():
case p.On(a.DoubleQuote).RouteTo(startBasicString).End():
case p.On(doubleQuote3).Stay():
p.RouteTo(startMultiLineBasicString)
case p.On(a.DoubleQuote).Stay():
p.RouteTo(startBasicString)
}
}
func startBasicString(p *parsekit.P) {
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) {
p.Expects("string contents")
switch {
case p.On(charThatMustBeEscaped).End():
case p.On(charThatMustBeEscaped).Stay():
p.EmitError("invalid character in basic string: %q (must be escaped)", p.LastMatch)
case p.On(validEscape).Accept().RouteRepeat().End():
case p.On(a.Backslash).RouteReturn().End():
case p.On(a.DoubleQuote).RouteReturn().End():
case p.On(a.AnyRune).Accept().RouteRepeat().End():
case p.On(validEscape).Accept():
p.RouteRepeat()
case p.On(a.Backslash).Stay():
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) {
p.Expects("string contents")
switch {
case p.On(a.DoubleQuote).Skip().End():
case p.On(a.DoubleQuote).Skip():
p.EmitInterpreted(ItemString)
p.RouteTo(startKeyValuePair)
case p.On(a.Backslash).End():
case p.On(a.Backslash).Stay():
p.EmitError("invalid escape sequence")
}
}
func startMultiLineBasicString(p *parsekit.P) {
p.Expects("a multi-line basic string")
if p.On(doubleQuote3).Skip().End() {
if p.On(doubleQuote3).Skip() {
p.EmitError("not yet implemented")
}
}