From c7f3c38a327928d24838088b2bd7630f2208e595 Mon Sep 17 00:00:00 2001 From: Mark Lister Date: Wed, 24 Sep 2014 15:03:12 +0200 Subject: Fix for issue #12 escape sharp --- README.md | 1 + src/main/scala/spray/boilerplate/TemplateParser.scala | 3 ++- src/test/scala/spray/boilerplate/GeneratorSpecs.scala | 2 +- 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" -- cgit v1.2.3