Orasund / elm-handlebars / Handlebars.Syntax

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