-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgrammar.js
73 lines (63 loc) · 1.44 KB
/
grammar.js
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
module.exports = grammar({
name: 'mojo_template',
extras: $ => [],
rules: {
template: $ => repeat(choice(
$.shorthand_perl_code,
$.shorthand_perl_expression,
$.shorthand_perl_expression_escaped,
$.shorthand_comment,
$.bracketed_perl_code,
$.bracketed_perl_expression,
$.bracketed_perl_expression_escaped,
$.bracketed_comment,
$.content
)),
bracketed_perl_code: $ => seq(
'<%',
optional($.perl_code),
choice('%>', '=%>'),
),
bracketed_perl_expression: $ => seq(
'<%=',
optional($.perl_code),
choice('%>', '=%>'),
),
bracketed_perl_expression_escaped: $ => seq(
'<%==',
optional($.perl_code),
choice('%>', '=%>'),
),
bracketed_comment: $ => seq(
'<%#',
optional(alias($.perl_code, $.comment)),
'%>'
),
shorthand_perl_code: $ => seq(
'%',
$.short_perl_code
),
shorthand_perl_expression: $ => seq(
'%=',
$.short_perl_code
),
shorthand_perl_expression_escaped: $ => seq(
'%==',
$.short_perl_code
),
shorthand_comment: $ => seq(
'%#',
alias($.perl_code, $.comment),
),
perl_code: $ => repeat1(choice(
/[^%\n]+/,
/%/,
/%>/,
/%=[^>]/
)),
short_perl_code: $ => repeat1(choice(
/[^\n]+/
)),
content: $ => /(?:[^<%]+|<[^%])*?/,
}
});