diff options
author | Li Haoyi <haoyi@dropbox.com> | 2014-11-04 22:13:05 -0800 |
---|---|---|
committer | Li Haoyi <haoyi@dropbox.com> | 2014-11-04 22:13:05 -0800 |
commit | a99ca0a1c4df83638d888d316a453b6516477a08 (patch) | |
tree | ea8be36353210826660582a9a2d11748c79d594b /scalatexApi/src/main/scala/scalatex/stages/Parser.scala | |
parent | 938c026bef8d4ce10848831479944642ac6da853 (diff) | |
download | hands-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.scala | 19 |
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)))) | |