summaryrefslogtreecommitdiff
path: root/scalatexApi/src/main/scala/scalatex/stages/Parser.scala
diff options
context:
space:
mode:
authorLi Haoyi <haoyi@dropbox.com>2014-11-04 22:13:05 -0800
committerLi Haoyi <haoyi@dropbox.com>2014-11-04 22:13:05 -0800
commita99ca0a1c4df83638d888d316a453b6516477a08 (patch)
treeea8be36353210826660582a9a2d11748c79d594b /scalatexApi/src/main/scala/scalatex/stages/Parser.scala
parent938c026bef8d4ce10848831479944642ac6da853 (diff)
downloadhands-on-scala-js-a99ca0a1c4df83638d888d316a453b6516477a08.tar.gz
hands-on-scala-js-a99ca0a1c4df83638d888d316a453b6516477a08.tar.bz2
hands-on-scala-js-a99ca0a1c4df83638d888d316a453b6516477a08.zip
Narrowed it down to a problem in parboiled2??? It seem like if "f" gets printed, "B" should get printed too...
Diffstat (limited to 'scalatexApi/src/main/scala/scalatex/stages/Parser.scala')
-rw-r--r--scalatexApi/src/main/scala/scalatex/stages/Parser.scala19
1 files changed, 12 insertions, 7 deletions
diff --git a/scalatexApi/src/main/scala/scalatex/stages/Parser.scala b/scalatexApi/src/main/scala/scalatex/stages/Parser.scala
index 3b75d54..48138af 100644
--- a/scalatexApi/src/main/scala/scalatex/stages/Parser.scala
+++ b/scalatexApi/src/main/scala/scalatex/stages/Parser.scala
@@ -73,17 +73,21 @@ class Parser(input: ParserInput, indent: Int = 0) extends ScalaSyntax(input) {
def IfElse = rule{
(IfElse1 | IfElse2) ~> (Ast.Block.IfElse(_, _, _))
}
+
+ def ForHead = rule{
+ "@" ~ capture("for" ~ '(' ~ Enumerators ~ ')'~ run(println("f")))
+ }
def ForLoop = rule{
- "@" ~
- capture("for" ~ ('(' ~ Enumerators ~ ')' | '{' ~ Enumerators ~ '}')) ~
- BraceBlock ~> (Ast.Block.For(_, _))
+ run(println("A")) ~ ForHead ~ run(println("B")) ~
+ BraceBlock ~ run(println("C")) ~> (Ast.Block.For(_, _))
}
def LoneForLoop = rule{
- "@" ~
- capture("for" ~ ('(' ~ Enumerators ~ ')' | '{' ~ Enumerators ~ '}')) ~
+ (capture(Indent) ~> (Ast.Block.Text(_))) ~
+ ForHead ~
IndentBlock ~>
(Ast.Block.For(_, _))
}
+
def ScalaChain = rule {
Code ~ zeroOrMore(Extension) ~> {Ast.Chain(_, _)}
}
@@ -103,10 +107,11 @@ class Parser(input: ParserInput, indent: Int = 0) extends ScalaSyntax(input) {
def BraceBlock: Rule1[Ast.Block] = rule{ '{' ~ Body ~ '}' }
def BodyItem: Rule1[Seq[Ast.Block.Sub]] = rule{
+ ForLoop ~> (Seq(_)) |
+ LoneForLoop ~> (Seq(_, _)) |
+ IfElse ~> (Seq(_)) |
LoneScalaChain ~> (Seq(_, _)) |
HeaderBlock ~> (Seq(_)) |
- ForLoop ~> (Seq(_)) |
- LoneForLoop ~> (Seq(_)) |
TextNot("@}") ~> (Seq(_)) |
(capture(Indent) ~> (x => Seq(Ast.Block.Text(x)))) |
(capture(BlankLine) ~> (x => Seq(Ast.Block.Text(x)))) |