52 lines
813 B
Plaintext
52 lines
813 B
Plaintext
document
|
|
= p:part* { return p }
|
|
|
|
part
|
|
= text / variable / block
|
|
|
|
text
|
|
= b:(!tag c:. {return c})+
|
|
{ return { type: "text", text: b.join('') }; }
|
|
|
|
variable "variable"
|
|
= t:tag_start rd
|
|
{ return { type: "variable", name: t }; }
|
|
|
|
tag_start "tag_start"
|
|
= ld n:tagname
|
|
{ return n; }
|
|
|
|
tagname "tagname"
|
|
= t:[a-zA-Z]+
|
|
{ return t.join(''); }
|
|
|
|
block "block"
|
|
= t:block_tag_start p:part* n:block_end_tag
|
|
&{ return t == n }
|
|
{ return { type: "block", name: n, data: p }; }
|
|
|
|
block_tag_start "tag_start"
|
|
= ld "block:" n:tagname rd
|
|
{ return n; }
|
|
|
|
block_end_tag
|
|
= ld "/block:" n:tagname rd
|
|
{ return n; }
|
|
|
|
tag
|
|
= ld (!rd !eol [a-zA-Z\:\/])+ rd
|
|
|
|
ld
|
|
= "{"
|
|
|
|
rd
|
|
= "}"
|
|
|
|
eol
|
|
= "\n"
|
|
/ "\r\n"
|
|
/ "\r"
|
|
/ "\u2028"
|
|
/ "\u2029"
|
|
|