/
source.genero-per.js
234 lines (233 loc) · 8.03 KB
/
source.genero-per.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
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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/FourjsGenero/GeneroFgl.tmbundle>
// and licensed `unlicense`.
// See <https://github.com/wooorm/starry-night> for more info.
/** @type {import('../lib/index.js').Grammar} */
const grammar = {
extensions: ['.per'],
names: ['genero-per'],
patterns: [
{include: '#screen'},
{include: '#comments'},
{include: '#keywords'},
{include: '#strings'},
{include: '#numerics'},
{
match: '^\\s*&\\s*(elif|else|endif|ifdef|ifndef|include|undef)\\b',
name: 'meta.preprocessor'
},
{
begin: '^\\s*&\\s*define\\b',
beginCaptures: {0: {name: 'meta.preprocessor'}},
end: '[^\\\\\\{]$',
patterns: [
{include: '#keywords'},
{include: '#strings'},
{include: '#numerics'},
{match: '#', name: 'meta.preprocessor'},
{include: '#comments'},
{captures: {1: {name: 'meta.preprocessor'}}, match: '(\\\\)[ \\t]*\\n'}
]
}
],
repository: {
comments: {
patterns: [
{match: '#.*$', name: 'comment.line.number-sign.per'},
{match: '--.*$', name: 'comment.line.double-dash.per'},
{begin: '{', end: '}', name: 'comment.block.per'}
]
},
keywords: {
patterns: [
{
match:
'\\b(?i)(ACCELERATOR|ACCELERATOR2|ACCELERATOR3|ACCELERATOR4|ACTION|ACTIONIMAGE|ACTIONS|ACTIONTEXT|AGGREGATE|AGGREGATETEXT|AGGREGATETYPE|ALT|AND|ATTRIBUTES|AUTO|AUTOCOMMANDS |AUTOHIDE|AUTOITEMS |AUTONEXT|AUTOSCALE|AVG)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(BETWEEN|BIGINT|BLACK|BLINK|BLUE|BOOLEAN|BOTH|BUTTON|BUTTONEDIT|BUTTONTEXTHIDDEN|BY|BYTE)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(CANVAS|CENTER|CENTURY|CHAR|CHARACTER|CHARACTERS|CHECKBOX|CLASS|COLOR|COLUMNS|COMBOBOX|COMMAND|COMMENT|COMMENTS|COMPACT|COMPLETER|COMPONENTTYPE|COMPRESS|CONFIG|CONTENT|CONTEXTMENU|CONTROL|COUNT|CURRENT|CYAN)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(DATABASE|DATE|DATEEDIT|DATETIME|DATETIMEEDIT|DAY|DEC|DECIMAL|DEFAULT|DEFAULTS|DEFAULTVIEW|DELIMITERS|DISCLOSUREINDICATOR|DISPLAY|DISPLAYONLY|DOUBLE|DOUBLECLICK|DOWNSHIFT|DYNAMIC)\\b',
name: 'keyword.control.per'
},
{
match: '\\b(?i)(EDIT|EMAIL|END|EXPANDEDCOLUMN)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(FALSE|FIELD|FIXED|FLIPPED|FLOAT|FOLDER|FONTPITCH|FORM|FORMAT|FORMONLY|FRACTION)\\b',
name: 'keyword.control.per'
},
{
match: '\\b(?i)(GREEN|GRID|GRIDCHILDRENINPARENT|GROUP)\\b',
name: 'keyword.control.per'
},
{
match: '\\b(?i)(HBOX|HEIGHT|HIDDEN|HORIZONTAL|HOUR)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(IDCOLUMN|IMAGE|IMAGECOLLAPSED|IMAGECOLUMN|IMAGEEXPANDED|IMAGELEAF|INCLUDE|INITIAL|INITIALIZER|INITIALPAGESIZE|INPUT|INSTRUCTIONS|INT|INTEGER|INTERVAL|INVISIBLE|IS|ISNODECOLUMN|ITEM|ITEMS)\\b',
name: 'keyword.control.per'
},
{match: '\\b(?i)(JUSTIFY)\\b', name: 'keyword.control.per'},
{
match: '\\b(?i)(KEY|KEYBOARDHINT|KEYS)\\b',
name: 'keyword.control.per'
},
{
match: '\\b(?i)(LABEL|LARGE|LAYOUT|LEFT|LIKE|LINES)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(MAGENTA|MATCHES|MAX|MEDIUM|MIN|MINHEIGHT|MINUTE|MINWIDTH|MONEY|MONTH)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(NO|NOENTRY|NONCOMPRESS|NONE|NORMAL|NOSWIPE|NOT|NOTEDITABLE|NOUPDATE|NULL|NUMBER|NUMERIC)\\b',
name: 'keyword.control.per'
},
{
match: '\\b(?i)(OPTIONS|OR|ORIENTATION)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(PACKED|PAGE|PARENTIDCOLUMN|PHANTOM|PHONE|PICTURE|PIXELHEIGHT|PIXELS|PIXELWIDTH|PLACEHOLDER|POINTS|PRECISION|PROGRAM|PROGRAMS|PROGRESSBAR|PROPERTIES)\\b',
name: 'keyword.control.per'
},
{
match: '\\b(?i)(QUERYCLEAR|QUERYEDITABLE)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(RADIOGROUP|REAL|RECORD|RED|REQUIRED|REVERSE|RIGHT)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(SAMPLE|SCHEMA|SCREEN|SCROLL|SCROLLBARS|SCROLLGRID|SEARCH|SECOND|SEPARATOR|SHIFT|SIZE|SIZEPOLICY|SLIDER|SMALL|SMALLFLOAT|SMALLINT|SPACING|SPINEDIT|SPLIT|SPLITTER|STEP|STRETCH|STRETCHCOLUMNS|STRETCHMAX|STRETCHMIN|STYLE|SUM)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(TABINDEX|TABLE|TABLES|TAG|TEXT|TEXTEDIT|THROUGH|THRU|TIMEEDIT|TIMESTAMP|TITLE|TO|TODAY|TOOLBAR|TOPMENU|TREE|TRUE|TYPE)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(UNDERLINE|UNHIDABLE|UNHIDABLECOLUMNS|UNMOVABLE|UNMOVABLECOLUMNS|UNSIZABLE|UNSIZABLECOLUMNS|UNSORTABLE|UNSORTABLECOLUMNS|UPSHIFT|URL|USER)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(VALIDATE|VALUECHECKED|VALUEMAX|VALUEMIN|VALUEUNCHECKED|VARCHAR|VARIABLE|VBOX|VERIFY|VERSION|VERTICAL)\\b',
name: 'keyword.control.per'
},
{
match:
'\\b(?i)(WANTFIXEDPAGESIZE|WANTNORETURNS|WANTTABS|WEBCOMPONENT|WHERE|WHITE|WIDGET|WIDTH|WINDOWS|WINDOWSTYLE|WIP|WITHOUT|WORDWRAP)\\b',
name: 'keyword.control.per'
},
{match: '\\b(?i)(X)\\b', name: 'keyword.control.per'},
{match: '\\b(?i)(Y|YEAR|YELLOW|YES)\\b', name: 'keyword.control.per'},
{match: '\\b(?i)(ZEROFILL)\\b', name: 'keyword.control.per'}
]
},
numerics: {
patterns: [
{
match:
'(\\+|\\-)?((\\b\\d+(\\.\\d+)?)|(\\.\\d+))([e|E](\\+|\\-)?\\d+)?',
name: 'constant.numeric.per'
}
]
},
screen: {
patterns: [
{
begin: '(^[ \\t]*\\{$)',
captures: {1: {name: 'punctuation.definition.tag'}},
end: '(})',
patterns: [
{
begin: '(\\[)',
captures: {1: {name: 'punctuation.definition.tag'}},
end: '(\\])',
name: 'meta.tag',
patterns: [
{match: '[|:-]', name: 'punctuation.definition.tag'},
{match: '.', name: 'entity.other.attribute-name'}
]
},
{
begin: '(\\<)([a-zA-Z]*)',
captures: {
1: {name: 'punctuation.definition.tag'},
2: {name: 'entity.name.tag'}
},
end: '(>)',
name: 'meta.tag',
patterns: [{match: '.', name: 'entity.other.attribute-name'}]
},
{match: '.'}
]
}
]
},
strings: {
patterns: [
{
begin: "'",
end: "'(?!')",
name: 'string.quoted.single.per',
patterns: [
{
match: "\\\\[\\\\btnfr'\"]|\\\\$|''",
name: 'constant.character.escape.untitled'
},
{
match: '\\\\x[0-9a-fA-F]{1,2}',
name: 'constant.character.escape.untitled'
},
{match: '\\\\.', name: 'invalid.illegal'}
]
},
{
begin: '"',
end: '"(?!")',
name: 'string.quoted.double.per',
patterns: [
{
match: '\\\\[\\\\btnfr\'"]|\\\\$|""',
name: 'constant.character.escape.untitled'
},
{
match: '\\\\x[0-9a-fA-F]{1,2}',
name: 'constant.character.escape.untitled'
},
{match: '\\\\.', name: 'invalid.illegal'}
]
}
]
}
},
scopeName: 'source.genero-per'
}
export default grammar