Skip to content

Commit 8021047

Browse files
committed
feat: refactor unsafe template engine
1 parent ea06228 commit 8021047

12 files changed

Lines changed: 1277 additions & 581 deletions
Lines changed: 55 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,62 +1,102 @@
11
token literal names:
22
null
3+
'{#'
34
'{{'
5+
'{%'
6+
null
7+
'#}'
48
null
59
'}}'
6-
'if'
7-
'loop'
8-
'end'
9-
'in'
10-
'define'
11-
'template'
1210
'('
1311
')'
12+
'{'
13+
'}'
14+
'#'
15+
'%'
1416
'$'
1517
'|'
1618
','
1719
':='
20+
'.'
21+
'\''
22+
'"'
23+
null
1824
null
1925
null
2026
null
2127
null
28+
'%}'
29+
'if'
30+
'else'
31+
'loop'
32+
'in'
33+
'macro'
34+
'template'
35+
'end'
36+
'endif'
37+
'endloop'
38+
'endmacro'
39+
null
40+
null
2241

2342
token symbolic names:
2443
null
44+
COMMENT_LBRACE
2545
DOUBLE_LBRACE
46+
STATEMENT_LBRACE
2647
TEXT
48+
COMMENT_RBRACE
49+
COMMENT_CONTENT
2750
DOUBLE_RBRACE
28-
IF
29-
LOOP
30-
END
31-
IN
32-
DEFINE
33-
TEMPLATE
3451
LPAREN
3552
RPAREN
53+
LBRACE
54+
RBRACE
55+
HASH
56+
MOD
3657
DOLLAR
3758
PIPE
3859
COMMA
3960
COLON_EQUAL
40-
IDENTIFIER
61+
DOT
62+
SINGLE_QUOTE
63+
QUOTE
4164
STRING
4265
NUMBER
66+
IDENTIFIER
67+
ESC
4368
WS
69+
STATEMENT_RBRACE
70+
IF
71+
ELSE
72+
LOOP
73+
IN
74+
MACRO
75+
TEMPLATE
76+
END
77+
ENDIF
78+
ENDLOOP
79+
ENDMACRO
80+
IDENTIFIER_STMT
81+
WS_STMT
4482

4583
rule names:
4684
template
4785
content
4886
statement
4987
variableStatement
5088
ifStatement
89+
elseStatement
5190
loopStatement
5291
expressionStatement
53-
defineStatement
92+
macroStatement
5493
templateStatement
5594
expression
5695
pipelineExpr
5796
primaryExpr
97+
varExpr
5898
functionCall
5999

60100

61101
atn:
62-
[4, 1, 19, 147, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 1, 0, 1, 0, 5, 0, 29, 8, 0, 10, 0, 12, 0, 32, 9, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 42, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 5, 7, 79, 8, 7, 10, 7, 12, 7, 82, 9, 7, 3, 7, 84, 8, 7, 1, 7, 3, 7, 87, 8, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 99, 8, 8, 10, 8, 12, 8, 102, 9, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 10, 1, 10, 1, 10, 5, 10, 111, 8, 10, 10, 10, 12, 10, 114, 9, 10, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 1, 11, 3, 11, 123, 8, 11, 1, 12, 1, 12, 5, 12, 127, 8, 12, 10, 12, 12, 12, 130, 9, 12, 1, 12, 1, 12, 1, 12, 3, 12, 135, 8, 12, 1, 12, 1, 12, 5, 12, 139, 8, 12, 10, 12, 12, 12, 142, 9, 12, 1, 12, 3, 12, 145, 8, 12, 1, 12, 0, 0, 13, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 0, 0, 152, 0, 30, 1, 0, 0, 0, 2, 33, 1, 0, 0, 0, 4, 41, 1, 0, 0, 0, 6, 43, 1, 0, 0, 0, 8, 47, 1, 0, 0, 0, 10, 56, 1, 0, 0, 0, 12, 67, 1, 0, 0, 0, 14, 71, 1, 0, 0, 0, 16, 94, 1, 0, 0, 0, 18, 105, 1, 0, 0, 0, 20, 107, 1, 0, 0, 0, 22, 122, 1, 0, 0, 0, 24, 144, 1, 0, 0, 0, 26, 29, 3, 2, 1, 0, 27, 29, 3, 4, 2, 0, 28, 26, 1, 0, 0, 0, 28, 27, 1, 0, 0, 0, 29, 32, 1, 0, 0, 0, 30, 28, 1, 0, 0, 0, 30, 31, 1, 0, 0, 0, 31, 1, 1, 0, 0, 0, 32, 30, 1, 0, 0, 0, 33, 34, 5, 2, 0, 0, 34, 3, 1, 0, 0, 0, 35, 42, 3, 8, 4, 0, 36, 42, 3, 10, 5, 0, 37, 42, 3, 12, 6, 0, 38, 42, 3, 14, 7, 0, 39, 42, 3, 16, 8, 0, 40, 42, 3, 6, 3, 0, 41, 35, 1, 0, 0, 0, 41, 36, 1, 0, 0, 0, 41, 37, 1, 0, 0, 0, 41, 38, 1, 0, 0, 0, 41, 39, 1, 0, 0, 0, 41, 40, 1, 0, 0, 0, 42, 5, 1, 0, 0, 0, 43, 44, 5, 16, 0, 0, 44, 45, 5, 15, 0, 0, 45, 46, 3, 18, 9, 0, 46, 7, 1, 0, 0, 0, 47, 48, 5, 1, 0, 0, 48, 49, 5, 4, 0, 0, 49, 50, 3, 18, 9, 0, 50, 51, 5, 3, 0, 0, 51, 52, 3, 0, 0, 0, 52, 53, 5, 1, 0, 0, 53, 54, 5, 6, 0, 0, 54, 55, 5, 3, 0, 0, 55, 9, 1, 0, 0, 0, 56, 57, 5, 1, 0, 0, 57, 58, 5, 5, 0, 0, 58, 59, 5, 16, 0, 0, 59, 60, 5, 7, 0, 0, 60, 61, 5, 16, 0, 0, 61, 62, 5, 3, 0, 0, 62, 63, 3, 0, 0, 0, 63, 64, 5, 1, 0, 0, 64, 65, 5, 6, 0, 0, 65, 66, 5, 3, 0, 0, 66, 11, 1, 0, 0, 0, 67, 68, 5, 1, 0, 0, 68, 69, 3, 18, 9, 0, 69, 70, 5, 3, 0, 0, 70, 13, 1, 0, 0, 0, 71, 72, 5, 1, 0, 0, 72, 73, 5, 8, 0, 0, 73, 86, 5, 16, 0, 0, 74, 83, 5, 10, 0, 0, 75, 80, 5, 16, 0, 0, 76, 77, 5, 14, 0, 0, 77, 79, 5, 16, 0, 0, 78, 76, 1, 0, 0, 0, 79, 82, 1, 0, 0, 0, 80, 78, 1, 0, 0, 0, 80, 81, 1, 0, 0, 0, 81, 84, 1, 0, 0, 0, 82, 80, 1, 0, 0, 0, 83, 75, 1, 0, 0, 0, 83, 84, 1, 0, 0, 0, 84, 85, 1, 0, 0, 0, 85, 87, 5, 11, 0, 0, 86, 74, 1, 0, 0, 0, 86, 87, 1, 0, 0, 0, 87, 88, 1, 0, 0, 0, 88, 89, 5, 3, 0, 0, 89, 90, 3, 0, 0, 0, 90, 91, 5, 1, 0, 0, 91, 92, 5, 6, 0, 0, 92, 93, 5, 3, 0, 0, 93, 15, 1, 0, 0, 0, 94, 95, 5, 1, 0, 0, 95, 96, 5, 9, 0, 0, 96, 100, 5, 16, 0, 0, 97, 99, 3, 18, 9, 0, 98, 97, 1, 0, 0, 0, 99, 102, 1, 0, 0, 0, 100, 98, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 103, 1, 0, 0, 0, 102, 100, 1, 0, 0, 0, 103, 104, 5, 3, 0, 0, 104, 17, 1, 0, 0, 0, 105, 106, 3, 20, 10, 0, 106, 19, 1, 0, 0, 0, 107, 112, 3, 22, 11, 0, 108, 109, 5, 13, 0, 0, 109, 111, 3, 24, 12, 0, 110, 108, 1, 0, 0, 0, 111, 114, 1, 0, 0, 0, 112, 110, 1, 0, 0, 0, 112, 113, 1, 0, 0, 0, 113, 21, 1, 0, 0, 0, 114, 112, 1, 0, 0, 0, 115, 123, 5, 18, 0, 0, 116, 123, 5, 17, 0, 0, 117, 123, 5, 16, 0, 0, 118, 119, 5, 10, 0, 0, 119, 120, 3, 18, 9, 0, 120, 121, 5, 11, 0, 0, 121, 123, 1, 0, 0, 0, 122, 115, 1, 0, 0, 0, 122, 116, 1, 0, 0, 0, 122, 117, 1, 0, 0, 0, 122, 118, 1, 0, 0, 0, 123, 23, 1, 0, 0, 0, 124, 128, 5, 16, 0, 0, 125, 127, 3, 22, 11, 0, 126, 125, 1, 0, 0, 0, 127, 130, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 128, 129, 1, 0, 0, 0, 129, 145, 1, 0, 0, 0, 130, 128, 1, 0, 0, 0, 131, 132, 5, 16, 0, 0, 132, 134, 5, 10, 0, 0, 133, 135, 3, 22, 11, 0, 134, 133, 1, 0, 0, 0, 134, 135, 1, 0, 0, 0, 135, 140, 1, 0, 0, 0, 136, 137, 5, 14, 0, 0, 137, 139, 3, 22, 11, 0, 138, 136, 1, 0, 0, 0, 139, 142, 1, 0, 0, 0, 140, 138, 1, 0, 0, 0, 140, 141, 1, 0, 0, 0, 141, 143, 1, 0, 0, 0, 142, 140, 1, 0, 0, 0, 143, 145, 5, 11, 0, 0, 144, 124, 1, 0, 0, 0, 144, 131, 1, 0, 0, 0, 145, 25, 1, 0, 0, 0, 13, 28, 30, 41, 80, 83, 86, 100, 112, 122, 128, 134, 140, 144]
102+
[4, 1, 38, 165, 2, 0, 7, 0, 2, 1, 7, 1, 2, 2, 7, 2, 2, 3, 7, 3, 2, 4, 7, 4, 2, 5, 7, 5, 2, 6, 7, 6, 2, 7, 7, 7, 2, 8, 7, 8, 2, 9, 7, 9, 2, 10, 7, 10, 2, 11, 7, 11, 2, 12, 7, 12, 2, 13, 7, 13, 2, 14, 7, 14, 1, 0, 1, 0, 5, 0, 33, 8, 0, 10, 0, 12, 0, 36, 9, 0, 1, 1, 1, 1, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 1, 2, 3, 2, 46, 8, 2, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 3, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 4, 3, 4, 60, 8, 4, 1, 4, 1, 4, 1, 4, 1, 4, 1, 5, 1, 5, 1, 5, 1, 5, 1, 5, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 6, 1, 7, 1, 7, 1, 7, 1, 7, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 5, 8, 93, 8, 8, 10, 8, 12, 8, 96, 9, 8, 3, 8, 98, 8, 8, 1, 8, 3, 8, 101, 8, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 8, 1, 9, 1, 9, 1, 9, 1, 9, 5, 9, 113, 8, 9, 10, 9, 12, 9, 116, 9, 9, 1, 9, 1, 9, 1, 10, 1, 10, 1, 11, 1, 11, 1, 11, 5, 11, 125, 8, 11, 10, 11, 12, 11, 128, 9, 11, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 1, 12, 3, 12, 138, 8, 12, 1, 13, 1, 13, 1, 13, 1, 14, 1, 14, 5, 14, 145, 8, 14, 10, 14, 12, 14, 148, 9, 14, 1, 14, 1, 14, 1, 14, 3, 14, 153, 8, 14, 1, 14, 1, 14, 5, 14, 157, 8, 14, 10, 14, 12, 14, 160, 9, 14, 1, 14, 3, 14, 163, 8, 14, 1, 14, 0, 0, 15, 0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26, 28, 0, 3, 1, 0, 33, 34, 2, 0, 33, 33, 35, 35, 2, 0, 33, 33, 36, 36, 170, 0, 34, 1, 0, 0, 0, 2, 37, 1, 0, 0, 0, 4, 45, 1, 0, 0, 0, 6, 47, 1, 0, 0, 0, 8, 53, 1, 0, 0, 0, 10, 65, 1, 0, 0, 0, 12, 70, 1, 0, 0, 0, 14, 81, 1, 0, 0, 0, 16, 85, 1, 0, 0, 0, 18, 108, 1, 0, 0, 0, 20, 119, 1, 0, 0, 0, 22, 121, 1, 0, 0, 0, 24, 137, 1, 0, 0, 0, 26, 139, 1, 0, 0, 0, 28, 162, 1, 0, 0, 0, 30, 33, 3, 2, 1, 0, 31, 33, 3, 4, 2, 0, 32, 30, 1, 0, 0, 0, 32, 31, 1, 0, 0, 0, 33, 36, 1, 0, 0, 0, 34, 32, 1, 0, 0, 0, 34, 35, 1, 0, 0, 0, 35, 1, 1, 0, 0, 0, 36, 34, 1, 0, 0, 0, 37, 38, 5, 4, 0, 0, 38, 3, 1, 0, 0, 0, 39, 46, 3, 8, 4, 0, 40, 46, 3, 12, 6, 0, 41, 46, 3, 14, 7, 0, 42, 46, 3, 16, 8, 0, 43, 46, 3, 18, 9, 0, 44, 46, 3, 6, 3, 0, 45, 39, 1, 0, 0, 0, 45, 40, 1, 0, 0, 0, 45, 41, 1, 0, 0, 0, 45, 42, 1, 0, 0, 0, 45, 43, 1, 0, 0, 0, 45, 44, 1, 0, 0, 0, 46, 5, 1, 0, 0, 0, 47, 48, 5, 3, 0, 0, 48, 49, 5, 23, 0, 0, 49, 50, 5, 17, 0, 0, 50, 51, 3, 20, 10, 0, 51, 52, 5, 26, 0, 0, 52, 7, 1, 0, 0, 0, 53, 54, 5, 3, 0, 0, 54, 55, 5, 27, 0, 0, 55, 56, 3, 20, 10, 0, 56, 57, 5, 26, 0, 0, 57, 59, 3, 0, 0, 0, 58, 60, 3, 10, 5, 0, 59, 58, 1, 0, 0, 0, 59, 60, 1, 0, 0, 0, 60, 61, 1, 0, 0, 0, 61, 62, 5, 3, 0, 0, 62, 63, 7, 0, 0, 0, 63, 64, 5, 26, 0, 0, 64, 9, 1, 0, 0, 0, 65, 66, 5, 3, 0, 0, 66, 67, 5, 28, 0, 0, 67, 68, 5, 26, 0, 0, 68, 69, 3, 0, 0, 0, 69, 11, 1, 0, 0, 0, 70, 71, 5, 3, 0, 0, 71, 72, 5, 29, 0, 0, 72, 73, 5, 23, 0, 0, 73, 74, 5, 30, 0, 0, 74, 75, 5, 23, 0, 0, 75, 76, 5, 26, 0, 0, 76, 77, 3, 0, 0, 0, 77, 78, 5, 3, 0, 0, 78, 79, 7, 1, 0, 0, 79, 80, 5, 26, 0, 0, 80, 13, 1, 0, 0, 0, 81, 82, 5, 2, 0, 0, 82, 83, 3, 20, 10, 0, 83, 84, 5, 7, 0, 0, 84, 15, 1, 0, 0, 0, 85, 86, 5, 3, 0, 0, 86, 87, 5, 31, 0, 0, 87, 100, 5, 23, 0, 0, 88, 97, 5, 8, 0, 0, 89, 94, 5, 23, 0, 0, 90, 91, 5, 16, 0, 0, 91, 93, 5, 23, 0, 0, 92, 90, 1, 0, 0, 0, 93, 96, 1, 0, 0, 0, 94, 92, 1, 0, 0, 0, 94, 95, 1, 0, 0, 0, 95, 98, 1, 0, 0, 0, 96, 94, 1, 0, 0, 0, 97, 89, 1, 0, 0, 0, 97, 98, 1, 0, 0, 0, 98, 99, 1, 0, 0, 0, 99, 101, 5, 9, 0, 0, 100, 88, 1, 0, 0, 0, 100, 101, 1, 0, 0, 0, 101, 102, 1, 0, 0, 0, 102, 103, 5, 26, 0, 0, 103, 104, 3, 0, 0, 0, 104, 105, 5, 3, 0, 0, 105, 106, 7, 2, 0, 0, 106, 107, 5, 26, 0, 0, 107, 17, 1, 0, 0, 0, 108, 109, 5, 3, 0, 0, 109, 110, 5, 32, 0, 0, 110, 114, 5, 23, 0, 0, 111, 113, 3, 20, 10, 0, 112, 111, 1, 0, 0, 0, 113, 116, 1, 0, 0, 0, 114, 112, 1, 0, 0, 0, 114, 115, 1, 0, 0, 0, 115, 117, 1, 0, 0, 0, 116, 114, 1, 0, 0, 0, 117, 118, 5, 26, 0, 0, 118, 19, 1, 0, 0, 0, 119, 120, 3, 22, 11, 0, 120, 21, 1, 0, 0, 0, 121, 126, 3, 28, 14, 0, 122, 123, 5, 15, 0, 0, 123, 125, 3, 28, 14, 0, 124, 122, 1, 0, 0, 0, 125, 128, 1, 0, 0, 0, 126, 124, 1, 0, 0, 0, 126, 127, 1, 0, 0, 0, 127, 23, 1, 0, 0, 0, 128, 126, 1, 0, 0, 0, 129, 138, 5, 22, 0, 0, 130, 138, 5, 21, 0, 0, 131, 138, 5, 23, 0, 0, 132, 138, 3, 26, 13, 0, 133, 134, 5, 8, 0, 0, 134, 135, 3, 20, 10, 0, 135, 136, 5, 9, 0, 0, 136, 138, 1, 0, 0, 0, 137, 129, 1, 0, 0, 0, 137, 130, 1, 0, 0, 0, 137, 131, 1, 0, 0, 0, 137, 132, 1, 0, 0, 0, 137, 133, 1, 0, 0, 0, 138, 25, 1, 0, 0, 0, 139, 140, 5, 14, 0, 0, 140, 141, 5, 23, 0, 0, 141, 27, 1, 0, 0, 0, 142, 146, 5, 23, 0, 0, 143, 145, 3, 24, 12, 0, 144, 143, 1, 0, 0, 0, 145, 148, 1, 0, 0, 0, 146, 144, 1, 0, 0, 0, 146, 147, 1, 0, 0, 0, 147, 163, 1, 0, 0, 0, 148, 146, 1, 0, 0, 0, 149, 150, 5, 23, 0, 0, 150, 152, 5, 8, 0, 0, 151, 153, 3, 24, 12, 0, 152, 151, 1, 0, 0, 0, 152, 153, 1, 0, 0, 0, 153, 158, 1, 0, 0, 0, 154, 155, 5, 16, 0, 0, 155, 157, 3, 24, 12, 0, 156, 154, 1, 0, 0, 0, 157, 160, 1, 0, 0, 0, 158, 156, 1, 0, 0, 0, 158, 159, 1, 0, 0, 0, 159, 161, 1, 0, 0, 0, 160, 158, 1, 0, 0, 0, 161, 163, 5, 9, 0, 0, 162, 142, 1, 0, 0, 0, 162, 149, 1, 0, 0, 0, 163, 29, 1, 0, 0, 0, 14, 32, 34, 45, 59, 94, 97, 100, 114, 126, 137, 146, 152, 158, 162]
Lines changed: 67 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,67 @@
1-
DOUBLE_LBRACE=1
2-
TEXT=2
3-
DOUBLE_RBRACE=3
4-
IF=4
5-
LOOP=5
6-
END=6
7-
IN=7
8-
DEFINE=8
9-
TEMPLATE=9
10-
LPAREN=10
11-
RPAREN=11
12-
DOLLAR=12
13-
PIPE=13
14-
COMMA=14
15-
COLON_EQUAL=15
16-
IDENTIFIER=16
17-
STRING=17
18-
NUMBER=18
19-
WS=19
20-
'{{'=1
21-
'}}'=3
22-
'if'=4
23-
'loop'=5
24-
'end'=6
25-
'in'=7
26-
'define'=8
27-
'template'=9
28-
'('=10
29-
')'=11
30-
'$'=12
31-
'|'=13
32-
','=14
33-
':='=15
1+
COMMENT_LBRACE=1
2+
DOUBLE_LBRACE=2
3+
STATEMENT_LBRACE=3
4+
TEXT=4
5+
COMMENT_RBRACE=5
6+
COMMENT_CONTENT=6
7+
DOUBLE_RBRACE=7
8+
LPAREN=8
9+
RPAREN=9
10+
LBRACE=10
11+
RBRACE=11
12+
HASH=12
13+
MOD=13
14+
DOLLAR=14
15+
PIPE=15
16+
COMMA=16
17+
COLON_EQUAL=17
18+
DOT=18
19+
SINGLE_QUOTE=19
20+
QUOTE=20
21+
STRING=21
22+
NUMBER=22
23+
IDENTIFIER=23
24+
ESC=24
25+
WS=25
26+
STATEMENT_RBRACE=26
27+
IF=27
28+
ELSE=28
29+
LOOP=29
30+
IN=30
31+
MACRO=31
32+
TEMPLATE=32
33+
END=33
34+
ENDIF=34
35+
ENDLOOP=35
36+
ENDMACRO=36
37+
IDENTIFIER_STMT=37
38+
WS_STMT=38
39+
'{#'=1
40+
'{{'=2
41+
'{%'=3
42+
'#}'=5
43+
'}}'=7
44+
'('=8
45+
')'=9
46+
'{'=10
47+
'}'=11
48+
'#'=12
49+
'%'=13
50+
'$'=14
51+
'|'=15
52+
','=16
53+
':='=17
54+
'.'=18
55+
'\''=19
56+
'"'=20
57+
'%}'=26
58+
'if'=27
59+
'else'=28
60+
'loop'=29
61+
'in'=30
62+
'macro'=31
63+
'template'=32
64+
'end'=33
65+
'endif'=34
66+
'endloop'=35
67+
'endmacro'=36

0 commit comments

Comments
 (0)