From 06ebb66bb30c787815170d96c7088a019bb00cae Mon Sep 17 00:00:00 2001 From: Li Haoyi Date: Mon, 17 Nov 2014 23:19:43 -0800 Subject: Handle cases like `val __K__0__1___+++ = 10` --- scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala') diff --git a/scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala b/scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala index bd142a1..157b0bb 100644 --- a/scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala +++ b/scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala @@ -33,4 +33,19 @@ trait Basic { self: Parser => def Lower = rule { "a" - "z" | "$" | "_" | CharPredicate.from(_.isLower) } def Upper = rule { "A" - "Z" | CharPredicate.from(_.isUpper) } } + /** + * Most keywords don't just require the correct characters to match, + * they have to ensure that subsequent characters *don't* match in + * order for it to be a keyword. This enforces that rule for key-words + * (W) and key-operators (O) which have different non-match criteria. + */ + object Key { + def W(s: String) = rule { + str(s) ~ !(Basic.Letter | Basic.Digit) + } + + def O(s: String) = rule { + str(s) ~ !Basic.OperatorChar + } + } } -- cgit v1.2.3