diff options
Diffstat (limited to 'module/web/static/js/libs/handlebars.l')
-rw-r--r-- | module/web/static/js/libs/handlebars.l | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/module/web/static/js/libs/handlebars.l b/module/web/static/js/libs/handlebars.l new file mode 100644 index 000000000..f0c04f91e --- /dev/null +++ b/module/web/static/js/libs/handlebars.l @@ -0,0 +1,48 @@ + +%x mu emu + +%% + +[^\x00]*?/("<%") { + if(yytext.slice(-1) !== "\\") this.begin("mu"); + if(yytext.slice(-1) === "\\") yytext = yytext.substr(0,yyleng-1), this.begin("emu"); + if(yytext) return 'CONTENT'; + } + +[^\x00]+ { return 'CONTENT'; } + +<emu>[^\x00]{2,}?/("{{"|<<EOF>>) { + if(yytext.slice(-1) !== "\\") this.popState(); + if(yytext.slice(-1) === "\\") yytext = yytext.substr(0,yyleng-1); + 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.popState(); return 'COMMENT'; } +<mu>"<%" { return 'OPEN'; } + +<mu>"=" { return 'EQUALS'; } +<mu>"."/[%} ] { return 'ID'; } +<mu>".." { return 'ID'; } +<mu>[\/.] { return 'SEP'; } +<mu>\s+ { /*ignore whitespace*/ } +<mu>"%%>" { this.popState(); return 'CLOSE'; } +<mu>"%>" { this.popState(); return 'CLOSE'; } +<mu>'"'("\\"["]|[^"])*'"' { yytext = yytext.substr(1,yyleng-2).replace(/\\"/g,'"'); return 'STRING'; } +<mu>"'"("\\"[']|[^'])*"'" { yytext = yytext.substr(1,yyleng-2).replace(/\\"/g,'"'); return 'STRING'; } +<mu>"@"[a-zA-Z]+ { yytext = yytext.substr(1); return 'DATA'; } +<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'; } + |