Parsing a Template
exp : Parser Handlebars.Expression.Expression
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result
text
"Hello {{"
|> Parser.run exp
--> Ok (Text "Hello ")
"Hello \\{\\{world\\}\\}"
|> Parser.run exp
--> Ok (Text "Hello {{world}}")
variables
"{{test}}"
|> Parser.run exp
--> Ok (Variable (LookUp (0,["test"])))
For block
"{{#test}}hello world{{/test}}"
|> Parser.run exp
--> Ok (For (0,["test"]) [Text "hello world"])
"{{#some}}hello world{{/test}}"
|> Parser.run exp
|> Result.isOk
--> False
"{{#test}}hello world"
|> Parser.run exp
|> Result.isOk
--> False
Helper Block
"{{#test a}}hello world{{/test}}"
|> Parser.run exp
--> Ok (Block "test" (LookUp (0,["a"])) [Text "hello world"])
"{{#some.test a}}hello world{{/test}}"
|> Parser.run exp
|> Result.isOk
--> False
"{{#. a}}hello world{{/test}}"
|> Parser.run exp
|> Result.isOk
--> False
"{{#.invalid.}}hello world{{/.invalid.}}"
|> Parser.run exp
|> Result.isOk
--> False
"{{#. a}}hello world{{/.}}"
|> Parser.run exp
|> Result.isOk
--> False
"{{#blockHelper (helper a)}}hello world{{/blockHelper}}"
|> Parser.run exp
--> Ok (Block "blockHelper" (Helper "helper" (LookUp (0,["a"]),[])) [Text "hello world"])
"{{#test}}hello {{name}}{{/test}}"
|> Parser.run exp
--> Ok (For (0,["test"]) [Text "hello ",Variable (LookUp (0,["name"]))])
"{{#test}}{{#test}}hello world{{/test}}{{/test}}"
|> Parser.run exp
--> Ok (For (0,["test"]) [For (0,["test"]) [Text "hello world"]])
parser : Parser (List Handlebars.Expression.Expression)
Parser for a template
path : Parser Handlebars.Path.RelativePath
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result
""
|> Parser.run path
|> Result.isOk
--> False
"."
|> Parser.run path
--> Ok (0,[])
"../"
|> Parser.run path
|> Result.isOk
--> False
"../."
|> Parser.run path
--> Ok (1,[])
"some.test"
|> Parser.run path
--> Ok (0,["some", "test"])
"../some"
|> Parser.run path
--> Ok (1,["some"])
"some.test a"
|> Parser.run path
--> Ok (0,["some", "test"])
subExp : Parser Handlebars.Expression.SubExp
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result
"test some.test"
|> Parser.run subExp
--> Ok (Helper "test" (LookUp (0,["some","test"]),[]))
"test a b c"
|> Parser.run subExp
--> Ok (Helper "test" (LookUp (0,["a"]),[LookUp (0,["b"]),LookUp (0,["c"])]))
"some.test a"
|> Parser.run subExp
|> Result.isOk
--> False
"some (test a) b"
|> Parser.run subExp
--> Ok (Helper "some" ( (Helper "test" (LookUp (0,["a"]),[]) ), [LookUp (0,["b"])]) )
"(test)"
|> Parser.run subExp
|> Result.isOk
--> False
"some (a)"
|> Parser.run subExp
--> Ok (Helper "some" (LookUp (0,["a"]),[]))
variable : Parser String
import Parser
import Handlebars.Expression as Expression exposing (Expression(..), SubExp(..))
import Result.Extra as Result
""
|> Parser.run variable
|> Result.isOk
--> False