aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Lister <toomuchspam@nowhere>2014-09-24 15:03:12 +0200
committerMark Lister <toomuchspam@nowhere>2014-09-24 15:03:12 +0200
commitc7f3c38a327928d24838088b2bd7630f2208e595 (patch)
treee012b8c09e9d4f6ef1d51736857d439fdb87f97c
parent6f6e12bad651da9d659611f01f0fb2d5add91f41 (diff)
downloadsbt-boilerplate-c7f3c38a327928d24838088b2bd7630f2208e595.tar.gz
sbt-boilerplate-c7f3c38a327928d24838088b2bd7630f2208e595.tar.bz2
sbt-boilerplate-c7f3c38a327928d24838088b2bd7630f2208e595.zip
Fix for issue #12 escape sharp
-rw-r--r--README.md1
-rw-r--r--src/main/scala/spray/boilerplate/TemplateParser.scala3
-rw-r--r--src/test/scala/spray/boilerplate/GeneratorSpecs.scala2
3 files changed, 4 insertions, 2 deletions
diff --git a/README.md b/README.md
index 059241a..576ccd7 100644
--- a/README.md
+++ b/README.md
@@ -21,6 +21,7 @@ expansion. Expansion follows these rules:
the starting `[` and `#` of an expansion. Either `start` or `end` can be omitted in which case the defaults are assumed.
- Everywhere digit `1` is replaced by `i`, digit `0` is replaced by `i - 1`, and digit `2` is replaced by `i + 1`
unless the digit is prefixed with `##`.
+ - To encode the sharp(#) character precede it with a backslash eg "\#".
## Examples
diff --git a/src/main/scala/spray/boilerplate/TemplateParser.scala b/src/main/scala/spray/boilerplate/TemplateParser.scala
index 857b1cb..9972be2 100644
--- a/src/main/scala/spray/boilerplate/TemplateParser.scala
+++ b/src/main/scala/spray/boilerplate/TemplateParser.scala
@@ -42,12 +42,13 @@ object TemplateParser extends RegexParsers {
lazy val element: Parser[TemplateElement] = offset | literalString | expand
lazy val offset: Parser[Offset] = offsetChars ^^ (s ⇒ Offset(s.toInt))
- lazy val literalString: Parser[LiteralString] = rep1(escapedLiteralNumber | literalChar) ^^ (chs ⇒ LiteralString(chs.mkString))
+ lazy val literalString: Parser[LiteralString] = rep1(escapedSharp | escapedLiteralNumber | literalChar) ^^ (chs ⇒ LiteralString(chs.mkString))
lazy val literalChar: Parser[Char] =
not(expandStart | """#[^\]]*\]""".r | offsetChars) ~> elem("Any character", _ != EOI)
lazy val offsetChars = "[012]".r
+ lazy val escapedSharp: Parser[Char] = "\\#" ^^ (_.drop(1).head)
lazy val escapedLiteralNumber: Parser[Char] = "##" ~> offsetChars ^^ (_.head)
lazy val outsideLiteralString: Parser[LiteralString] = rep1(outsideLiteralChar) ^^ (chs ⇒ LiteralString(chs.mkString))
diff --git a/src/test/scala/spray/boilerplate/GeneratorSpecs.scala b/src/test/scala/spray/boilerplate/GeneratorSpecs.scala
index d1f6af8..09dfe53 100644
--- a/src/test/scala/spray/boilerplate/GeneratorSpecs.scala
+++ b/src/test/scala/spray/boilerplate/GeneratorSpecs.scala
@@ -17,7 +17,7 @@ class GeneratorSpecs extends Specification {
gen4("[#a2#]") === "a2, a3, a4, a5"
}
"encode sharp" in {
- gen4("[#a#1#]") === "a#1, a#2, a#3, a#4" pendingUntilFixed
+ gen4("[#a\\#1#]") === "a#1, a#2, a#3, a#4"
}
"don't inflate when quoted in expansion" in {
gen4("[#a1 ##1#]") === "a1 1, a2 1, a3 1, a4 1"