summaryrefslogtreecommitdiff
path: root/scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala
diff options
context:
space:
mode:
Diffstat (limited to 'scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala')
-rw-r--r--scalatexApi/src/main/scala/scalaparser/syntax/Basic.scala15
1 files changed, 15 insertions, 0 deletions
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
+ }
+ }
}