forked from lumenlunae/jade-netbeans-syntax-highlighting
-
Notifications
You must be signed in to change notification settings - Fork 3
/
Jade.g
120 lines (117 loc) · 1.89 KB
/
Jade.g
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
grammar Jade;
options {output=template;}
scope slist {
List locals; // must be defined one per semicolon
List stats;
}
/*
@slist::init {
locals = new ArrayList();
stats = new ArrayList();
}
*/
@header {
import org.antlr.stringtemplate.*;
}
program
scope {
List globals;
List functions;
}
@init {
$program::globals = new ArrayList();
$program::functions = new ArrayList();
}
: declaration+
-> program(globals={$program::globals},functions={$program::functions})
;
declaration
: (INDENT)*(doctype|article|pipetext|comment)(ws)+ {$program::globals.add($variable.st);}
;
attributes
: LEFTPAREN ( formalParameter (COMMA formalParameter)* )? RIGHTPAREN
;
doctype
: DOCTYPE;
article
: (tag|id|class) (attributes)? (EQUAL)? (data)*
;
comment
: COMMENT|SERVERCOMMENT
;
data
: text|var
;
text
: TEXT
;
var
: VARIABLE
;
ws
: WS
;
tag
: (elem)(id)?(class*)
;
elem
: NAME;
class
: (CLASS);
id
: (ID);
pipetext
:
'|' (data)*
;
formalParameter
: key value;
key
: KEY;
value
: (STRING)
;
NAME : ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-')*;
KEY : ('a'..'z'|'A'..'Z')('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'-')*(' ')*(':'|'=')(' ')*;
INT : ('0'..'9')+;
DOCTYPE : ('!!!')(' ' '0'..'9' )?;
LEFTPAREN : '(' ' '*;
RIGHTPAREN : ' '* ')';
ID : ('#')(NAME);
CLASS : '.'(NAME);
EQUAL : '=';
COLON : ':';
CODE : '-';
PIPE : '|';
AT : '@';
COMMA : ' '* ',' ' '*;
RIGHTBRACE : '}';
LEFTBRACK : '[';
RIGHTBRACK : ']';
RAND1 : '#';
INDENT : (' ' | '\t')+;
LEFTVAR : '#' '{';
STRING
: ( '"' (~('\\'|'\n'|'"'))* '"'
| '\'' (~('\\'|'\n'|'\''))* '\''
)
;
VARIABLE
: ' 'LEFTVAR(NAME)(RIGHTBRACE)
;
TEXT
: (' ') (~('\r\n'|'\r'|'\n'|' ')*)
;
COMMENT : ('// ')(~('\r\n'|'\r'|'\n')*)
;
SERVERCOMMENT
: ('//- ') (~('\r\n'|'\r'|'\n')*)
;
//WS : ('\r' | '\n')+ {$channel=HIDDEN;};
WS : ( '\f'
| ('\r\n'
| '\r'
| '\n'
)
)
;