summaryrefslogtreecommitdiffstats
path: root/src/handlebars.l
blob: 57ebb902248b0fd10e1c0c9222ddadcddf11ea48 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35

%x mu

%%

[^\x00]*?/("{{")                 { this.begin("mu"); if (yytext) return 'CONTENT'; }
[^\x00]+                         { return 'CONTENT'; }

<mu>"{{>"                    { return 'OPEN_PARTIAL'; }
<mu>"{{#"                    { return 'OPEN_BLOCK'; }
<mu>"{{/"                    { return 'OPEN_ENDBLOCK'; }
<mu>"{{^"                    { return 'OPEN_INVERSE'; }
<mu>"{{"\s*"else"            { return 'OPEN_INVERSE'; }
<mu>"{{{"                    { return 'OPEN_UNESCAPED'; }
<mu>"{{&"                    { return 'OPEN_UNESCAPED'; }
<mu>"{{!"[\s\S]*?"}}"        { yytext = yytext.substr(3,yyleng-5); this.begin("INITIAL"); return 'COMMENT'; }
<mu>"{{"                     { return 'OPEN'; }

<mu>"="                      { return 'EQUALS'; }
<mu>"."/[} ]                 { return 'ID'; }
<mu>".."                     { return 'ID'; }
<mu>[/.]                     { return 'SEP'; }
<mu>\s+                      { /*ignore whitespace*/ }
<mu>"}}}"                    { this.begin("INITIAL"); return 'CLOSE'; }
<mu>"}}"                     { this.begin("INITIAL"); return 'CLOSE'; }
<mu>'"'("\\"["]|[^"])*'"'    { yytext = yytext.substr(1,yyleng-2).replace(/\\"/g,'"'); return 'STRING'; }
<mu>"true"/[}\s]             { return 'BOOLEAN'; }
<mu>"false"/[}\s]            { return 'BOOLEAN'; }
<mu>[0-9]+/[}\s]             { return 'INTEGER'; }
<mu>[a-zA-Z0-9_$-]+/[=}\s/.] { return 'ID'; }
<mu>\[.*\]                   { yytext = yytext.substr(1, yyleng-2); return 'ID'; }
<mu>.                        { return 'INVALID'; }

<INITIAL,mu><<EOF>>          { return 'EOF'; }