abl-tmlanguage 1.1.3 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (71) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/README.md +54 -1
  3. package/abl.tmLanguage.json +3534 -230
  4. package/azure-pipelines.yml +3 -2
  5. package/package.json +7 -6
  6. package/spec/analyze-suspend-resume/analyze-suspend-resume.spec.js +10 -10
  7. package/spec/annotations/annotation.spec.js +232 -0
  8. package/spec/array-extent/issue#5.spec.js +18 -18
  9. package/spec/blocks/finally-blocks.spec.js +90 -0
  10. package/spec/blocks/on-quit.spec.js +59 -0
  11. package/spec/comments/vscode-abl-issue#127.spec.js +165 -0
  12. package/spec/db-table-and-field/fields-except.spec.js +69 -0
  13. package/spec/db-table-and-field/foreach.spec.js +588 -0
  14. package/spec/db-table-and-field/issue#88.spec.js +120 -0
  15. package/spec/define-buffer/create-buffer.spec.js +110 -0
  16. package/spec/define-buffer/simple-single-line.spec.js +138 -0
  17. package/spec/define-parameter/simple-single-line.spec.js +140 -100
  18. package/spec/define-stream/simple-single-line.spec.js +32 -31
  19. package/spec/define-temp-table/define-index.spec.js +138 -0
  20. package/spec/define-variable/extent.spec.js +228 -0
  21. package/spec/define-variable/issue#6.spec.js +256 -198
  22. package/spec/define-variable/issue#9.spec.js +38 -32
  23. package/spec/define-variable/simple-single-line.spec.js +168 -87
  24. package/spec/define-variable/single-line-with-a-comment-at-the-end.spec.js +62 -62
  25. package/spec/define-variable/single-line-with-a-space-and-a-comment-at-the-end.spec.js +56 -56
  26. package/spec/define-variable/tm-issue#2.spec.js +20 -20
  27. package/spec/do/do-blocks.spec.js +224 -0
  28. package/spec/do/issue#3.spec.js +69 -60
  29. package/spec/function-call/nested-functions.spec.js +128 -0
  30. package/spec/function-call/vscode-abl-issue#19.spec.js +110 -107
  31. package/spec/global-scoped-define/global-define.spec.js +11 -11
  32. package/spec/global-scoped-define/scoped-define-with-procedure-keyword.spec.js +26 -26
  33. package/spec/include/abl-tmlanguage-issues#5.spec.js +40 -57
  34. package/spec/include/vscode-abl-issue#45.spec.js +15 -15
  35. package/spec/include/vscode-abl-issue#77.spec.js +129 -0
  36. package/spec/include/vscode-abl-issue#80.spec.js +40 -27
  37. package/spec/method-attribute-property-call/abl-method-attribute-call.spec.js +99 -0
  38. package/spec/method-attribute-property-call/connected-method.spec.js +30 -0
  39. package/spec/method-attribute-property-call/get-set-method-name.spec.js +96 -0
  40. package/spec/method-attribute-property-call/method-call.spec.js +112 -0
  41. package/spec/method-definition/constructor.spec.js +174 -0
  42. package/spec/method-definition/method.spec.js +320 -0
  43. package/spec/misc-statements/case-statement.spec.js +96 -0
  44. package/spec/misc-statements/copy-lob.spec.js +137 -0
  45. package/spec/misc-statements/if-then.spec.js +170 -0
  46. package/spec/misc-statements/return-statement.spec.js +53 -0
  47. package/spec/operators/operators.spec.js +78 -0
  48. package/spec/procedure-definition/empty-proc.spec.js +101 -18
  49. package/spec/procedure-definition/vscode-abl-issue#22.spec.js +46 -42
  50. package/spec/procedure-definition/vscode-abl-issue#26.spec.js +23 -16
  51. package/spec/procedure-definition/vscode-abl-issue#62.spec.js +36 -0
  52. package/spec/run-statement/run-statement.spec.js +162 -0
  53. package/spec/shared.js +84 -42
  54. package/spec/strings/translation-attribute.spec.js +52 -0
  55. package/spec/strings/vscode-abl-issue#11.spec.js +110 -114
  56. package/spec/strings/vscode-abl-issue#28.spec.js +27 -27
  57. package/spec/type-name/argument.spec.js +209 -0
  58. package/spec/type-name/cast.spec.js +165 -0
  59. package/spec/type-name/define-class.spec.js +468 -0
  60. package/spec/type-name/define-enum.spec.js +44 -0
  61. package/spec/type-name/define-interface.spec.js +159 -0
  62. package/spec/type-name/define-property.spec.js +301 -0
  63. package/spec/type-name/define-temp-table.spec.js +434 -0
  64. package/spec/type-name/define-type-spec.js +435 -0
  65. package/spec/type-name/define-variable-property.spec.js +264 -0
  66. package/spec/type-name/define-variable.spec.js +504 -0
  67. package/spec/type-name/get-class.spec.js +91 -0
  68. package/spec/type-name/new.spec.js +126 -0
  69. package/spec/type-name/parameter-as.spec.js +838 -0
  70. package/spec/type-name/type-name.spec.js +879 -0
  71. package/spec/type-name/using.spec.js +115 -0
@@ -7,320 +7,3305 @@
7
7
  ],
8
8
  "name": "OpenEdge ABL",
9
9
  "patterns": [
10
- {
11
- "include": "#procedure-definition"
12
- },
13
10
  {
14
11
  "include": "#statements"
15
12
  }
16
13
  ],
17
14
  "repository": {
18
15
  "procedure-definition": {
19
- "begin": "(?i)\\b(proce|proced|procedu|procedur|procedure)\\b\\s+('[\\w\\.-]*':U|'[\\w\\.-]*'|[\\w\\.-]*)?(\\s+(EXTERNAL)\\s+(\")([\\w\\.-]*)(\"))?",
16
+ "name": "meta.procedure.abl",
17
+ "comment": "Look ahead to the procedure name, quoted or not. It will be resolved in the patterns",
18
+ "begin": "(?i)\\s*(procedure|procedur|procedu|proced|proce)\\s+(?=[\\w'\"#\\$_])",
20
19
  "beginCaptures": {
21
20
  "1": {
22
21
  "name": "keyword.other.abl"
22
+ }
23
+ },
24
+ "end": "(?<=:)",
25
+ "patterns": [
26
+ {
27
+ "match": "(?i)\\b(external|cdecl|pascal|stdcall|ordinal|persistent|thread-safe|in|super)\\b",
28
+ "captures": {
29
+ "1": {
30
+ "name": "keyword.other.abl"
31
+ }
32
+ }
23
33
  },
24
- "2": {
25
- "name": "entity.name.function.abl"
34
+ {
35
+ "include": "#string"
26
36
  },
27
- "4": {
28
- "name": "keyword.other.abl"
37
+ {
38
+ "include": "#translation-attribute"
29
39
  },
30
- "5": {
31
- "name": "punctuation.definition.string.begin.abl"
40
+ {
41
+ "match": "([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&\\.]+)",
42
+ "captures": {
43
+ "1": {
44
+ "name": "entity.name.function.abl"
45
+ }
46
+ }
32
47
  },
33
- "6": {
34
- "name": "string.double.complex.abl"
48
+ {
49
+ "include": "#argument-reference"
35
50
  },
36
- "7": {
37
- "name": "punctuation.definition.string.begin.abl"
51
+ {
52
+ "include": "#numeric"
53
+ }
54
+ ]
55
+ },
56
+ "translation-attribute": {
57
+ "comment": "The attribute must have one of L, R, T, or C and/or a U and/or one integer value. For example, R1 as the attribute value for Label.",
58
+ "match": "(?i)(:[L|R|T|C|U]\\d*)\\b",
59
+ "captures": {
60
+ "1": {
61
+ "name": "support.other.abl"
62
+ }
63
+ }
64
+ },
65
+ "language-functions": {
66
+ "match": "(?i)\\b(opsys|proversion)\\b",
67
+ "captures": {
68
+ "1": {
69
+ "name": "support.function.abl"
70
+ }
71
+ }
72
+ },
73
+ "method-definition": {
74
+ "name": "meta.define.method.abl",
75
+ "begin": "(?i)^\\s*(method|constructor)\\s*",
76
+ "beginCaptures": {
77
+ "1": {
78
+ "name": "keyword.other.abl"
38
79
  }
39
80
  },
40
- "end": "(?=\\.)",
41
- "name": "meta.procedure.abl",
81
+ "comment": "The lookahead on the regex for the closing colon is required to make this scope end properly",
82
+ "end": "(?=:|\\.)",
42
83
  "patterns": [
43
84
  {
44
- "begin": ":",
45
- "end": "(?i)(end\\s*procedure|end)",
46
- "endCaptures": {
85
+ "include": "#access-modifier"
86
+ },
87
+ {
88
+ "match": "(?i)\\s*(void)\\s*",
89
+ "captures": {
47
90
  "1": {
48
91
  "name": "keyword.other.abl"
49
92
  }
93
+ }
94
+ },
95
+ {
96
+ "comment": "The method name and parameters will only be correctly scoped if the method name and the opening brace/paren are on the same line.",
97
+ "begin": "(?i)\\s*([a-z_]+[\\w\\-{}#$%&]*)\\s*(\\()\\s*",
98
+ "beginCaptures": {
99
+ "1": {
100
+ "name": "entity.name.function.abl"
101
+ },
102
+ "2": {
103
+ "name": "meta.brace.round.js"
104
+ }
105
+ },
106
+ "end": "(\\))",
107
+ "endCaptures": {
108
+ "1": {
109
+ "name": "meta.brace.round.js"
110
+ }
50
111
  },
51
- "name": "meta.procedure.body.abl",
52
112
  "patterns": [
53
113
  {
54
- "include": "#code-block"
114
+ "include": "#parameter-definition"
55
115
  }
56
116
  ]
117
+ },
118
+ {
119
+ "include": "#string",
120
+ "comment": "For the return type"
121
+ },
122
+ {
123
+ "include": "#extent",
124
+ "comment": "For the return type"
125
+ },
126
+ {
127
+ "include": "#primitive-type",
128
+ "comment": "For the return type"
129
+ },
130
+ {
131
+ "include": "#dll-type",
132
+ "comment": "For the return type"
133
+ },
134
+ {
135
+ "include": "#type-name-generic-progress",
136
+ "comment": "For the return type"
137
+ },
138
+ {
139
+ "include": "#type-name-progress",
140
+ "comment": "For the return type"
141
+ },
142
+ {
143
+ "include": "#type-name-generic",
144
+ "comment": "For the return type"
145
+ },
146
+ {
147
+ "include": "#type-name",
148
+ "comment": "For the return type"
149
+ },
150
+ {
151
+ "include": "#comment"
57
152
  }
58
153
  ]
59
154
  },
60
- "statements": {
155
+ "end-function-procedure-method-block": {
156
+ "match": "(?i)\\s*(end)\\s*(method|procedure|function)?\\s*(?=\\.)\\s*",
157
+ "comment": "This regex exists to make sure that END PROCEDURE is not seen as a new procedure block",
158
+ "captures": {
159
+ "1": {
160
+ "name": "keyword.other.abl"
161
+ },
162
+ "2": {
163
+ "name": "keyword.other.abl"
164
+ }
165
+ }
166
+ },
167
+ "as-type": {
168
+ "begin": "(?i)\\s*(as)\\s*(class)?",
169
+ "beginCaptures": {
170
+ "1": {
171
+ "name": "keyword.other.abl"
172
+ },
173
+ "2": {
174
+ "name": "keyword.other.abl"
175
+ }
176
+ },
177
+ "end": "\\s*(\\.|\\,|\\s*)",
61
178
  "patterns": [
62
179
  {
63
- "include": "#string"
180
+ "include": "#primitive-type"
64
181
  },
65
182
  {
66
- "include": "#singlelinecomment"
183
+ "include": "#type-name-generic-progress"
67
184
  },
68
185
  {
69
- "include": "#multilinecomment"
186
+ "include": "#type-name-progress"
70
187
  },
71
188
  {
72
- "include": "#declarations"
189
+ "include": "#type-name-generic"
73
190
  },
74
191
  {
75
- "include": "#numeric"
192
+ "include": "#type-name"
193
+ }
194
+ ]
195
+ },
196
+ "parameter-definition": {
197
+ "name": "meta.define.parameter.abl",
198
+ "patterns": [
199
+ {
200
+ "match": "(?i)\\s*(input-output|input-outpu|input-outp|input-out|input-ou|input-o|input|output|append|bind|by-value|preselect|buffer|parameter|param|no-undo)\\s*",
201
+ "comment": "Certain keywords like NO-UNDO are 'gathered' by a DEFINE INPUT PARAMETER statement. ",
202
+ "captures": {
203
+ "1": {
204
+ "name": "keyword.other.abl"
205
+ }
206
+ }
76
207
  },
77
208
  {
78
- "include": "#constant"
209
+ "match": "(?i)\\s*(dataset-handle|table-handle)\\s+([\\w\\-]+)",
210
+ "captures": {
211
+ "1": {
212
+ "name": "keyword.other.abl"
213
+ },
214
+ "2": {
215
+ "name": "variable.parameter.abl"
216
+ }
217
+ }
79
218
  },
80
219
  {
81
- "include": "#operator"
220
+ "match": "(?i)\\s*(dataset|table)\\s+([\\w\\-]+)\\s*",
221
+ "captures": {
222
+ "1": {
223
+ "name": "keyword.other.abl"
224
+ },
225
+ "2": {
226
+ "name": "storage.data.table.abl"
227
+ }
228
+ }
82
229
  },
83
230
  {
84
- "include": "#analyze-suspend-resume"
231
+ "include": "#parameter-as"
85
232
  },
86
233
  {
87
- "include": "#global-scoped-define"
234
+ "match": "(?i)\\s*(character|characte|charact|charac|chara|char|com-handle|date|datetime-tz|datetime|decimal|decima|decim|deci|dec|handle|int64|integer|intege|integ|inte|int|logical|logica|logic|logi|log|longchar|longcha|longch|memptr|raw|recid|rowid|widget-handle|widget-h?)(?![=\\w-])\\s*(,*)",
235
+ "captures": {
236
+ "1": {
237
+ "name": "storage.type.abl"
238
+ },
239
+ "2": {
240
+ "name": "punctuation.separator.comma.abl"
241
+ }
242
+ }
88
243
  },
89
244
  {
90
- "match": "(?i)(\\&[\\w-]*)|({\\&[\\w-]*})|(&window-system|&text-height|&line-number|&batch-mode|&file-name|&undefine|&sequence|&message|defined|&elseif|&scoped|&global|&opsys|&endif|&else|&scop|&then|&glob|&if)",
91
- "name": "storage.type.function.abl"
245
+ "match": "\\s*(,)\\s*",
246
+ "captures": {
247
+ "1": {
248
+ "name": "punctuation.separator.comma.abl"
249
+ }
250
+ }
92
251
  },
93
252
  {
94
- "include": "#primitive-type"
253
+ "include": "#buffer-for-table"
95
254
  },
96
255
  {
97
- "include": "#method-call"
256
+ "include": "#extent"
98
257
  },
99
258
  {
100
- "include": "#function-call"
259
+ "include": "#property-call"
101
260
  },
102
261
  {
103
- "include": "#code-block"
262
+ "include": "#abl-functions"
263
+ },
264
+ {
265
+ "include": "#array-literal"
266
+ },
267
+ {
268
+ "include": "#decimals"
269
+ },
270
+ {
271
+ "include": "#constant"
272
+ },
273
+ {
274
+ "include": "#type-name-generic-progress"
275
+ },
276
+ {
277
+ "include": "#type-name-progress"
278
+ },
279
+ {
280
+ "include": "#abl-system-handles"
104
281
  },
105
282
  {
106
283
  "include": "#keywords"
107
284
  },
108
285
  {
109
- "include": "#variable-name"
286
+ "include": "#handle-attributes"
110
287
  },
111
288
  {
112
- "include": "#array-literal"
289
+ "include": "#abl-functions"
113
290
  },
114
291
  {
115
- "include": "#punctuation-semicolon"
292
+ "include": "#type-name-generic"
293
+ },
294
+ {
295
+ "include": "#type-name"
296
+ },
297
+ {
298
+ "include": "#string"
299
+ },
300
+ {
301
+ "include": "#comment"
116
302
  }
117
303
  ]
118
304
  },
119
- "declarations": {
305
+ "function-parameter-definition": {
306
+ "comment": "https://docs.progress.com/bundle/abl-reference/page/Parameter-definition-syntax.html?labelkey=product_openedge_126",
307
+ "name": "meta.function.parameters",
308
+ "begin": "(\\()",
309
+ "beginCaptures": {
310
+ "1": {
311
+ "name": "meta.brace.round.js"
312
+ }
313
+ },
314
+ "end": "(\\))",
315
+ "endCaptures": {
316
+ "1": {
317
+ "name": "meta.brace.round.js"
318
+ }
319
+ },
120
320
  "patterns": [
121
321
  {
122
- "include": "#define"
322
+ "include": "#parameter-definition"
123
323
  }
124
324
  ]
125
325
  },
126
- "code-block": {
326
+ "statements": {
327
+ "name": "meta.statements.abl",
127
328
  "patterns": [
128
329
  {
129
- "include": "#singlelinecomment"
330
+ "include": "#copy-lob"
130
331
  },
131
332
  {
132
- "include": "#multilinecomment"
333
+ "include": "#create-buffer"
133
334
  },
134
335
  {
135
- "include": "#string"
336
+ "include": "#buffer-name"
136
337
  },
137
338
  {
138
- "include": "#numeric"
339
+ "include": "#temp-table-name"
139
340
  },
140
341
  {
141
- "include": "#constant"
342
+ "include": "#annotation"
142
343
  },
143
344
  {
144
- "include": "#operator"
345
+ "include": "#undo-statement"
145
346
  },
146
347
  {
147
- "include": "#include-file"
348
+ "include": "#block-statement"
148
349
  },
149
350
  {
150
- "include": "#define"
351
+ "include": "#block-label"
151
352
  },
152
353
  {
153
- "include": "#do-block"
354
+ "include": "#end-block"
154
355
  },
155
356
  {
156
- "include": "#keywords"
357
+ "include": "#end-function-procedure-method-block"
157
358
  },
158
359
  {
159
- "include": "#variable-name"
360
+ "include": "#find-record"
160
361
  },
161
362
  {
162
- "include": "#method-call"
363
+ "include": "#type-argument-function"
163
364
  },
164
365
  {
165
- "include": "#function-call"
166
- }
167
- ]
168
- },
169
- "define": {
170
- "begin": "(?i)\\b(def|define)\\s+",
171
- "beginCaptures": {
172
- "1": {
173
- "name": "keyword.other.abl"
174
- }
175
- },
176
- "end": "(?=\\.)",
177
- "comment": "Let's assume define can't have '.' inside",
178
- "name": "meta.define.abl",
179
- "patterns": [
366
+ "include": "#get-class"
367
+ },
180
368
  {
181
- "begin": "(?i)\\b(new|shared|var|vari|varia|variab|variabl|variable|private|protected|public|static|serializable|non-serializable)\\b",
182
- "end": "(?=\\.)",
183
- "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/DEFINE-VARIABLE-statement.html",
184
- "name": "meta.define.variable.abl",
185
- "beginCaptures": {
186
- "1": {
187
- "name": "keyword.other.abl"
188
- }
189
- },
190
- "patterns": [
191
- {
192
- "include": "#string"
193
- },
194
- {
195
- "include": "#primitive-type"
196
- },
197
- {
198
- "include": "#numeric"
199
- },
200
- {
201
- "include": "#constant"
202
- },
203
- {
204
- "include": "#keywords"
205
- },
206
- {
207
- "include": "#variable-name"
208
- }
209
- ]
369
+ "include": "#if-then"
210
370
  },
211
371
  {
212
- "begin": "(?i)\\b(?<![\\w-])(input|output|input-output|return)(?![\\w-])\\b",
213
- "end": "(?=\\.)",
214
- "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/DEFINE-PARAMETER-statement.html",
215
- "name": "meta.define.parameter.abl",
216
- "beginCaptures": {
217
- "1": {
218
- "name": "keyword.other.abl"
219
- }
220
- },
221
- "patterns": [
222
- {
223
- "include": "#string"
224
- },
225
- {
226
- "include": "#primitive-type"
227
- },
228
- {
229
- "include": "#numeric"
230
- },
231
- {
232
- "include": "#constant"
233
- },
234
- {
235
- "include": "#keywords"
236
- },
237
- {
238
- "include": "#parameter-name"
239
- }
240
- ]
372
+ "include": "#string"
241
373
  },
242
374
  {
243
- "match": "(?i)\\b(stream)\\b([^\\.]*)",
244
- "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/DEFINE-STREAM-statement.html",
245
- "name": "meta.define.stream.abl",
246
- "captures": {
247
- "1": {
248
- "name": "keyword.other.abl"
249
- },
250
- "2": {
251
- "patterns": [
252
- {
253
- "include": "#variable-name"
254
- }
255
- ]
256
- }
257
- }
375
+ "include": "#translation-attribute"
258
376
  },
259
377
  {
260
- "include": "#string"
378
+ "include": "#break-group"
261
379
  },
262
380
  {
263
- "include": "#primitive-type"
381
+ "include": "#property-call"
264
382
  },
265
383
  {
266
- "include": "#numeric"
384
+ "include": "#handle-attributes"
267
385
  },
268
386
  {
269
- "include": "#constant"
387
+ "include": "#abl-functions"
270
388
  },
271
389
  {
272
- "include": "#keywords"
390
+ "include": "#function-arguments"
391
+ },
392
+ {
393
+ "include": "#arguments-reference"
394
+ },
395
+ {
396
+ "include": "#method-definition"
397
+ },
398
+ {
399
+ "include": "#access-modifier"
400
+ },
401
+ {
402
+ "match": "(?i)\\s*(void)\\s*",
403
+ "captures": {
404
+ "1": {
405
+ "name": "keyword.other.abl"
406
+ }
407
+ }
408
+ },
409
+ {
410
+ "include": "#parens"
273
411
  },
274
412
  {
275
413
  "include": "#singlelinecomment"
276
414
  },
277
415
  {
278
416
  "include": "#multilinecomment"
417
+ },
418
+ {
419
+ "include": "#declarations"
420
+ },
421
+ {
422
+ "include": "#decimals"
423
+ },
424
+ {
425
+ "include": "#numeric"
426
+ },
427
+ {
428
+ "include": "#constant"
429
+ },
430
+ {
431
+ "include": "#timestamp-constant"
432
+ },
433
+ {
434
+ "include": "#for-join"
435
+ },
436
+ {
437
+ "include": "#operator"
438
+ },
439
+ {
440
+ "include": "#analyze-suspend-resume"
441
+ },
442
+ {
443
+ "include": "#global-scoped-define"
444
+ },
445
+ {
446
+ "include": "#label-variable"
447
+ },
448
+ {
449
+ "include": "#define-field"
450
+ },
451
+ {
452
+ "include": "#define-like"
453
+ },
454
+ {
455
+ "include": "#format-constant"
456
+ },
457
+ {
458
+ "include": "#preprocessors"
459
+ },
460
+ {
461
+ "include": "#procedure-definition"
462
+ },
463
+ {
464
+ "include": "#dll-type"
465
+ },
466
+ {
467
+ "include": "#parameter-as"
468
+ },
469
+ {
470
+ "include": "#buffer-for-table"
471
+ },
472
+ {
473
+ "include": "#primitive-type"
474
+ },
475
+ {
476
+ "include": "#property-accessor"
477
+ },
478
+ {
479
+ "include": "#type-reference"
480
+ },
481
+ {
482
+ "include": "#for-each-table"
483
+ },
484
+ {
485
+ "include": "#for-each-join"
486
+ },
487
+ {
488
+ "include": "#of-phrase"
489
+ },
490
+ {
491
+ "include": "#db-dot-table-dot-field",
492
+ "comment": "this include must be after any type references so that eg get-class(package.type) can continue to work"
493
+ },
494
+ {
495
+ "include": "#code-block"
496
+ },
497
+ {
498
+ "include": "#language-functions"
499
+ },
500
+ {
501
+ "include": "#comment"
502
+ },
503
+ {
504
+ "include": "#array-literal"
505
+ },
506
+ {
507
+ "include": "#punctuation-semicolon"
508
+ },
509
+ {
510
+ "include": "#punctuation-comma"
511
+ },
512
+ {
513
+ "include": "#parens"
514
+ },
515
+ {
516
+ "include": "#keywords"
517
+ },
518
+ {
519
+ "include": "#variable-name"
520
+ },
521
+ {
522
+ "include": "#punctuation-period"
523
+ },
524
+ {
525
+ "include": "#punctuation-colon"
526
+ }
527
+ ]
528
+ },
529
+ "declarations": {
530
+ "patterns": [
531
+ {
532
+ "include": "#define"
533
+ }
534
+ ]
535
+ },
536
+ "preprocessors": {
537
+ "match": "(?i)(\\&[\\w-]*)|({\\&[\\w-]*})|(&window-system|&text-height|&line-number|&batch-mode|&file-name|&undefine|&sequence|&message|defined|&elseif|&scoped|&global|&opsys|&endif|&else|&scop|&then|&glob|&if)",
538
+ "name": "storage.type.function.abl"
539
+ },
540
+ "type-names": {
541
+ "patterns": [
542
+ {
543
+ "include": "#type-name-generic-progress"
544
+ },
545
+ {
546
+ "include": "#type-name-progress"
547
+ },
548
+ {
549
+ "include": "#type-name-generic"
550
+ },
551
+ {
552
+ "include": "#type-name"
553
+ }
554
+ ]
555
+ },
556
+ "type-reference": {
557
+ "patterns": [
558
+ {
559
+ "include": "#define-type"
560
+ },
561
+ {
562
+ "include": "#get-class"
563
+ },
564
+ {
565
+ "include": "#new-class"
566
+ },
567
+ {
568
+ "include": "#using"
569
+ },
570
+ {
571
+ "include": "#type-argument-function"
572
+ }
573
+ ]
574
+ },
575
+ "using": {
576
+ "name": "meta.using.abl",
577
+ "begin": "(?i)\\s*(using)\\s*",
578
+ "beginCaptures": {
579
+ "1": {
580
+ "name": "keyword.other.abl"
581
+ }
582
+ },
583
+ "end": "(\\.)",
584
+ "comment": "use \\R lookahead here",
585
+ "endCaptures": {
586
+ "1": {
587
+ "name": "punctuation.terminator.abl"
588
+ }
589
+ },
590
+ "patterns": [
591
+ {
592
+ "comment": "Captures USING foo.bar.* .",
593
+ "match": "(?i)\\s*((([\\w\\#\\$\\%]+|progress)(\\.[\\w\\#\\$\\%]+)*)\\.\\*)\\s*",
594
+ "captures": {
595
+ "1": {
596
+ "name": "entity.name.package.abl"
597
+ }
598
+ }
599
+ },
600
+ {
601
+ "match": "(?i)\\s*(from|propath|assembly)\\s*",
602
+ "captures": {
603
+ "1": {
604
+ "name": "keyword.other.abl"
605
+ }
606
+ }
607
+ },
608
+ {
609
+ "include": "#type-name"
610
+ }
611
+ ]
612
+ },
613
+ "define-type": {
614
+ "patterns": [
615
+ {
616
+ "include": "#define-class"
617
+ },
618
+ {
619
+ "include": "#define-interface"
620
+ },
621
+ {
622
+ "include": "#define-enum"
623
+ }
624
+ ]
625
+ },
626
+ "type-name-generic-progress": {
627
+ "name": "entity.name.type.generic.abl",
628
+ "begin": "(?i)\\s*((progress)(\\.[\\w\\#\\$\\%\\-]+)*)\\s*<",
629
+ "beginCaptures": {
630
+ "1": {
631
+ "name": "entity.name.type.abl"
632
+ }
633
+ },
634
+ "end": "\\>",
635
+ "patterns": [
636
+ {
637
+ "include": "#generic-types"
638
+ }
639
+ ]
640
+ },
641
+ "type-name-generic": {
642
+ "name": "entity.name.type.generic.abl",
643
+ "begin": "(?i)\\s*(([\\w\\#\\$\\%\\-]+)(\\.[\\w\\#\\$\\%\\-]+)*\\s*)\\s*<",
644
+ "beginCaptures": {
645
+ "1": {
646
+ "name": "entity.name.type.abl"
647
+ }
648
+ },
649
+ "end": "\\>",
650
+ "patterns": [
651
+ {
652
+ "include": "#generic-types"
653
+ }
654
+ ]
655
+ },
656
+ "generic-types": {
657
+ "patterns": [
658
+ {
659
+ "include": "#type-name-comma-progress"
660
+ },
661
+ {
662
+ "include": "#type-name-comma"
663
+ },
664
+ {
665
+ "include": "#type-name-generic-progress"
666
+ },
667
+ {
668
+ "include": "#type-name-progress"
669
+ },
670
+ {
671
+ "include": "#type-name-generic"
672
+ },
673
+ {
674
+ "include": "#type-name"
675
+ }
676
+ ]
677
+ },
678
+ "type-name": {
679
+ "match": "(?i)\\b([\\w\\#\\$\\%\\-]+(\\.[\\w\\#\\$\\%\\-]+)*)\\b",
680
+ "captures": {
681
+ "1": {
682
+ "name": "entity.name.type.abl"
683
+ }
684
+ }
685
+ },
686
+ "type-name-comma": {
687
+ "match": "(?i)\\s*(,*)\\s*(class)?\\s+(([\\w\\#\\$\\%]+)(\\.?[\\w\\#\\$\\%]*)*(?<!\\.))\\s*(,*)\\s*",
688
+ "comment": "Capture group 3 is the <T> type name",
689
+ "captures": {
690
+ "1": {
691
+ "name": "punctuation.separator.comma.abl"
692
+ },
693
+ "2": {
694
+ "name": "keyword.other.abl"
695
+ },
696
+ "3": {
697
+ "name": "entity.name.type.abl"
698
+ },
699
+ "6": {
700
+ "name": "punctuation.separator.comma.abl"
701
+ }
702
+ }
703
+ },
704
+ "type-name-progress": {
705
+ "match": "(?i)\\s*((progress\\.)([\\.\\w\\#\\$\\%]+)*)\\s*(?<!\\.)",
706
+ "captures": {
707
+ "1": {
708
+ "name": "entity.name.type.abl"
709
+ }
710
+ }
711
+ },
712
+ "type-name-comma-progress": {
713
+ "match": "(?i)\\s*(,*)\\s*(class)?\\s*((progress\\.|map|set)(\\.?[\\w\\#\\$\\%]*)*(?<!\\.))\\s*(,*)\\s*",
714
+ "comment": "Capture group 3 is the <T> type name",
715
+ "captures": {
716
+ "1": {
717
+ "name": "punctuation.separator.comma.abl"
718
+ },
719
+ "2": {
720
+ "name": "keyword.other.abl"
721
+ },
722
+ "3": {
723
+ "name": "entity.name.type.abl"
724
+ },
725
+ "6": {
726
+ "name": "punctuation.separator.comma.abl"
727
+ }
728
+ }
729
+ },
730
+ "define-class": {
731
+ "name": "meta.define.class.abl",
732
+ "begin": "(?i)\\b(class)\\b",
733
+ "beginCaptures": {
734
+ "1": {
735
+ "name": "keyword.other.abl"
736
+ }
737
+ },
738
+ "end": "\\s*(:)\\s*",
739
+ "endCaptures": {
740
+ "1": {
741
+ "name": "punctuation.terminator.abl"
742
+ }
743
+ },
744
+ "patterns": [
745
+ {
746
+ "match": "(?i)\\s*(serializable|abstract|final|use-widget-pool|inherits|implements)\\s*",
747
+ "captures": {
748
+ "1": {
749
+ "name": "keyword.other.abl"
750
+ }
751
+ }
752
+ },
753
+ {
754
+ "include": "#implements-type"
755
+ },
756
+ {
757
+ "include": "#type-name-generic-progress"
758
+ },
759
+ {
760
+ "include": "#type-name-generic"
761
+ },
762
+ {
763
+ "include": "#type-name-comma-progress"
764
+ },
765
+ {
766
+ "include": "#type-name-progress"
767
+ },
768
+ {
769
+ "include": "#type-name-comma"
770
+ },
771
+ {
772
+ "include": "#type-name"
773
+ },
774
+ {
775
+ "include": "#punctuation-comma"
776
+ },
777
+ {
778
+ "include": "#comment"
779
+ }
780
+ ]
781
+ },
782
+ "handle-attributes": {
783
+ "patterns": [
784
+ {
785
+ "include": "#handle-attributes-A"
786
+ },
787
+ {
788
+ "include": "#handle-attributes-B"
789
+ },
790
+ {
791
+ "include": "#handle-attributes-C"
792
+ },
793
+ {
794
+ "include": "#handle-attributes-D"
795
+ },
796
+ {
797
+ "include": "#handle-attributes-E"
798
+ },
799
+ {
800
+ "include": "#handle-attributes-F"
801
+ },
802
+ {
803
+ "include": "#handle-attributes-G"
804
+ },
805
+ {
806
+ "include": "#handle-attributes-H"
807
+ },
808
+ {
809
+ "include": "#handle-attributes-I"
810
+ },
811
+ {
812
+ "include": "#handle-attributes-K"
813
+ },
814
+ {
815
+ "include": "#handle-attributes-L"
816
+ },
817
+ {
818
+ "include": "#handle-attributes-M"
819
+ },
820
+ {
821
+ "include": "#handle-attributes-N"
822
+ },
823
+ {
824
+ "include": "#handle-attributes-O"
825
+ },
826
+ {
827
+ "include": "#handle-attributes-P"
828
+ },
829
+ {
830
+ "include": "#handle-attributes-Q"
831
+ },
832
+ {
833
+ "include": "#handle-attributes-R"
834
+ },
835
+ {
836
+ "include": "#handle-attributes-S"
837
+ },
838
+ {
839
+ "include": "#handle-attributes-T"
840
+ },
841
+ {
842
+ "include": "#handle-attributes-U"
843
+ },
844
+ {
845
+ "include": "#handle-attributes-V"
846
+ },
847
+ {
848
+ "include": "#handle-attributes-W"
849
+ },
850
+ {
851
+ "include": "#handle-attributes-X"
852
+ },
853
+ {
854
+ "include": "#handle-attributes-Y"
855
+ }
856
+ ]
857
+ },
858
+ "handle-attributes-A": {
859
+ "match": "(?i)(:)(ACCELERATOR|ACCEPT-CHANGES|ACCEPT-ROW-CHANGES|ACTIVE|ACTOR|ADD-BUFFER|add-calc-col|add-calc-colu|add-calc-colum|add-calc-column|ADD-COLUMNS-FROM|add-events-proc|add-events-proce|add-events-proced|add-events-procedu|add-events-procedur|add-events-procedure|ADD-FIELDS-FROM|ADD-FIRST|ADD-HEADER-ENTRY|ADD-INDEX-FIELD|ADD-LAST|add-like-col|add-like-colu|add-like-colum|add-like-column|ADD-LIKE-FIELD|ADD-LIKE-INDEX|ADD-NEW-FIELD|ADD-NEW-INDEX|ADD-PARENT-ID-RELATION|add-rel|add-rela|add-relat|add-relati|add-relatio|add-relation|ADD-SCHEMA-LOCATION|ADD-SOURCE-BUFFER|add-super-proc|add-super-proce|add-super-proced|add-super-procedu|add-super-procedur|add-super-procedure|ADM-DATA|AFTER-BUFFER|AFTER-ROWID|AFTER-TABLE|ALLOW-COLUMN-SEARCHING|ALLOW-PREV-DESERIALIZATION|ALWAYS-ON-TOP|ambig|ambigu|ambiguo|ambiguou|ambiguous|APPEND-CHILD|appl-alert|appl-alert-|appl-alert-b|appl-alert-bo|appl-alert-box|appl-alert-boxe|appl-alert-boxes|APPL-CONTEXT-ID|APPLY-CALLBACK|APPSERVER-INFO|APPSERVER-PASSWORD|APPSERVER-USERID|ASYNCHRONOUS|ASYNC-REQUEST-COUNT|ASYNC-REQUEST-HANDLE|ATTACH-DATA-SOURCE|ATTACHED-PAIRLIST|ATTRIBUTE-NAMES|attr|attr-|attr-s|attr-sp|attr-spa|attr-spac|attr-space|AUDIT-EVENT-CONTEXT|AUTHENTICATION-FAILED|auto-comp|auto-compl|auto-comple|auto-complet|auto-completi|auto-completio|auto-completion|AUTO-DELETE|AUTO-DELETE-XML|auto-end-key|auto-endkey|AUTO-GO|auto-ind|auto-inde|auto-inden|auto-indent|AUTO-RESIZE|auto-ret|auto-retu|auto-retur|auto-return|AUTO-SYNCHRONIZE|auto-val|auto-vali|auto-valid|auto-valida|auto-validat|auto-validate|auto-z|auto-za|auto-zap|avail|availa|availab|availabl|available|AVAILABLE-FORMATS)\\s*",
860
+ "captures": {
861
+ "1": {
862
+ "name": "punctuation.separator.colon.abl"
863
+ },
864
+ "2": {
865
+ "name": "entity.name.function.abl"
866
+ }
867
+ }
868
+ },
869
+ "handle-attributes-B": {
870
+ "match": "(?i)(:)(back|back-tab|backg|backgr|backgro|backgrou|backgroun|background|BASE-ADE|BASIC-LOGGING|BATCH-MODE|BATCH-SIZE|BEFORE-BUFFER|BEFORE-ROWID|BEFORE-TABLE|BEGIN-EVENT-GROUP|bgc|bgco|bgcol|bgcolo|bgcolor|BLANK|BLOCK-ITERATION-DISPLAY|border-b|border-bo|border-bot|border-bott|border-botto|border-bottom|border-bottom-c|border-bottom-ch|border-bottom-cha|border-bottom-char|border-bottom-chars|border-bottom-p|border-bottom-pi|border-bottom-pix|border-bottom-pixe|border-bottom-pixel|border-bottom-pixels|border-l|border-le|border-lef|border-left|border-left-c|border-left-ch|border-left-cha|border-left-char|border-left-chars|border-left-p|border-left-pi|border-left-pix|border-left-pixe|border-left-pixel|border-left-pixels|border-r|border-ri|border-rig|border-righ|border-right|border-right-c|border-right-ch|border-right-cha|border-right-char|border-right-chars|border-right-p|border-right-pi|border-right-pix|border-right-pixe|border-right-pixel|border-right-pixels|border-t|border-to|border-top|border-top-c|border-top-ch|border-top-cha|border-top-char|border-top-chars|border-top-p|border-top-pi|border-top-pix|border-top-pixe|border-top-pixel|border-top-pixels|BOX|BOX-SELECTABLE|BUFFER-CHARS|buffer-comp|buffer-compa|buffer-compar|buffer-compare|BUFFER-COPY|BUFFER-CREATE|BUFFER-DELETE|BUFFER-FIELD|BUFFER-FIELD|BUFFER-GROUP-ID|BUFFER-GROUP-NAME|BUFFER-HANDLE|BUFFER-LINES|buffer-n|buffer-na|buffer-nam|buffer-name|BUFFER-PARTITION-ID|buffer-releas|buffer-release|BUFFER-TENANT-ID|BUFFER-TENANT-NAME|BUFFER-VALIDATE|BUFFER-VALUE|BYTES-READ|BYTES-WRITTEN)\\s*",
871
+ "captures": {
872
+ "1": {
873
+ "name": "punctuation.separator.colon.abl"
874
+ },
875
+ "2": {
876
+ "name": "entity.name.function.abl"
877
+ }
878
+ }
879
+ },
880
+ "handle-attributes-C": {
881
+ "match": "(?i)(:)(CACHE|CALL-NAME|CALL-TYPE|CANCEL-BREAK|CANCEL-BUTTON|CANCEL-REQUESTS|CANCEL-REQUESTS-AFTER|CANCELLED|can-crea|can-creat|can-create|can-dele|can-delet|can-delete|CAN-DO-DOMAIN-SUPPORT|CAN-READ|CAN-WRITE|CAREFUL-PAINT|case-sen|case-sens|case-sensi|case-sensit|case-sensiti|case-sensitiv|case-sensitive|center|centere|centered|CHARSET|CHECKED|CHILD-BUFFER|CHILD-NUM|CLASS-TYPE|CLEAR|CLEAR-APPL-CONTEXT|CLEAR-LOG|clear-select|clear-selecti|clear-selectio|clear-selection|clear-sort-arrow|clear-sort-arrows|CLIENT-CONNECTION-ID|CLIENT-TTY|CLIENT-TYPE|CLIENT-WORKSTATION|CLONE-NODE|CLOSE-LOG|CODE|CODEPAGE|COLUMN|column-bgc|column-bgco|column-bgcol|column-bgcolo|column-bgcolor|COLUMN-DCOLOR|column-fgc|column-fgco|column-fgcol|column-fgcolo|column-fgcolor|COLUMN-FONT|column-lab|column-labe|column-label|COLUMN-MOVABLE|column-pfc|column-pfco|column-pfcol|column-pfcolo|column-pfcolor|COLUMN-READ-ONLY|COLUMN-RESIZABLE|column-sc|column-scr|column-scro|column-scrol|column-scroll|column-scrolli|column-scrollin|column-scrolling|COM-HANDLE|COMPLETE|CONFIG-NAME|CONNECT|CONNECTED|CONTEXT-HELP|CONTEXT-HELP-FILE|CONTEXT-HELP-ID|CONTROL-BOX|convert-3d|convert-3d-|convert-3d-c|convert-3d-co|convert-3d-col|convert-3d-colo|convert-3d-color|convert-3d-colors|convert-to-offs|convert-to-offse|convert-to-offset|COPY-DATASET|COPY-SAX-ATTRIBUTES|COPY-TEMP-TABLE|COVERAGE|CPCASE|CPCOLL|cpint|cpinte|cpinter|cpintern|cpinterna|cpinternal|CPLOG|CPPRINT|CPRCODEIN|CPRCODEOUT|CPSTREAM|CPTERM|crc-val|crc-valu|crc-value|CREATE-LIKE|CREATE-LIKE-SEQUENTIAL|CREATE-NODE|CREATE-NODE-NAMESPACE|CREATE-RESULT-LIST-ENTRY|CURRENT-CHANGED|CURRENT-COLUMN|current-env|current-envi|current-envir|current-enviro|current-environ|current-environm|current-environme|current-environmen|current-environment|CURRENT-ITERATION|CURRENT-QUERY|CURRENT-REQUEST-INFO|CURRENT-RESPONSE-INFO|CURRENT-RESULT-ROW|CURRENT-ROW-MODIFIED|CURRENT-WINDOW|curs|curso|cursor|cursor-char|CURSOR-LINE|CURSOR-OFFSET)\\s*",
882
+ "captures": {
883
+ "1": {
884
+ "name": "punctuation.separator.colon.abl"
885
+ },
886
+ "2": {
887
+ "name": "entity.name.function.abl"
888
+ }
889
+ }
890
+ },
891
+ "handle-attributes-D": {
892
+ "match": "(?i)(:)(data-entry-ret|data-entry-retu|data-entry-retur|data-entry-return|DATA-SOURCE|DATA-SOURCE-COMPLETE-MAP|DATA-SOURCE-MODIFIED|DATA-SOURCE-ROWID|data-t|data-ty|data-typ|data-type|DATASET|date-f|date-fo|date-for|date-form|date-forma|date-format|DB-CONTEXT|DB-LIST|DB-REFERENCES|DBNAME|DCOLOR|DDE-ERROR|dde-i|dde-id|DDE-ITEM|DDE-NAME|DDE-TOPIC|DEBLANK|debu|debug|debug-alert|dec|deci|decim|decima|decimal|decimals|DECLARE-NAMESPACE|DEFAULT|DEFAULT-BUFFER-HANDLE|default-but|default-butt|default-butto|default-button|DEFAULT-COMMIT|DEFAULT-STRING|DEFAULT-VALUE|DELETE|DELETE-CHAR|DELETE-CURRENT-ROW|DELETE-HEADER-ENTRY|DELETE-LINE|DELETE-NODE|DELETE-RESULT-LIST-ENTRY|DELETE-SELECTED-ROW|DELETE-SELECTED-ROWS|DELIMITER|descript|descripti|descriptio|description|DESELECT-FOCUSED-ROW|DESELECT-ROWS|DESELECT-SELECTED-ROW|DETACH-DATA-SOURCE|dir|directory|DISABLE|DISABLE-AUTO-ZAP|DISABLE-CONNECTIONS|DISABLE-DUMP-TRIGGERS|DISABLE-LOAD-TRIGGERS|discon|disconn|disconne|disconnec|disconnect|DISPLAY-MESSAGE|display-t|display-timezone|display-ty|display-typ|display-typess|DOMAIN-DESCRIPTION|DOMAIN-NAME|DOMAIN-TYPE|DOWN|DRAG-ENABLED|DROP-TARGET|DUMP-LOGGING-NOW|DYNAMIC)\\s*",
893
+ "captures": {
894
+ "1": {
895
+ "name": "punctuation.separator.colon.abl"
896
+ },
897
+ "2": {
898
+ "name": "entity.name.function.abl"
899
+ }
900
+ }
901
+ },
902
+ "handle-attributes-E": {
903
+ "match": "(?i)(:)(edge-c|edge-ch|edge-cha|edge-char|edge-chars|edge-p|edge-pi|edge-pix|edge-pixe|edge-pixel|edge-pixels|EDIT-CAN-PASTE|EDIT-CAN-UNDO|EDIT-CLEAR|EDIT-COPY|EDIT-CUT|EDIT-PASTE|EDIT-UNDO|EMPTY|EMPTY-DATASET|EMPTY-TEMP-TABLE|ENABLE|ENABLE-CONNECTIONS|ENABLE-EVENTS|ENABLED|ENCODE-DOMAIN-ACCESS-CODE|ENCODING|ENCRYPT-AUDIT-MAC-KEY|ENCRYPTION-SALT|END-DOCUMENT|END-ELEMENT|END-EVENT-GROUP|END-FILE-DROP|END-USER-PROMPT|ENTITY-EXPANSION-LIMIT|ENTRY|ENTRY-TYPES-LIST|ERROR|error-col|error-colu|error-colum|error-columnsss|ERROR-OBJECT|ERROR-OBJECT-DETAIL|ERROR-ROW|ERROR-STACK-TRACE|ERROR-STRING|EVENT-GROUP-ID|EVENT-HANDLER|EVENT-HANDLER-OBJECT|EVENT-PROCEDURE|EVENT-PROCEDURE-CONTEXT|event-ty|event-typ|event-type|EXCLUSIVE-ID|EXECUTION-LOG|EXIT-CODE|EXPAND|EXPANDABLE|EXPORT|EXPORT-PRINCIPAL|EXTENT)\\s*",
904
+ "captures": {
905
+ "1": {
906
+ "name": "punctuation.separator.colon.abl"
907
+ },
908
+ "2": {
909
+ "name": "entity.name.function.abl"
910
+ }
911
+ }
912
+ },
913
+ "handle-attributes-F": {
914
+ "match": "(?i)(:)(FETCH-SELECTED-ROW|FGCOfgc|fgco|fgcol|fgcolo|fgcolorLOR|file-create-d|file-create-da|file-create-dat|file-create-date|file-create-t|file-create-ti|file-create-tim|file-create-time|file-mod-d|file-mod-da|file-mod-dat|file-mod-date|file-mod-t|file-mod-ti|file-mod-tim|file-mod-time|FILE-NAME|file-off|file-offs|file-offse|file-offset|FILE-SIZE|FILE-TYPE|FILL|FILLED|FILL-MODE|FILL-WHERE-STRING|FIND-BY-ROWID|FIND-CURRENT|FIND-FIRST|FIND-LAST|FIND-UNIQUE|first-async|first-async-|first-async-r|first-async-re|first-async-req|first-async-requ|first-async-reque|first-async-reques|first-async-request|FIRST-BUFFER|FIRST-CHILD|FIRST-COLUMN|FIRST-DATASET|FIRST-DATA-SOURCE|FIRST-FORM|FIRST-OBJECT|FIRST-OF|first-proc|first-proce|first-proced|first-procedu|first-procedur|first-procedure|FIRST-QUERY|first-serv|first-serve|first-server|first-server-socket|FIRST-SOCKET|first-tab-i|first-tab-it|first-tab-ite|first-tab-item|FIT-LAST-COLUMN|FLAT-BUTTON|FOCUSED-ROW|FOCUSED-ROW-SELECTED|FONT|fore|foreg|foregr|foregro|foregrou|foregroun|foreground|FOREIGN-KEY-HIDDEN|FORM-INPUT|FORM-LONG-INPUT|forma|format|formatte|formatted|FORWARD-ONLY|fragmen|fragment|fram|frame|FRAME-COL|FRAME-NAME|FRAME-ROW|frame-spa|frame-spac|frame-spaci|frame-spacin|frame-spacing|FRAME-X|FRAME-Y|FREQUENCY|full-height|full-height-c|full-height-ch|full-height-cha|full-height-char|full-height-chars|full-height-p|full-height-pi|full-height-pix|full-height-pixe|full-height-pixel|full-height-pixels|full-pathn|full-pathna|full-pathnam|full-pathname|full-width-|full-width-c|full-width-ch|full-width-cha|full-width-char|full-width-chars|full-width-p|full-width-pi|full-width-pix|full-width-pixe|full-width-pixel|full-width-pixels|FUNCTION)\\s*",
915
+ "captures": {
916
+ "1": {
917
+ "name": "punctuation.separator.colon.abl"
918
+ },
919
+ "2": {
920
+ "name": "entity.name.function.abl"
921
+ }
922
+ }
923
+ },
924
+ "handle-attributes-G": {
925
+ "match": "(?i)(:)(GET-ATTRIBUTE|GET-ATTRIBUTE-NODE|GET-BINARY-DATA|get-blue|get-blue-|get-blue-v|get-blue-va|get-blue-val|get-blue-valu|get-blue-value|get-browse-col|get-browse-colu|get-browse-colum|get-browse-column|GET-BUFFER-HANDLE|GET-BYTES-AVAILABLE|GET-CALLBACK-PROC-CONTEXT|GET-CALLBACK-PROC-NAME|GET-CGI-LIST|GET-CGI-VALUE|GET-CGI-LONG-VALUE|GET-CHANGES|GET-CHILD|get-child-rel|get-child-rela|get-child-relat|get-child-relati|get-child-relatio|get-child-relation|GET-CLIENT|GET-COLUMN|GET-CONFIG-VALUE|get-curr|get-curre|get-curren|get-current|GET-DATASET-BUFFER|GET-DOCUMENT-ELEMENT|GET-DROPPED-FILE|GET-DYNAMIC|GET-ERROR-COLUMN|GET-ERROR-ROW|GET-FILE-NAME|get-file-offse|get-file-offset|get-firs|get-first|get-green|get-green-|get-green-v|get-green-va|get-green-val|get-green-valu|get-green-value|get-header-entr|get-header-entry|GET-INDEX-BY-NAMESPACE-NAME|GET-INDEX-BY-QNAME|GET-ITERATION|GET-LAST|GET-LOCALNAME-BY-INDEX|GET-MESSAGE|GET-MESSAGE-TYPE|GET-NEXT|GET-NODE|GET-NUMBER|GET-PARENT|GET-PREV|GET-PRINTERS|GET-QNAME-BY-INDEX|get-red|get-red-|get-red-v|get-red-va|get-red-val|get-red-valu|get-red-value|get-rel|get-rela|get-relat|get-relati|get-relatio|get-relation|GET-REPOSITIONED-ROW|get-rgb|get-rgb-|get-rgb-v|get-rgb-va|get-rgb-val|get-rgb-valu|get-rgb-values|GET-ROW|GET-SAFE-USER|get-selected|get-selected-|get-selected-w|get-selected-wi|get-selected-wid|get-selected-widg|get-selected-widge|get-selected-widget|GET-SERIALIZED|GET-SIGNATURE|GET-SOCKET-OPTION|GET-SOURCE-BUFFER|GET-TAB-ITEM|get-text-height|get-text-height-c|get-text-height-ch|get-text-height-cha|get-text-height-char|get-text-height-chars|get-text-height-p|get-text-height-pi|get-text-height-pix|get-text-height-pixe|get-text-height-pixel|get-text-height-pixels|get-text-width|get-text-width-c|get-text-width-ch|get-text-width-cha|get-text-width-char|get-text-width-chars|get-text-width-p|get-text-width-pi|get-text-width-pix|get-text-width-pixe|get-text-width-pixel|get-text-width-pixels|GET-TOP-BUFFER|GET-TYPE-BY-INDEX|GET-TYPE-BY-NAMESPACE-NAME|GET-TYPE-BY-QNAME|GET-URI-BY-INDEX|GET-VALUE-BY-INDEX|GET-VALUE-BY-NAMESPACE-NAME|GET-VALUE-BY-QNAME|get-wait|get-wait-|get-wait-s|get-wait-st|get-wait-sta|get-wait-stat|get-wait-state|graphic-e|graphic-ed|graphic-edg|graphic-edge|grid-factor-h|grid-factor-ho|grid-factor-hor|grid-factor-hori|grid-factor-horiz|grid-factor-horizo|grid-factor-horizon|grid-factor-horizont|grid-factor-horizonta|grid-factor-horizontal|grid-factor-v|grid-factor-ve|grid-factor-ver|grid-factor-vert|grid-factor-verti|grid-factor-vertic|grid-factor-vertica|grid-factor-vertical|GRID-SNAP|grid-unit-height|grid-unit-height-c|grid-unit-height-ch|grid-unit-height-cha|grid-unit-height-char|grid-unit-height-chars|grid-unit-height-p|grid-unit-height-pi|grid-unit-height-pix|grid-unit-height-pixe|grid-unit-height-pixel|grid-unit-height-pixels|grid-unit-width|grid-unit-width-c|grid-unit-width-ch|grid-unit-width-cha|grid-unit-width-char|grid-unit-width-chars|grid-unit-width-p|grid-unit-width-pi|grid-unit-width-pix|grid-unit-width-pixe|grid-unit-width-pixel|grid-unit-width-pixels|GRID-VISIBLE|GROUP-BOX)\\s*",
926
+ "captures": {
927
+ "1": {
928
+ "name": "punctuation.separator.colon.abl"
929
+ },
930
+ "2": {
931
+ "name": "entity.name.function.abl"
932
+ }
933
+ }
934
+ },
935
+ "handle-attributes-H": {
936
+ "match": "(?i)(:)(HANDLE|HANDLER|HAS-LOBS|HAS-RECORDS|height|height-c|height-ch|height-cha|height-char|height-chars|height-p|height-pi|height-pix|height-pixe|height-pixel|height-pixels|HELP|HIDDEN|horizo|horizon|horizont|horizonta|horizontal|HTML-CHARSET|HTML-END-OF-LINE|HTML-END-OF-PAGE|HTML-FRAME-BEGIN|HTML-FRAME-END|HTML-HEADER-BEGIN|HTML-HEADER-END|HTML-TITLE-BEGIN|HTML-TITLE-END|HWND)\\s*",
937
+ "captures": {
938
+ "1": {
939
+ "name": "punctuation.separator.colon.abl"
940
+ },
941
+ "2": {
942
+ "name": "entity.name.function.abl"
943
+ }
944
+ }
945
+ },
946
+ "handle-attributes-I": {
947
+ "match": "(?i)(:)(icfparam|icfparame|icfparamet|icfparamete|icfparameter|ICON|ignore-current-mod|ignore-current-modi|ignore-current-modif|ignore-current-modifi|ignore-current-modifie|ignore-current-modified|IMAGE|IMAGE-DOWN|IMAGE-INSENSITIVE|IMAGE-UP|IMMEDIATE-DISPLAY|IMPORT-NODE|IMPORT-PRINCIPAL|INCREMENT-EXCLUSIVE-ID|INDEX|index-info|index-infor|index-inform|index-informa|index-informat|index-informati|index-informatio|index-information|IN-HANDLE|inherit-bgc|inherit-bgco|inherit-bgcol|inherit-bgcolo|inherit-bgcolor|inherit-fgc|inherit-fgco|inherit-fgcol|inherit-fgcolo|inherit-fgcolor|init|initial|INITIALIZE|INITIALIZE-DOCUMENT-TYPE|INITIATE|INNER-CHARS|INNER-LINES|INPUT-VALUE|INSERT|INSERT-ATTRIBUTE|insert-b|insert-ba|insert-bac|insert-back|insert-backt|insert-backta|insert-backtab|INSERT-BEFORE|INSERT-FILE|INSERT-ROW|INSERT-STRING|insert-t|insert-ta|insert-tab|INSTANTIATING-PROCEDURE|INTERNAL-ENTRIES|INVOKE|IS-CLASS|IS-JSON|IS-MULTI-TENANT|IS-OPEN|IS-PARAMETER-SET|is-partitione|is-partitioned|IS-ROW-SELECTED|IS-SELECTED|IS-XML|ITEMS-PER-ROW)\\s*",
948
+ "captures": {
949
+ "1": {
950
+ "name": "punctuation.separator.colon.abl"
951
+ },
952
+ "2": {
953
+ "name": "entity.name.function.abl"
954
+ }
955
+ }
956
+ },
957
+ "handle-attributes-K": {
958
+ "match": "(?i)(:)(KEEP-CONNECTION-OPEN|keep-frame-z|keep-frame-z-|keep-frame-z-o|keep-frame-z-or|keep-frame-z-ord|keep-frame-z-orde|keep-frame-z-order|KEEP-SECURITY-CACHE|KEY|KEYS)\\s*",
959
+ "captures": {
960
+ "1": {
961
+ "name": "punctuation.separator.colon.abl"
962
+ },
963
+ "2": {
964
+ "name": "entity.name.function.abl"
965
+ }
966
+ }
967
+ },
968
+ "handle-attributes-L": {
969
+ "match": "(?i)(:)(LABEL|label-bgc|label-bgco|label-bgcol|label-bgcolo|label-bgcolor|label-dc|label-dco|label-dcol|label-dcolo|label-dcolor|label-fgc|label-fgco|label-fgcol|label-fgcolo|label-fgcolor|LABEL-FONT|LABELS|LABELS-HAVE-COLONS|language|languages|LARGE|LARGE-TO-SMALL|last-async|last-async-|last-async-r|last-async-re|last-async-req|last-async-requ|last-async-reque|last-async-reques|last-async-request|LAST-BATCH|LAST-CHILD|last-even|last-event|LAST-FORM|LAST-OBJECT|LAST-OF|last-proce|last-proced|last-procedu|last-procedur|last-procedure|last-serv|last-serve|last-server|last-server-socket|LAST-SOCKET|last-tab-i|last-tab-it|last-tab-ite|last-tab-item|LENGTH|LIBRARY|LIBRARY-CALLING-CONVENTION|LINE|LIST-ITEM-PAIRS|LIST-ITEMS|LISTINGS|LITERAL-QUESTION|LOAD|LOAD-DOMAINS|LOAD-ICON|LOAD-IMAGE|LOAD-IMAGE-DOWN|LOAD-IMAGE-INSENSITIVE|LOAD-IMAGE-UP|load-mouse-p|load-mouse-po|load-mouse-poi|load-mouse-poin|load-mouse-point|load-mouse-pointe|load-mouse-pointer|LOAD-SMALL-ICON|LOCAL-HOST|LOCAL-NAME|LOCAL-PORT|LOCAL-VERSION-INFO|LOCATOR-COLUMN-NUMBER|LOCATOR-LINE-NUMBER|LOCATOR-PUBLIC-ID|LOCATOR-SYSTEM-ID|LOCATOR-TYPE|LOCKED|LOCK-REGISTRATION|LOG-AUDIT-EVENT|LOG-ENTRY-TYPES|LOG-THRESHOLD|LOGFILE-NAME|LOGGING-LEVEL|LOGIN-EXPIRATION-TIMESTAMP|LOGIN-HOST|LOGIN-STATE|LOGOUT|LONGCHAR-TO-NODE-VALUE|LOOKUP)\\s*",
970
+ "captures": {
971
+ "1": {
972
+ "name": "punctuation.separator.colon.abl"
973
+ },
974
+ "2": {
975
+ "name": "entity.name.function.abl"
976
+ }
977
+ }
978
+ },
979
+ "handle-attributes-M": {
980
+ "match": "(?i)(:)(MANDATORY|MANUAL-HIGHLIGHT|MARK-NEW|MARK-ROW-STATE|MAX-BUTTON|MAX-CHARS|MAX-DATA-GUESS|max-height|max-height-c|max-height-ch|max-height-cha|max-height-char|max-height-chars|max-height-p|max-height-pi|max-height-pix|max-height-pixe|max-height-pixel|max-height-pixels|MAXIMUM-LEVEL|max-val|max-valu|max-value|max-width|max-width-c|max-width-ch|max-width-cha|max-width-char|max-width-chars|max-width-p|max-width-pi|max-width-pix|max-width-pixe|max-width-pixel|max-width-pixels|MEMPTR-TO-NODE-VALUE|MENU-BAR|menu-k|menu-ke|menu-key|menu-m|menu-mo|menu-mou|menu-mous|menu-mouse|MERGE-BY-FIELD|MERGE-CHANGES|MERGE-ROW-CHANGES|MESSAGE-AREA|MESSAGE-AREA-FONT|MIN-BUTTON|min-column-width-c|min-column-width-ch|min-column-width-cha|min-column-width-char|min-column-width-chars|min-column-width-p|min-column-width-pi|min-column-width-pix|min-column-width-pixe|min-column-width-pixel|min-column-width-pixels|min-height|min-height-c|min-height-ch|min-height-cha|min-height-char|min-height-chars|min-height-p|min-height-pi|min-height-pix|min-height-pixe|min-height-pixel|min-height-pixels|min-schema-marshal|min-schema-marshall|min-val|min-valu|min-value|min-width|min-width-c|min-width-ch|min-width-cha|min-width-char|min-width-chars|min-width-p|min-width-pi|min-width-pix|min-width-pixe|min-width-pixel|min-width-pixels|mod|modified|mouse|mouse-p|mouse-po|mouse-poi|mouse-poin|mouse-point|mouse-pointe|mouse-pointer|MOVABLE|move|move-after|move-after-|move-after-t|move-after-ta|move-after-tab|move-after-tab-|move-after-tab-i|move-after-tab-it|move-after-tab-ite|move-after-tab-item|move-befor|move-before|move-before-|move-before-t|move-before-ta|move-before-tab|move-before-tab-|move-before-tab-i|move-before-tab-it|move-before-tab-ite|move-before-tab-item|move-col|move-colu|move-colum|move-column|move-to-b|move-to-bo|move-to-bot|move-to-bott|move-to-botto|move-to-bottom|move-to-eof|move-to-t|move-to-to|move-to-top|MULTI-COMPILE|MULTIPLE|MULTITASKING-INTERVAL|MUST-UNDERSTAND)\\s*",
981
+ "captures": {
982
+ "1": {
983
+ "name": "punctuation.separator.colon.abl"
984
+ },
985
+ "2": {
986
+ "name": "entity.name.function.abl"
987
+ }
988
+ }
989
+ },
990
+ "handle-attributes-N": {
991
+ "match": "(?i)(:)(NAME|NAMESPACE-PREFIX|NAMESPACE-URI|NEEDS-APPSERVER-PROMPT|NEEDS-PROMPT|NESTED|NEW|NEW-ROW|next-col|next-colu|next-colum|next-column|NEXT-ROWID|NEXT-SIBLING|next-tab-ite|next-tab-item|NO-CURRENT-VALUE|NO-EMPTY-SPACE|NO-FOCUS|NONAMESPACE-SCHEMA-LOCATION|no-schema-marshal|no-schema-marshall|no-val|no-vali|no-valid|no-valida|no-validat|no-validate|NODE-VALUE|NODE-VALUE-TO-LONGCHAR|NODE-VALUE-TO-MEMPTR|NORMALIZE|NUM-BUFFERS|num-but|num-butt|num-butto|num-button|num-buttons|NUM-CHILD-RELATIONS|NUM-CHILDREN|num-col|num-colu|num-colum|num-column|num-columns|NUM-DROPPED-FILES|NUM-ENTRIES|NUM-FIELDS|NUM-FORMATS|NUM-HEADER-ENTRIES|NUM-ITEMS|NUM-ITERATIONS|NUM-LINES|num-locked-col|num-locked-colu|num-locked-colum|num-locked-column|num-locked-columns|NUM-LOG-FILES|NUM-MESSAGES|NUM-PARAMETERS|NUM-REFERENCES|NUM-RELATIONS|num-repl|num-repla|num-replac|num-replace|num-replaced|NUM-RESULTS|num-selected|num-selected-rows|NUM-SELECTED-WIDGETS|NUM-SOURCE-BUFFERS|NUM-TABS|NUM-TO-RETAIN|NUM-TOP-BUFFERS|num-visible-col|num-visible-colu|num-visible-colum|num-visible-column|num-visible-columns|numeric|numeric-dec|numeric-deci|numeric-decim|numeric-decima|numeric-decimal|numeric-decimal-|numeric-decimal-p|numeric-decimal-po|numeric-decimal-poi|numeric-decimal-poin|numeric-decimal-point|numeric-f|numeric-fo|numeric-for|numeric-form|numeric-forma|numeric-format|numeric-sep|numeric-sepa|numeric-separ|numeric-separa|numeric-separat|numeric-separato|numeric-separator)\\s*",
992
+ "captures": {
993
+ "1": {
994
+ "name": "punctuation.separator.colon.abl"
995
+ },
996
+ "2": {
997
+ "name": "entity.name.function.abl"
998
+ }
999
+ }
1000
+ },
1001
+ "handle-attributes-O": {
1002
+ "match": "(?i)(:)(on-frame|on-frame-|on-frame-b|on-frame-bo|on-frame-bor|on-frame-bord|on-frame-borde|on-frame-border|OPTIONS|ORDINAL|ORIGIN-HANDLE|ORIGIN-ROWID|OVERLAY|OWNER|OWNER-DOCUMENT)\\s*",
1003
+ "captures": {
1004
+ "1": {
1005
+ "name": "punctuation.separator.colon.abl"
1006
+ },
1007
+ "2": {
1008
+ "name": "entity.name.function.abl"
1009
+ }
1010
+ }
1011
+ },
1012
+ "handle-attributes-P": {
1013
+ "match": "(?i)(:)(page-bot|page-bott|page-botto|page-bottom|PAGE-TOP|PARAMETER|PARENT|PARENT-BUFFER|PARENT-FIELDS-AFTER|PARENT-FIELDS-BEFORE|PARENT-ID-RELATION|parent-rel|parent-rela|parent-relat|parent-relati|parent-relatio|parent-relation|PARSE-STATUS|PASSWORD-FIELD|PATHNAME|pbe-hash-alg|pbe-hash-algo|pbe-hash-algor|pbe-hash-algori|pbe-hash-algorit|pbe-hash-algorith|pbe-hash-algorithm|PBE-KEY-ROUNDS|PERSISTENT|PERSISTENT-CACHE-DISABLED|PERSISTENT-PROCEDURE|pfc|pfco|pfcol|pfcolo|pfcolor|pixels-per-col|pixels-per-colu|pixels-per-colum|pixels-per-column|PIXELS-PER-ROW|popup-m|popup-me|popup-men|popup-menu|popup-o|popup-on|popup-onl|popup-only|POSITION|PREFER-DATASET|PREPARED|PREPARE-STRING|prev-col|prev-colu|prev-colum|prev-column|PREV-SIBLING|prev-tab-i|prev-tab-it|prev-tab-ite|prev-tab-item|PRIMARY|PRIMARY-PASSPHRASE|PRINTER-CONTROL-HANDLE|PRINTER-HDC|PRINTER-NAME|PRINTER-PORT|private-d|private-da|private-dat|private-data|PROCEDURE-NAME|PROCEDURE-TYPE|PROFILING|progress-s|progress-so|progress-sou|progress-sour|progress-sourc|progress-source|PROXY|PROXY-PASSWORD|PROXY-USERID|PUBLIC-ID|PUBLISHED-EVENTS)\\s*",
1014
+ "captures": {
1015
+ "1": {
1016
+ "name": "punctuation.separator.colon.abl"
1017
+ },
1018
+ "2": {
1019
+ "name": "entity.name.function.abl"
1020
+ }
1021
+ }
1022
+ },
1023
+ "handle-attributes-Q": {
1024
+ "match": "(?i)(:)(QUALIFIED-USER-ID|QUERY|QUERY-CLOSE|QUERY-OFF-END|QUERY-OPEN|QUERY-PREPARE|QUIT)\\s*",
1025
+ "captures": {
1026
+ "1": {
1027
+ "name": "punctuation.separator.colon.abl"
1028
+ },
1029
+ "2": {
1030
+ "name": "entity.name.function.abl"
1031
+ }
1032
+ }
1033
+ },
1034
+ "handle-attributes-R": {
1035
+ "match": "(?i)(:)(RADIO-BUTTONS|READ-FILE|READ-JSON|READ-ONLY|READ-XML|READ-XMLSCHEMA|READ|RECID|record-len|record-leng|record-lengt|record-length|RECURSIVE|REFRESH|REFRESHABLE|REFRESH-AUDIT-POLICY|REGISTER-DOMAIN|REJECT-CHANGES|REJECT-ROW-CHANGES|REJECTED|relation-fi|relation-fie|relation-fiel|relation-field|relation-fields|RELATIONS-ACTIVE|REMOTE|REMOTE-HOST|REMOTE-PORT|REMOVE-ATTRIBUTE|REMOVE-CHILD|remove-events-proc|remove-events-proce|remove-events-proced|remove-events-procedu|remove-events-procedur|remove-events-procedure|remove-super-proc|remove-super-proce|remove-super-proced|remove-super-procedu|remove-super-procedur|remove-super-procedure|REPLACE|REPLACE-CHILD|REPLACE-SELECTION-TEXT|REPOSITION|reposition-back|reposition-backw|reposition-backwa|reposition-backwar|reposition-backward|reposition-backwards|reposition-forw|reposition-forwa|reposition-forwar|reposition-forward|reposition-forwards|REPOSITION-TO-ROW|REPOSITION-TO-ROWID|REQUEST-INFO|RESET|resiza|resizab|resizabl|resizable|RESIZE|RESPONSE-INFO|RESTART-ROW|RESTART-ROWID|retain-s|retain-sh|retain-sha|retain-shap|retain-shape|return-ins|return-inse|return-inser|return-insert|return-inserte|return-inserted|RETURN-VALUE|RETURN-VALUE-DATA-TYPE|RETURN-VALUE-DLL-TYPE|ROLE|ROLES|ROUNDED|ROW|row-height|row-height-c|row-height-ch|row-height-cha|row-height-char|row-height-chars|row-height-p|row-height-pi|row-height-pix|row-height-pixe|row-height-pixel|row-height-pixels|ROW-STATE|ROWID|row-ma|row-mar|row-mark|row-marke|row-marker|row-markers|ROW-RESIZABLE)\\s*",
1036
+ "captures": {
1037
+ "1": {
1038
+ "name": "punctuation.separator.colon.abl"
1039
+ },
1040
+ "2": {
1041
+ "name": "entity.name.function.abl"
1042
+ }
1043
+ }
1044
+ },
1045
+ "handle-attributes-S": {
1046
+ "match": "(?i)(:)(SAVE|SAVE-FILE|SAVE-ROW-CHANGES|SAVE-WHERE-STRING|SAX-PARSE|SAX-PARSE-FIRST|SAX-PARSE-NEXT|sax-parser-error|SCHEMA-CHANGE|SCHEMA-LOCATION|SCHEMA-MARSHAL|SCHEMA-PATH|SCREEN-LINES|screen-val|screen-valu|screen-value|SCROLL-BARS|SCROLL-TO-CURRENT-ROW|scroll-to-i|scroll-to-it|scroll-to-ite|scroll-to-item|SCROLL-TO-SELECTED-ROW|SCROLLABLE|scrollbar-h|scrollbar-ho|scrollbar-hor|scrollbar-hori|scrollbar-horiz|scrollbar-horizo|scrollbar-horizon|scrollbar-horizont|scrollbar-horizonta|scrollbar-horizontal|scrollbar-v|scrollbar-ve|scrollbar-ver|scrollbar-vert|scrollbar-verti|scrollbar-vertic|scrollbar-vertica|scrollbar-verticalsss|SEAL-TIMESTAMP|SEARCH|SELECT-ALL|SELECT-FOCUSED-ROW|SELECT-NEXT-ROW|SELECT-PREV-ROW|SELECT-ROW|SELECTABLE|SELECTED|SELECTION-END|SELECTION-START|SELECTION-TEXT|SENSITIVE|SEPARATORS|SEPARATOR-FGCOLOR|SERIALIZE-HIDDEN|SERIALIZE-NAME|SERIALIZE-ROW|SERVER|server-connection-bo|server-connection-bou|server-connection-boun|server-connection-bound|server-connection-bound-re|server-connection-bound-req|server-connection-bound-requ|server-connection-bound-reque|server-connection-bound-reques|server-connection-bound-request|server-connection-co|server-connection-con|server-connection-cont|server-connection-conte|server-connection-contex|server-connection-context|server-connection-id|server-operating-mode|SESSION-END|SESSION-ID|SET-ACTOR|SET-APPL-CONTEXT|SET-ATTRIBUTE|SET-ATTRIBUTE-NODE|set-blue|set-blue-|set-blue-v|set-blue-va|set-blue-val|set-blue-valu|set-blue-value|SET-BREAK|SET-BUFFERS|SET-CALLBACK|SET-CALLBACK-PROCEDURE|SET-CLIENT|SET-COMMIT|SET-CONNECT-PROCEDURE|SET-DYNAMIC|set-green|set-green-|set-green-v|set-green-va|set-green-val|set-green-valu|set-green-value|SET-INPUT-SOURCE|SET-MUST-UNDERSTAND|SET-NODE|set-numeric-form|set-numeric-forma|set-numeric-format|SET-OUTPUT-DESTINATION|SET-PARAMETER|SET-READ-RESPONSE-PROCEDURE|set-red|set-red-|set-red-v|set-red-va|set-red-val|set-red-valu|set-red-value|SET-REPOSITIONED-ROW|SET-RGB-VALUE|SET-ROLE|SET-ROLLBACK|SET-SAFE-USER|SET-SELECTION|SET-SERIALIZED|SET-SOCKET-OPTION|SET-SORT-ARROW|set-wait|set-wait-|set-wait-s|set-wait-st|set-wait-sta|set-wait-stat|set-wait-state|show-in-task|show-in-taskb|show-in-taskba|show-in-taskbar|side-label-han|side-label-hand|side-label-handl|side-label-handle|SIDE-LABELS|signature|signature-value|SINGLE-RUN|SINGLETON|skip-deleted-rec|skip-deleted-reco|skip-deleted-recor|skip-deleted-record|SMALL-ICON|SMALL-TITLE|soap-fault-actor|soap-fault-code|soap-fault-detail|soap-fault-misunderstood-header|soap-fault-node|soap-fault-role|soap-fault-string|soap-fault-subcode|SOAP-VERSION|SORT|SORT-ASCENDING|SORT-NUMBER|SSL-SERVER-NAME|STANDALONE|START-DOCUMENT|START-ELEMENT|STARTUP-PARAMETERS|STATE-DETAIL|STATISTICS|STATUS-AREA|STATUS-AREA-FONT|STOP|STOP-OBJECT|STOP-PARSING|stoppe|stopped|STREAM|STRETCH-TO-FIT|STRICT|STRICT-ENTITY-RESOLUTION|STRING-VALUE|SUBTYPE|super-proc|super-proce|super-proced|super-procedu|super-procedur|super-procedure|super-procedures|SUPPRESS-NAMESPACE-PROCESSING|suppress-w|suppress-wa|suppress-war|suppress-warn|suppress-warni|suppress-warnin|suppress-warning|suppress-warnings|suppress-warnings-list|SYMMETRIC-ENCRYPTION-AAD|SYMMETRIC-ENCRYPTION-ALGORITHM|SYMMETRIC-ENCRYPTION-IV|SYMMETRIC-ENCRYPTION-KEY|SYMMETRIC-SUPPORT|SYNCHRONIZE|system-alert|system-alert-|system-alert-b|system-alert-bo|system-alert-box|system-alert-boxe|system-alert-boxes|SYSTEM-ID)\\s*",
1047
+ "captures": {
1048
+ "1": {
1049
+ "name": "punctuation.separator.colon.abl"
1050
+ },
1051
+ "2": {
1052
+ "name": "entity.name.function.abl"
1053
+ }
1054
+ }
1055
+ },
1056
+ "handle-attributes-T": {
1057
+ "match": "(?i)(:)(TAB-POSITION|TAB-STOP|TABLE|TABLE-CRC-LIST|TABLE-HANDLE|TABLE-LIST|table-num|table-numb|table-numbe|table-number|temp-dir|temp-dire|temp-direc|temp-direct|temp-directo|temp-director|temp-directory|temp-table-prepar|temp-table-prepare|TENANT-ID|TENANT-NAME|TEXT-SELECTED|THREAD-SAFE|THREE-D|TIC-MARKS|TIME-SOURCE|TIMEZONE|TITLE|title-bgc|title-bgco|title-bgcol|title-bgcolo|title-bgcolor|title-dc|title-dco|title-dcol|title-dcolo|title-dcolor|title-fgc|title-fgco|title-fgcol|title-fgcolo|title-fgcolor|title-fo|title-fon|title-font|TOGGLE-BOX|TOOLTIP|TOOLTIPS|TOP-NAV-QUERY|TOP-ONLY|TRACE-FILTER|TRACING|TRACKING-CHANGES|TRANSACTION|TRANSPARENT|trans-init-proc|trans-init-proce|trans-init-proced|trans-init-procedu|trans-init-procedur|trans-init-procedure|TYPE)\\s*",
1058
+ "captures": {
1059
+ "1": {
1060
+ "name": "punctuation.separator.colon.abl"
1061
+ },
1062
+ "2": {
1063
+ "name": "entity.name.function.abl"
1064
+ }
1065
+ }
1066
+ },
1067
+ "handle-attributes-U": {
1068
+ "match": "(?i)(:)(UNDO|UNDO-THROW-SCOPE|UNIQUE-ID|UNIQUE-MATCH|UPDATE-ATTRIBUTE|URL|URL-DECODE|URL-ENCODE|URL-PASSWORD|URL-USERID|USER-DATA |USER-ID)\\s*",
1069
+ "captures": {
1070
+ "1": {
1071
+ "name": "punctuation.separator.colon.abl"
1072
+ },
1073
+ "2": {
1074
+ "name": "entity.name.function.abl"
1075
+ }
1076
+ }
1077
+ },
1078
+ "handle-attributes-V": {
1079
+ "match": "(?i)(:)(V6DISPLAY|VALIDATE|VALIDATE-DOMAIN-ACCESS-CODE|validate-expressio|validate-expression|VALIDATE-MESSAGE|VALIDATE-SEAL|VALIDATE-XML|VALIDATION-ENABLED|VALUE|VERSION|VIEW-AS|VIEW-FIRST-COLUMN-ON-REOPEN|virtual-height|virtual-height-c|virtual-height-ch|virtual-height-cha|virtual-height-char|virtual-height-chars|virtual-height-p|virtual-height-pi|virtual-height-pix|virtual-height-pixe|virtual-height-pixel|virtual-height-pixels|virtual-width|virtual-width-c|virtual-width-ch|virtual-width-cha|virtual-width-char|virtual-width-chars|virtual-width-p|virtual-width-pi|virtual-width-pix|virtual-width-pixe|virtual-width-pixel|virtual-width-pixels|VISIBLE)\\s*",
1080
+ "captures": {
1081
+ "1": {
1082
+ "name": "punctuation.separator.colon.abl"
1083
+ },
1084
+ "2": {
1085
+ "name": "entity.name.function.abl"
1086
+ }
1087
+ }
1088
+ },
1089
+ "handle-attributes-W": {
1090
+ "match": "(?i)(:)(WARNING|WC-ADMIN-APP|WHERE-STRING|WIDGET-ENTER|WIDGET-ID|widget-l|widget-le|widget-lea|widget-leav|widget-leave|width|width-c|width-ch|width-cha|width-char|width-chars|width-p|width-pi|width-pix|width-pixe|width-pixel|width-pixels|WINDOW|window-sta|window-stat|window-state|window-sys|window-syst|window-syste|window-system|WORD-WRAP|work-area-height-p|work-area-height-pi|work-area-height-pix|work-area-height-pixe|work-area-height-pixel|work-area-height-pixels|work-area-width-p|work-area-width-pi|work-area-width-pix|work-area-width-pixe|work-area-width-pixel|work-area-width-pixels|work-area-x|work-area-y|WRITE-CDATA|WRITE-CHARACTERS|WRITE-COMMENT|WRITE-DATA|WRITE-DATA-ELEMENT|WRITE-EMPTY-ELEMENT|WRITE-ENTITY-REF|WRITE-EXTERNAL-DTD|WRITE-FRAGMENT|WRITE-JSON|WRITE-MESSAGE|WRITE-PROCESSING-INSTRUCTION|WRITE-STATUS|WRITE-XML|WRITE-XMLSCHEMA|WRITE)\\s*",
1091
+ "captures": {
1092
+ "1": {
1093
+ "name": "punctuation.separator.colon.abl"
1094
+ },
1095
+ "2": {
1096
+ "name": "entity.name.function.abl"
1097
+ }
1098
+ }
1099
+ },
1100
+ "handle-attributes-X": {
1101
+ "match": "(?i)(:)(X|X-DOCUMENT|XCODE-SESSION-KEY|XML-DATA-TYPE|XML-ENTITY-EXPANSION-LIMIT|XML-NODE-NAME|XML-NODE-TYPE|XML-SCHEMA-PATH|XML-STRICT-ENTITY-RESOLUTION|XML-SUPPRESS-NAMESPACE-PROCESSING)\\s*",
1102
+ "captures": {
1103
+ "1": {
1104
+ "name": "punctuation.separator.colon.abl"
1105
+ },
1106
+ "2": {
1107
+ "name": "entity.name.function.abl"
1108
+ }
1109
+ }
1110
+ },
1111
+ "handle-attributes-Y": {
1112
+ "match": "(?i)(:)(Y|YEAR-OFFSET)\\s*",
1113
+ "captures": {
1114
+ "1": {
1115
+ "name": "punctuation.separator.colon.abl"
1116
+ },
1117
+ "2": {
1118
+ "name": "entity.name.function.abl"
1119
+ }
1120
+ }
1121
+ },
1122
+ "abl-functions": {
1123
+ "patterns": [
1124
+ {
1125
+ "include": "#abl-functions-A"
1126
+ },
1127
+ {
1128
+ "include": "#abl-functions-B"
1129
+ },
1130
+ {
1131
+ "include": "#abl-functions-C"
1132
+ },
1133
+ {
1134
+ "include": "#abl-functions-D"
1135
+ },
1136
+ {
1137
+ "include": "#abl-functions-E"
1138
+ },
1139
+ {
1140
+ "include": "#abl-functions-F"
1141
+ },
1142
+ {
1143
+ "include": "#abl-functions-G"
1144
+ },
1145
+ {
1146
+ "include": "#abl-functions-H"
1147
+ },
1148
+ {
1149
+ "include": "#abl-functions-I"
1150
+ },
1151
+ {
1152
+ "include": "#abl-functions-K"
1153
+ },
1154
+ {
1155
+ "include": "#abl-functions-L"
1156
+ },
1157
+ {
1158
+ "include": "#abl-functions-M"
1159
+ },
1160
+ {
1161
+ "include": "#abl-functions-N"
1162
+ },
1163
+ {
1164
+ "include": "#abl-functions-O"
1165
+ },
1166
+ {
1167
+ "include": "#abl-functions-P"
1168
+ },
1169
+ {
1170
+ "include": "#abl-functions-Q"
1171
+ },
1172
+ {
1173
+ "include": "#abl-functions-R"
1174
+ },
1175
+ {
1176
+ "include": "#abl-functions-S"
1177
+ },
1178
+ {
1179
+ "include": "#abl-functions-T"
1180
+ },
1181
+ {
1182
+ "include": "#abl-functions-U"
1183
+ },
1184
+ {
1185
+ "include": "#abl-functions-V"
1186
+ },
1187
+ {
1188
+ "include": "#abl-functions-W"
1189
+ },
1190
+ {
1191
+ "include": "#abl-functions-Y"
1192
+ }
1193
+ ]
1194
+ },
1195
+ "abl-functions-A": {
1196
+ "name": "meta.function-call.abl",
1197
+ "begin": "(?i)\\s*(ABSOLUTE|ACCUM|ADD-INTERVAL|ALIAS|AMBIGUOUS|ASC|AUDIT-ENABLED|AVAILABLE)\\s*(?=\\()",
1198
+ "beginCaptures": {
1199
+ "1": {
1200
+ "name": "support.function.abl"
1201
+ }
1202
+ },
1203
+ "end": "(\\))",
1204
+ "endCaptures": {
1205
+ "1": {
1206
+ "name": "meta.brace.round.js"
1207
+ }
1208
+ },
1209
+ "patterns": [
1210
+ {
1211
+ "include": "#function-arguments"
1212
+ }
1213
+ ]
1214
+ },
1215
+ "abl-functions-B": {
1216
+ "name": "meta.function-call.abl",
1217
+ "begin": "(?i)\\s*(BASE64-DECODE|BASE64-ENCODE|BOX|BUFFER-GROUP-ID|BUFFER-GROUP-NAME|BUFFER-PARTITION-ID|BUFFER-TENANT-ID|BUFFER-TENANT-NAME)\\s*(?=\\()",
1218
+ "beginCaptures": {
1219
+ "1": {
1220
+ "name": "support.function.abl"
1221
+ }
1222
+ },
1223
+ "end": "(\\))",
1224
+ "endCaptures": {
1225
+ "1": {
1226
+ "name": "meta.brace.round.js"
1227
+ }
1228
+ },
1229
+ "patterns": [
1230
+ {
1231
+ "include": "#function-arguments"
1232
+ }
1233
+ ]
1234
+ },
1235
+ "abl-functions-C": {
1236
+ "name": "meta.function-call.abl",
1237
+ "begin": "(?i)\\s*(CAN-DO|CAN-FIND|CAN-QUERY|CAN-SET|CAPS|CAST|CHR|CODEPAGE-CONVERT|COMPARE|CONNECTED|COUNT-OF|CURRENT-CHANGED|CURRENT-LANGUAGE|CURRENT-RESULT-ROW|CURRENT-VALUE)\\s*(?=\\()",
1238
+ "beginCaptures": {
1239
+ "1": {
1240
+ "name": "support.function.abl"
1241
+ }
1242
+ },
1243
+ "end": "(\\))",
1244
+ "endCaptures": {
1245
+ "1": {
1246
+ "name": "meta.brace.round.js"
1247
+ }
1248
+ },
1249
+ "patterns": [
1250
+ {
1251
+ "include": "#function-arguments"
1252
+ }
1253
+ ]
1254
+ },
1255
+ "abl-functions-D": {
1256
+ "name": "meta.function-call.abl",
1257
+ "begin": "(?i)\\s*(DATASERVERS|DATA-SOURCE-MODIFIED|DATE|DATETIME|DATETIME-TZ|DAY|DBCODEPAGE|DBCOLLATION|DBNAME|DBPARAM|DB-REMOTE-HOST|DBRESTRICTIONS|DBTASKID|DBTYPE|DBVERSION|DECIMAL|DECRYPT|DEFINED|DYNAMIC-CAST|DYNAMIC-CURRENT-VALUE|DYNAMIC-ENUM|DYNAMIC-FUNCTION|DYNAMIC-INVOKE|DYNAMIC-NEXT-VALUE|DYNAMIC-PROPERTY)\\s*(?=\\()",
1258
+ "beginCaptures": {
1259
+ "1": {
1260
+ "name": "support.function.abl"
1261
+ }
1262
+ },
1263
+ "end": "(\\))",
1264
+ "endCaptures": {
1265
+ "1": {
1266
+ "name": "meta.brace.round.js"
1267
+ }
1268
+ },
1269
+ "patterns": [
1270
+ {
1271
+ "include": "#function-arguments"
1272
+ }
1273
+ ]
1274
+ },
1275
+ "abl-functions-E": {
1276
+ "name": "meta.function-call.abl",
1277
+ "begin": "(?i)\\s*(ENCODE|ENCRYPT|ENTERED|ENTRY|ERROR|ETIME|EXP|EXTENT)\\s*(?=\\()",
1278
+ "beginCaptures": {
1279
+ "1": {
1280
+ "name": "support.function.abl"
1281
+ }
1282
+ },
1283
+ "end": "(\\))",
1284
+ "endCaptures": {
1285
+ "1": {
1286
+ "name": "meta.brace.round.js"
1287
+ }
1288
+ },
1289
+ "patterns": [
1290
+ {
1291
+ "include": "#function-arguments"
1292
+ }
1293
+ ]
1294
+ },
1295
+ "abl-functions-F": {
1296
+ "name": "meta.function-call.abl",
1297
+ "begin": "(?i)\\s*(FILL|FIRST|FIRST-OF|FRAME-COL|FRAME-DB|FRAME-DOWN|FRAME-FIELD|FRAME-FILE|FRAME-INDEX|FRAME-LINE|FRAME-NAME|FRAME-ROW|FRAME-VALUE)\\s*(?=\\()",
1298
+ "beginCaptures": {
1299
+ "1": {
1300
+ "name": "support.function.abl"
1301
+ }
1302
+ },
1303
+ "end": "(\\))",
1304
+ "endCaptures": {
1305
+ "1": {
1306
+ "name": "meta.brace.round.js"
1307
+ }
1308
+ },
1309
+ "patterns": [
1310
+ {
1311
+ "include": "#function-arguments"
1312
+ }
1313
+ ]
1314
+ },
1315
+ "abl-functions-G": {
1316
+ "name": "meta.function-call.abl",
1317
+ "begin": "(?i)\\s*(GATEWAYS|GENERATE-PBE-KEY|GENERATE-PBE-SALT|GENERATE-RANDOM-KEY|GENERATE-UUID|GET-BITS|GET-BYTE|GET-BYTE-ORDER|GET-BYTES|GET-CLASS|GET-CODEPAGE|GET-CODEPAGES|GET-COLLATION|GET-COLLATIONS|GET-DB-CLIENT|GET-DOUBLE|GET-EFFECTIVE-TENANT-ID|GET-EFFECTIVE-TENANT-NAME|GET-FLOAT|GET-INT64|GET-LONG|GET-POINTER-VALUE|GET-SHORT|GET-SIZE|GET-STRING|GET-UNSIGNED-LONG|GET-UNSIGNED-SHORT|GO-PENDING|GUID)\\s*(?=\\()",
1318
+ "beginCaptures": {
1319
+ "1": {
1320
+ "name": "support.function.abl"
1321
+ }
1322
+ },
1323
+ "end": "(\\))",
1324
+ "endCaptures": {
1325
+ "1": {
1326
+ "name": "meta.brace.round.js"
1327
+ }
1328
+ },
1329
+ "patterns": [
1330
+ {
1331
+ "include": "#function-arguments"
1332
+ }
1333
+ ]
1334
+ },
1335
+ "abl-functions-H": {
1336
+ "name": "meta.function-call.abl",
1337
+ "begin": "(?i)\\s*(HANDLE|HASH-CODE|HEX-DECODE|HEX-ENCODE)\\s*(?=\\()",
1338
+ "beginCaptures": {
1339
+ "1": {
1340
+ "name": "support.function.abl"
1341
+ }
1342
+ },
1343
+ "end": "(\\))",
1344
+ "endCaptures": {
1345
+ "1": {
1346
+ "name": "meta.brace.round.js"
1347
+ }
1348
+ },
1349
+ "patterns": [
1350
+ {
1351
+ "include": "#function-arguments"
1352
+ }
1353
+ ]
1354
+ },
1355
+ "abl-functions-I": {
1356
+ "name": "meta.function-call.abl",
1357
+ "begin": "(?i)\\s*(INDEX|INPUT|INT64|INTEGER|INTERVAL|IS-ATTR-SPACE|IS-CODEPAGE-FIXED|IS-COLUMN-CODEPAGE|IS-DB-MULTI-TENANT|IS-LEAD-BYTE|ISO-DATE)\\s*(?=\\()",
1358
+ "beginCaptures": {
1359
+ "1": {
1360
+ "name": "support.function.abl"
1361
+ }
1362
+ },
1363
+ "end": "(\\))",
1364
+ "endCaptures": {
1365
+ "1": {
1366
+ "name": "meta.brace.round.js"
1367
+ }
1368
+ },
1369
+ "patterns": [
1370
+ {
1371
+ "include": "#function-arguments"
1372
+ }
1373
+ ]
1374
+ },
1375
+ "abl-functions-K": {
1376
+ "name": "meta.function-call.abl",
1377
+ "begin": "(?i)\\s*(KBLABEL|KEYCODE|KEYFUNCTION|KEYLABEL|KEYWORD|KEYWORD-ALL)\\s*(?=\\()",
1378
+ "beginCaptures": {
1379
+ "1": {
1380
+ "name": "support.function.abl"
1381
+ }
1382
+ },
1383
+ "end": "(\\))",
1384
+ "endCaptures": {
1385
+ "1": {
1386
+ "name": "meta.brace.round.js"
1387
+ }
1388
+ },
1389
+ "patterns": [
1390
+ {
1391
+ "include": "#function-arguments"
1392
+ }
1393
+ ]
1394
+ },
1395
+ "abl-functions-L": {
1396
+ "name": "meta.function-call.abl",
1397
+ "begin": "(?i)\\s*(LAST|LASTKEY|LAST-OF|LC|LDBNAME|LEFT-TRIM|LENGTH|LIBRARY|LINE-COUNTER|LIST-EVENTS|LIST-QUERY-ATTRS|LIST-SET-ATTRS|LIST-WIDGETS|LOCKED|LOG|LOGICAL|Logical values|LOOKUP)\\s*(?=\\()",
1398
+ "beginCaptures": {
1399
+ "1": {
1400
+ "name": "support.function.abl"
1401
+ }
1402
+ },
1403
+ "end": "(\\))",
1404
+ "endCaptures": {
1405
+ "1": {
1406
+ "name": "meta.brace.round.js"
1407
+ }
1408
+ },
1409
+ "patterns": [
1410
+ {
1411
+ "include": "#function-arguments"
1412
+ }
1413
+ ]
1414
+ },
1415
+ "abl-functions-M": {
1416
+ "name": "meta.function-call.abl",
1417
+ "begin": "(?i)\\s*(MAXIMUM|MD5-DIGEST|MEMBER|MESSAGE-DIGEST|MESSAGE-LINES|MINIMUM|MONTH|MTIME)\\s*(?=\\()",
1418
+ "beginCaptures": {
1419
+ "1": {
1420
+ "name": "support.function.abl"
1421
+ }
1422
+ },
1423
+ "end": "(\\))",
1424
+ "endCaptures": {
1425
+ "1": {
1426
+ "name": "meta.brace.round.js"
1427
+ }
1428
+ },
1429
+ "patterns": [
1430
+ {
1431
+ "include": "#function-arguments"
1432
+ }
1433
+ ]
1434
+ },
1435
+ "abl-functions-N": {
1436
+ "name": "meta.function-call.abl",
1437
+ "begin": "(?i)\\s*(NEXT-VALUE|NORMALIZE|NOT ENTERED|NOW|NUM-ALIASES|NUM-DBS|NUM-ENTRIES|NUM-RESULTS)\\s*(?=\\()",
1438
+ "beginCaptures": {
1439
+ "1": {
1440
+ "name": "support.function.abl"
1441
+ }
1442
+ },
1443
+ "end": "(\\))",
1444
+ "endCaptures": {
1445
+ "1": {
1446
+ "name": "meta.brace.round.js"
1447
+ }
1448
+ },
1449
+ "patterns": [
1450
+ {
1451
+ "include": "#function-arguments"
1452
+ }
1453
+ ]
1454
+ },
1455
+ "abl-functions-O": {
1456
+ "name": "meta.function-call.abl",
1457
+ "begin": "(?i)\\s*(OPSYS|OS-DRIVES|OS-ERROR|OS-GETENV)\\s*(?=\\()",
1458
+ "beginCaptures": {
1459
+ "1": {
1460
+ "name": "support.function.abl"
1461
+ }
1462
+ },
1463
+ "end": "(\\))",
1464
+ "endCaptures": {
1465
+ "1": {
1466
+ "name": "meta.brace.round.js"
1467
+ }
1468
+ },
1469
+ "patterns": [
1470
+ {
1471
+ "include": "#function-arguments"
1472
+ }
1473
+ ]
1474
+ },
1475
+ "abl-functions-P": {
1476
+ "name": "meta.function-call.abl",
1477
+ "begin": "(?i)\\s*(PAGE-NUMBER|PAGE-SIZE|PDBNAME|proc-ha|proc-han|proc-hand|proc-handl|proc-handle|PROGRAM-NAME|PROGRESS|PROMSGS|PROPATH|provers|proversi|proversio|proversion)\\s*(?=\\()",
1478
+ "beginCaptures": {
1479
+ "1": {
1480
+ "name": "support.function.abl"
1481
+ }
1482
+ },
1483
+ "end": "(\\))",
1484
+ "endCaptures": {
1485
+ "1": {
1486
+ "name": "meta.brace.round.js"
1487
+ }
1488
+ },
1489
+ "patterns": [
1490
+ {
1491
+ "include": "#function-arguments"
1492
+ }
1493
+ ]
1494
+ },
1495
+ "abl-functions-Q": {
1496
+ "name": "meta.function-call.abl",
1497
+ "begin": "(?i)\\s*(QUERY-OFF-END|QUOTER)\\s*(?=\\()",
1498
+ "beginCaptures": {
1499
+ "1": {
1500
+ "name": "support.function.abl"
1501
+ }
1502
+ },
1503
+ "end": "(\\))",
1504
+ "endCaptures": {
1505
+ "1": {
1506
+ "name": "meta.brace.round.js"
1507
+ }
1508
+ },
1509
+ "patterns": [
1510
+ {
1511
+ "include": "#function-arguments"
1512
+ }
1513
+ ]
1514
+ },
1515
+ "abl-functions-R": {
1516
+ "name": "meta.function-call.abl",
1517
+ "begin": "(?i)\\s*(R-INDEX|RANDOM|RAW|RAW-TRANSFER|RECID|RECORD-LENGTH|REJECTED|REPLACE|RETRY|RETURN-VALUE|rgb-v|rgb-va|rgb-val|rgb-valu|rgb-value|RIGHT-TRIM|ROUND|ROW-STATE|ROWID)\\s*(?=\\()",
1518
+ "beginCaptures": {
1519
+ "1": {
1520
+ "name": "support.function.abl"
1521
+ }
1522
+ },
1523
+ "end": "(\\))",
1524
+ "endCaptures": {
1525
+ "1": {
1526
+ "name": "meta.brace.round.js"
1527
+ }
1528
+ },
1529
+ "patterns": [
1530
+ {
1531
+ "include": "#function-arguments"
1532
+ }
1533
+ ]
1534
+ },
1535
+ "abl-functions-S": {
1536
+ "name": "meta.function-call.abl",
1537
+ "begin": "(?i)\\s*(SCREEN-LINES|SDBNAME|SEAL|SEARCH|SEEK|SET-DB-CLIENT|SET-EFFECTIVE-TENANT|set-attribute|set-attribute-node|set-rgb|set-byte-order|set-rgb-|set-rgb-v|set-rgb-va|set-rgb-val|set-rgb-valu|set-rgb-value|setuser|setuseri|setuserid|SHA1-DIGEST|SQRT|SSL-SERVER-NAME|string|subst|substi|substit|substitu|substitut|substitute|substr|substri|substrin|substring|SUPER)\\s*(?=\\()",
1538
+ "beginCaptures": {
1539
+ "1": {
1540
+ "name": "support.function.abl"
1541
+ }
1542
+ },
1543
+ "end": "(\\))",
1544
+ "endCaptures": {
1545
+ "1": {
1546
+ "name": "meta.brace.round.js"
1547
+ }
1548
+ },
1549
+ "patterns": [
1550
+ {
1551
+ "include": "#function-arguments"
1552
+ }
1553
+ ]
1554
+ },
1555
+ "abl-functions-T": {
1556
+ "name": "meta.function-call.abl",
1557
+ "begin": "(?i)\\s*(TENANT-ID|TENANT-NAME|TENANT-NAME-TO-ID|TERMINAL|THIS-OBJECT|TIME|TIMEZONE|TODAY|TO-ROWID|TRANSACTION|TRIM|TRUNCATE|TYPE-OF)\\s*(?=\\()",
1558
+ "beginCaptures": {
1559
+ "1": {
1560
+ "name": "support.function.abl"
1561
+ }
1562
+ },
1563
+ "end": "(\\))",
1564
+ "endCaptures": {
1565
+ "1": {
1566
+ "name": "meta.brace.round.js"
1567
+ }
1568
+ },
1569
+ "patterns": [
1570
+ {
1571
+ "include": "#function-arguments"
1572
+ }
1573
+ ]
1574
+ },
1575
+ "abl-functions-U": {
1576
+ "name": "meta.function-call.abl",
1577
+ "begin": "(?i)\\s*(UNBOX|USERID)\\s*(?=\\()",
1578
+ "beginCaptures": {
1579
+ "1": {
1580
+ "name": "support.function.abl"
1581
+ }
1582
+ },
1583
+ "end": "(\\))",
1584
+ "endCaptures": {
1585
+ "1": {
1586
+ "name": "meta.brace.round.js"
1587
+ }
1588
+ },
1589
+ "patterns": [
1590
+ {
1591
+ "include": "#function-arguments"
1592
+ }
1593
+ ]
1594
+ },
1595
+ "abl-functions-V": {
1596
+ "name": "meta.function-call.abl",
1597
+ "begin": "(?i)\\s*(VALID-EVENT|VALID-HANDLE|VALID-OBJECT|VALUE)\\s*(?=\\()",
1598
+ "beginCaptures": {
1599
+ "1": {
1600
+ "name": "support.function.abl"
1601
+ }
1602
+ },
1603
+ "end": "(\\))",
1604
+ "endCaptures": {
1605
+ "1": {
1606
+ "name": "meta.brace.round.js"
1607
+ }
1608
+ },
1609
+ "patterns": [
1610
+ {
1611
+ "include": "#function-arguments"
1612
+ }
1613
+ ]
1614
+ },
1615
+ "abl-functions-W": {
1616
+ "name": "meta.function-call.abl",
1617
+ "begin": "(?i)\\s*(WEEKDAY|WIDGET-HANDLE)\\s*(?=\\()",
1618
+ "beginCaptures": {
1619
+ "1": {
1620
+ "name": "support.function.abl"
1621
+ }
1622
+ },
1623
+ "end": "(\\))",
1624
+ "endCaptures": {
1625
+ "1": {
1626
+ "name": "meta.brace.round.js"
1627
+ }
1628
+ },
1629
+ "patterns": [
1630
+ {
1631
+ "include": "#function-arguments"
1632
+ }
1633
+ ]
1634
+ },
1635
+ "abl-functions-Y": {
1636
+ "name": "meta.function-call.abl",
1637
+ "begin": "(?i)\\s*(YEAR)\\s*(?=\\()",
1638
+ "beginCaptures": {
1639
+ "1": {
1640
+ "name": "support.function.abl"
1641
+ }
1642
+ },
1643
+ "end": "(\\))",
1644
+ "endCaptures": {
1645
+ "1": {
1646
+ "name": "meta.brace.round.js"
1647
+ }
1648
+ },
1649
+ "patterns": [
1650
+ {
1651
+ "include": "#function-arguments"
1652
+ }
1653
+ ]
1654
+ },
1655
+ "define-interface": {
1656
+ "name": "meta.define.interface.abl",
1657
+ "begin": "(?i)\\b(interface)\\s+([\\w\\#\\$\\%]+[\\w\\#\\$\\%\\.]*(\\s*<\\s*[\\w\\#\\$\\%\\.]+\\s*\\>)?)",
1658
+ "beginCaptures": {
1659
+ "1": {
1660
+ "name": "keyword.other.abl"
1661
+ },
1662
+ "2": {
1663
+ "name": "entity.name.type.abl"
1664
+ }
1665
+ },
1666
+ "end": "\\s*(:)",
1667
+ "endCaptures": {
1668
+ "1": {
1669
+ "name": "punctuation.terminator.abl"
1670
+ }
1671
+ },
1672
+ "patterns": [
1673
+ {
1674
+ "match": "(?i)\\s*(inherits|implements)\\s*",
1675
+ "captures": {
1676
+ "1": {
1677
+ "name": "keyword.other.abl"
1678
+ }
1679
+ }
1680
+ },
1681
+ {
1682
+ "include": "#implements-type"
1683
+ },
1684
+ {
1685
+ "include": "#type-names"
1686
+ },
1687
+ {
1688
+ "include": "#type-name-comma"
1689
+ },
1690
+ {
1691
+ "include": "#punctuation-comma"
1692
+ }
1693
+ ]
1694
+ },
1695
+ "inherits-implements-type": {
1696
+ "name": "meta.define-type.implements.abl",
1697
+ "begin": "(?i)\\s*(implements|inherits)\\s*(([\\w\\#\\$\\%]+|progress)(\\.[\\w\\#\\$\\%]+)*(?<!\\.))\\s*",
1698
+ "end": "(?i)\\s*(serializable|abstract|final|use-widget-pool|inherits|implements+?)",
1699
+ "beginCaptures": {
1700
+ "1": {
1701
+ "name": "keyword.other.abl"
1702
+ },
1703
+ "2": {
1704
+ "name": "entity.name.type.abl"
1705
+ }
1706
+ },
1707
+ "endCaptures": {
1708
+ "1": {
1709
+ "name": "keyword.other.abl"
1710
+ }
1711
+ },
1712
+ "patterns": [
1713
+ {
1714
+ "include": "#type-name-comma"
1715
+ }
1716
+ ]
1717
+ },
1718
+ "define-enum": {
1719
+ "patterns": [
1720
+ {
1721
+ "name": "meta.define.enum.abl",
1722
+ "match": "(?i)\\b(enum)\\s+([\\w\\#\\$\\%\\.]+)\\s*(flags)?\\s*(:)",
1723
+ "captures": {
1724
+ "1": {
1725
+ "name": "keyword.other.abl"
1726
+ },
1727
+ "2": {
1728
+ "name": "entity.name.type.abl"
1729
+ },
1730
+ "3": {
1731
+ "name": "keyword.other.abl"
1732
+ },
1733
+ "4": {
1734
+ "name": "punctuation.terminator.abl"
1735
+ }
1736
+ }
1737
+ }
1738
+ ]
1739
+ },
1740
+ "attribute-access": {
1741
+ "begin": ":",
1742
+ "end": "(?=:)|(?=\\s*)",
1743
+ "comment": "",
1744
+ "patterns": []
1745
+ },
1746
+ "parens": {
1747
+ "match": "\\(|\\)",
1748
+ "name": "meta.brace.round.js"
1749
+ },
1750
+ "new-class": {
1751
+ "begin": "(?i)(new)\\s*",
1752
+ "beginCaptures": {
1753
+ "1": {
1754
+ "name": "keyword.other.abl"
1755
+ }
1756
+ },
1757
+ "end": "(?=\\()",
1758
+ "patterns": [
1759
+ {
1760
+ "include": "#type-name-generic-progress"
1761
+ },
1762
+ {
1763
+ "include": "#type-name-generic"
1764
+ },
1765
+ {
1766
+ "include": "#type-name-comma-progress"
1767
+ },
1768
+ {
1769
+ "include": "#type-name-progress"
1770
+ },
1771
+ {
1772
+ "include": "#type-name-comma"
1773
+ },
1774
+ {
1775
+ "include": "#type-name"
1776
+ },
1777
+ {
1778
+ "include": "#string"
1779
+ }
1780
+ ]
1781
+ },
1782
+ "get-class": {
1783
+ "name": "meta.function-call.abl",
1784
+ "begin": "(?i)\\s*(get-class)\\s*(\\()",
1785
+ "beginCaptures": {
1786
+ "1": {
1787
+ "name": "support.function.abl"
1788
+ },
1789
+ "2": {
1790
+ "name": "meta.brace.round.js"
1791
+ }
1792
+ },
1793
+ "end": "(\\))",
1794
+ "endCaptures": {
1795
+ "1": {
1796
+ "name": "meta.brace.round.js"
1797
+ }
1798
+ },
1799
+ "patterns": [
1800
+ {
1801
+ "include": "#string"
1802
+ },
1803
+ {
1804
+ "include": "#type-names"
1805
+ }
1806
+ ]
1807
+ },
1808
+ "find-record": {
1809
+ "match": "(?i)\\s*(find)\\s+(first|last|next|prev|current)?\\s*([\\w\\-#$%]+)\\s*",
1810
+ "captures": {
1811
+ "1": {
1812
+ "name": "keyword.other.abl"
1813
+ },
1814
+ "2": {
1815
+ "name": "keyword.other.abl"
1816
+ },
1817
+ "3": {
1818
+ "name": "storage.data.table.abl"
1819
+ }
1820
+ }
1821
+ },
1822
+ "field-name": {
1823
+ "comment": "Just a field name",
1824
+ "patterns": [
1825
+ {
1826
+ "match": "\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?\\s*(\\[\\d+\\]))\\s*",
1827
+ "captures": {
1828
+ "1": {
1829
+ "name": "storage.data.table.abl"
1830
+ }
1831
+ }
1832
+ },
1833
+ {
1834
+ "match": "\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*",
1835
+ "captures": {
1836
+ "1": {
1837
+ "name": "storage.data.table.abl"
1838
+ }
1839
+ }
1840
+ }
1841
+ ]
1842
+ },
1843
+ "db-dot-table-dot-field": {
1844
+ "match": "(?i)(?<=^|\\s|\\()(([\\w\\-#$%]+\\.)?([\\w\\-#$%]+\\.)([\\w\\-#$%]+)(\\[\\d+\\])?)",
1845
+ "comment": "Looks for format of 'table.field', with an optional preceding 'db.'. This pattern may conflict with type names",
1846
+ "captures": {
1847
+ "1": {
1848
+ "name": "storage.data.table.abl"
1849
+ }
1850
+ }
1851
+ },
1852
+ "db-dot-table": {
1853
+ "match": "(?i)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*",
1854
+ "comment": "Looks for format of 'table', with an optional preceding 'db.'. This pattern may conflict with type names",
1855
+ "captures": {
1856
+ "1": {
1857
+ "name": "storage.data.table.abl"
1858
+ }
1859
+ }
1860
+ },
1861
+ "break-group": {
1862
+ "match": "(?i)\\s*(first-of|first|last-of|last)\\s*(\\()\\s*([\\w\\-#$%]+\\.[\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*(\\))\\s*",
1863
+ "captures": {
1864
+ "1": {
1865
+ "name": "keyword.other.abl"
1866
+ },
1867
+ "2": {
1868
+ "name": "meta.brace.round.js"
1869
+ },
1870
+ "3": {
1871
+ "name": "storage.data.table.abl"
1872
+ },
1873
+ "4": {
1874
+ "name": "meta.brace.round.js"
1875
+ }
1876
+ }
1877
+ },
1878
+ "of-phrase": {
1879
+ "match": "(?i)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s+(of)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*",
1880
+ "captures": {
1881
+ "1": {
1882
+ "name": "storage.data.table.abl"
1883
+ },
1884
+ "3": {
1885
+ "name": "keyword.other.abl"
1886
+ },
1887
+ "4": {
1888
+ "name": "storage.data.table.abl"
1889
+ }
1890
+ }
1891
+ },
1892
+ "for-join": {
1893
+ "comment": "Captures something like ', salesrep where' or 'salesrep where', when the latter is at the beginning of a line. 'OF' phrases handled by of-phrase",
1894
+ "match": "(?i)(?<=,|^)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s+(?=where|no-lock|share-lock|exclusive-lock|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction)",
1895
+ "captures": {
1896
+ "1": {
1897
+ "name": "storage.data.table.abl"
1898
+ }
1899
+ }
1900
+ },
1901
+ "for-each-join": {
1902
+ "begin": "(?i)(?<=,)\\s*(each|first|last)\\s*",
1903
+ "beginCaptures": {
1904
+ "1": {
1905
+ "name": "keyword.other.abl"
1906
+ },
1907
+ "3": {
1908
+ "name": "storage.data.table.abl"
1909
+ }
1910
+ },
1911
+ "end": "(?i)\\s*(?=where|no-lock|share-lock|exclusive-lock|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:)\\s*",
1912
+ "patterns": [
1913
+ {
1914
+ "include": "#fields-except-list"
1915
+ },
1916
+ {
1917
+ "include": "#of-phrase"
1918
+ },
1919
+ {
1920
+ "comment": "Intended to catch joins like ', table of table2', since the first table name is matched by the begin",
1921
+ "match": "(?i)\\s*(of)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*",
1922
+ "captures": {
1923
+ "1": {
1924
+ "name": "keyword.other.abl"
1925
+ },
1926
+ "2": {
1927
+ "name": "storage.data.table.abl"
1928
+ }
1929
+ }
1930
+ },
1931
+ {
1932
+ "match": "\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*",
1933
+ "comment": "Matches the table name in the case of eg ',each table' ",
1934
+ "captures": {
1935
+ "1": {
1936
+ "name": "storage.data.table.abl"
1937
+ }
1938
+ }
1939
+ }
1940
+ ]
1941
+ },
1942
+ "for-each-table": {
1943
+ "begin": "(?i)(?<=\\s+|^)(for|preselect)[\\s+|$]",
1944
+ "beginCaptures": {
1945
+ "1": {
1946
+ "name": "keyword.other.abl"
1947
+ }
1948
+ },
1949
+ "end": "(?i)\\s*(?=where|no-lock|share-lock|exclusive-lock|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:|on)\\s*",
1950
+ "patterns": [
1951
+ {
1952
+ "match": "(?i)\\s*(each|first|last|of)\\s*",
1953
+ "captures": {
1954
+ "1": {
1955
+ "name": "keyword.other.abl"
1956
+ }
1957
+ }
1958
+ },
1959
+ {
1960
+ "include": "#fields-except-list"
1961
+ },
1962
+ {
1963
+ "include": "#of-phrase"
1964
+ },
1965
+ {
1966
+ "include": "#field-name"
1967
+ },
1968
+ {
1969
+ "include": "#db-dot-table"
1970
+ },
1971
+ {
1972
+ "include": "#db-dot-table-dot-field"
1973
+ }
1974
+ ]
1975
+ },
1976
+ "fields-except-list": {
1977
+ "begin": "(?i)\\s*(fields|except)\\s*(\\()",
1978
+ "beginCaptures": {
1979
+ "1": {
1980
+ "name": "keyword.other.abl"
1981
+ },
1982
+ "2": {
1983
+ "name": "meta.brace.round.js"
1984
+ }
1985
+ },
1986
+ "end": "(\\))",
1987
+ "endCaptures": {
1988
+ "1": {
1989
+ "name": "meta.brace.round.js"
1990
+ }
1991
+ },
1992
+ "patterns": [
1993
+ {
1994
+ "include": "#db-dot-table-dot-field"
1995
+ },
1996
+ {
1997
+ "include": "#field-name"
1998
+ }
1999
+ ]
2000
+ },
2001
+ "copy-lob": {
2002
+ "comment": "Has its own rule because of the 'FOR length' option, which is parsed as a 'FOR EACH' type statement",
2003
+ "begin": "(?i)\\b(copy-lob)\\b",
2004
+ "beginCaptures": {
2005
+ "1": {
2006
+ "name": "keyword.other.abl"
2007
+ }
2008
+ },
2009
+ "end": "(?=\\.)",
2010
+ "patterns": [
2011
+ {
2012
+ "include": "#code-block"
2013
+ }
2014
+ ]
2015
+ },
2016
+ "type-argument-function": {
2017
+ "name": "meta.function-call.abl",
2018
+ "begin": "(?i)\\s*(cast|type-of)\\s*(\\()",
2019
+ "beginCaptures": {
2020
+ "1": {
2021
+ "name": "support.function.abl"
2022
+ },
2023
+ "2": {
2024
+ "name": "meta.brace.round.js"
2025
+ }
2026
+ },
2027
+ "end": "(?<=\\))",
2028
+ "endCaptures": {
2029
+ "1": {
2030
+ "name": "meta.brace.round.js"
2031
+ }
2032
+ },
2033
+ "patterns": [
2034
+ {
2035
+ "comment": "This can only be table.field, never db.table.field, since only TT's can hold objects",
2036
+ "match": "\\s*(([\\w\\-#$%]+)\\.([\\w\\-#$%]+))\\s*(,)",
2037
+ "captures": {
2038
+ "1": {
2039
+ "name": "storage.data.table.abl"
2040
+ },
2041
+ "4": {
2042
+ "name": "punctuation.separator.comma.abl"
2043
+ }
2044
+ }
2045
+ },
2046
+ {
2047
+ "match": "\\s*([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&]*)\\s*((,)|(?=:))",
2048
+ "captures": {
2049
+ "1": {
2050
+ "name": "variable.other.abl"
2051
+ },
2052
+ "3": {
2053
+ "name": "punctuation.separator.comma.abl"
2054
+ }
2055
+ }
2056
+ },
2057
+ {
2058
+ "match": "\\s*:([\\w-]+)\\s*(,)",
2059
+ "captures": {
2060
+ "1": {
2061
+ "name": "entity.name.function.abl"
2062
+ },
2063
+ "2": {
2064
+ "name": "punctuation.separator.comma.abl"
2065
+ }
2066
+ }
2067
+ },
2068
+ {
2069
+ "include": "#type-argument-function"
2070
+ },
2071
+ {
2072
+ "include": "#expression"
2073
+ },
2074
+ {
2075
+ "include": "#property-call"
2076
+ },
2077
+ {
2078
+ "include": "#static-object-property-call"
2079
+ },
2080
+ {
2081
+ "include": "#doublequotedstring"
2082
+ },
2083
+ {
2084
+ "include": "#singlequotedstring"
2085
+ },
2086
+ {
2087
+ "include": "#translation-attribute"
2088
+ },
2089
+ {
2090
+ "include": "#type-name-generic-progress"
2091
+ },
2092
+ {
2093
+ "include": "#type-name-generic"
2094
+ },
2095
+ {
2096
+ "include": "#type-name-comma-progress"
2097
+ },
2098
+ {
2099
+ "include": "#type-name-progress"
2100
+ },
2101
+ {
2102
+ "include": "#type-name-comma"
2103
+ },
2104
+ {
2105
+ "include": "#type-name"
2106
+ },
2107
+ {
2108
+ "include": "#parens"
2109
+ },
2110
+ {
2111
+ "include": "#punctuation-comma"
2112
+ }
2113
+ ]
2114
+ },
2115
+ "code-block": {
2116
+ "patterns": [
2117
+ {
2118
+ "include": "#comment"
2119
+ },
2120
+ {
2121
+ "include": "#break-group"
2122
+ },
2123
+ {
2124
+ "include": "#operator"
2125
+ },
2126
+ {
2127
+ "include": "#string"
2128
+ },
2129
+ {
2130
+ "include": "#language-functions"
2131
+ },
2132
+ {
2133
+ "include": "#numeric"
2134
+ },
2135
+ {
2136
+ "include": "#constant"
2137
+ },
2138
+ {
2139
+ "include": "#operator"
2140
+ },
2141
+ {
2142
+ "include": "#include-file"
2143
+ },
2144
+ {
2145
+ "include": "#run-statement"
2146
+ },
2147
+ {
2148
+ "include": "#define"
2149
+ },
2150
+ {
2151
+ "include": "#block-statement"
2152
+ },
2153
+ {
2154
+ "include": "#end-block"
2155
+ },
2156
+ {
2157
+ "include": "#property-call"
2158
+ },
2159
+ {
2160
+ "include": "#type-reference"
2161
+ },
2162
+ {
2163
+ "include": "#abl-functions"
2164
+ },
2165
+ {
2166
+ "include": "#abl-system-handles"
2167
+ },
2168
+ {
2169
+ "include": "#keywords"
2170
+ },
2171
+ {
2172
+ "include": "#variable-name"
2173
+ },
2174
+ {
2175
+ "include": "#static-object-property-call"
2176
+ },
2177
+ {
2178
+ "include": "#punctuation-period"
2179
+ }
2180
+ ]
2181
+ },
2182
+ "property-accessor": {
2183
+ "patterns": [
2184
+ {
2185
+ "include": "#property-get-empty"
2186
+ },
2187
+ {
2188
+ "include": "#property-set-empty"
2189
+ },
2190
+ {
2191
+ "include": "#property-get-block"
2192
+ },
2193
+ {
2194
+ "include": "#property-set-block"
2195
+ }
2196
+ ]
2197
+ },
2198
+ "property-get-empty": {
2199
+ "name": "meta.define.getter.abl",
2200
+ "match": "\\s*(get)\\s*(super)?\\s*(?=\\.)",
2201
+ "captures": {
2202
+ "1": {
2203
+ "name": "keyword.other.abl"
2204
+ },
2205
+ "2": {
2206
+ "name": "keyword.other.abl"
2207
+ }
2208
+ }
2209
+ },
2210
+ "property-set-empty": {
2211
+ "name": "meta.define.setter.abl",
2212
+ "match": "\\s*(set)\\s*(super)?\\s*(?=\\.)",
2213
+ "captures": {
2214
+ "1": {
2215
+ "name": "keyword.other.abl"
2216
+ },
2217
+ "2": {
2218
+ "name": "keyword.other.abl"
2219
+ }
2220
+ }
2221
+ },
2222
+ "property-get-block": {
2223
+ "name": "meta.define.getter.abl",
2224
+ "begin": "(?i)\\s*(?<!\\:)\\s*(get)",
2225
+ "beginCaptures": {
2226
+ "1": {
2227
+ "name": "keyword.other.abl"
2228
+ }
2229
+ },
2230
+ "end": "(?i)\\s*(end)\\s*(get)?\\s*(?=\\.)\\s*",
2231
+ "comment": "The end capture does a lookahead on . so that the 'define' capture can end ",
2232
+ "endCaptures": {
2233
+ "1": {
2234
+ "name": "keyword.other.abl"
2235
+ },
2236
+ "2": {
2237
+ "name": "keyword.other.abl"
2238
+ }
2239
+ },
2240
+ "patterns": [
2241
+ {
2242
+ "include": "#function-parameter-definition"
2243
+ },
2244
+ {
2245
+ "include": "#code-block"
2246
+ },
2247
+ {
2248
+ "include": "#punctuation-colon"
2249
+ }
2250
+ ]
2251
+ },
2252
+ "property-set-block": {
2253
+ "name": "meta.define.setter.abl",
2254
+ "begin": "(?i)\\s*(?<!\\:)\\s*(set)",
2255
+ "beginCaptures": {
2256
+ "1": {
2257
+ "name": "keyword.other.abl"
2258
+ }
2259
+ },
2260
+ "end": "(?i)\\s*(end)\\s*(set)?\\s*(?=\\.)\\s*",
2261
+ "comment": "The end capture does a lookahead on . so that the 'define' capture can end ",
2262
+ "endCaptures": {
2263
+ "1": {
2264
+ "name": "keyword.other.abl"
2265
+ },
2266
+ "2": {
2267
+ "name": "keyword.other.abl"
2268
+ }
2269
+ },
2270
+ "patterns": [
2271
+ {
2272
+ "include": "#punctuation-colon"
2273
+ },
2274
+ {
2275
+ "include": "#function-parameter-definition"
2276
+ },
2277
+ {
2278
+ "include": "#code-block"
2279
+ }
2280
+ ]
2281
+ },
2282
+ "parameter-as": {
2283
+ "begin": "(?i)\\s*([\\w\\-]+)\\s+(as)\\s+",
2284
+ "beginCaptures": {
2285
+ "1": {
2286
+ "name": "variable.parameter.abl"
2287
+ },
2288
+ "2": {
2289
+ "name": "keyword.other.abl"
2290
+ }
2291
+ },
2292
+ "end": "(?=\\s|\\)|\\.)",
2293
+ "patterns": [
2294
+ {
2295
+ "match": "(?i)\\s*(class)\\s*",
2296
+ "captures": {
2297
+ "1": {
2298
+ "name": "keyword.other.abl"
2299
+ }
2300
+ }
2301
+ },
2302
+ {
2303
+ "include": "#primitive-type"
2304
+ },
2305
+ {
2306
+ "include": "#dll-type"
2307
+ },
2308
+ {
2309
+ "include": "#type-name-progress"
2310
+ },
2311
+ {
2312
+ "include": "#type-name-generic"
2313
+ },
2314
+ {
2315
+ "include": "#type-name"
2316
+ },
2317
+ {
2318
+ "include": "#parens"
2319
+ },
2320
+ {
2321
+ "include": "#string"
2322
+ },
2323
+ {
2324
+ "include": "#punctuation-period"
2325
+ },
2326
+ {
2327
+ "include": "#punctuation-comma"
2328
+ }
2329
+ ]
2330
+ },
2331
+ "define-variable-name": {
2332
+ "match": "(?i)(var|vari|varia|variab|variabl|variable)\\s+([a-z][a-z0-9#$-_%&])+\\s*",
2333
+ "captures": {
2334
+ "1": {
2335
+ "name": "keyword.other.abl"
2336
+ },
2337
+ "2": {
2338
+ "name": "variable.other.abl"
2339
+ }
2340
+ }
2341
+ },
2342
+ "variable-as": {
2343
+ "match": "(?i)\\s*([\\w\\-]+)\\s+(as)\\s*",
2344
+ "captures": {
2345
+ "1": {
2346
+ "name": "variable.other.abl"
2347
+ },
2348
+ "2": {
2349
+ "name": "keyword.other.abl"
2350
+ }
2351
+ }
2352
+ },
2353
+ "property-as": {
2354
+ "match": "(?i)\\s*([\\w\\-]+)\\s+(as)\\s*",
2355
+ "captures": {
2356
+ "1": {
2357
+ "name": "entity.name.function.abl"
2358
+ },
2359
+ "2": {
2360
+ "name": "keyword.other.abl"
2361
+ }
2362
+ }
2363
+ },
2364
+ "field-as-object": {
2365
+ "comment": "This is to capture 'FIELD x AS Object'. As of OE 12.7 only Progress.Lang.Object is allowed as a type name. If/when this changes, this regex becomes trickier",
2366
+ "match": "(?i)\\s*(progress\\.lang\\.object|object)\\s*",
2367
+ "captures": {
2368
+ "1": {
2369
+ "name": "entity.name.type.abl"
2370
+ }
2371
+ }
2372
+ },
2373
+ "annotation": {
2374
+ "patterns": [
2375
+ {
2376
+ "include": "#annotation-simple"
2377
+ },
2378
+ {
2379
+ "include": "#annotation-attributes"
2380
+ }
2381
+ ]
2382
+ },
2383
+ "annotation-simple": {
2384
+ "name": "meta.declaration.annotation.abl",
2385
+ "match": "(?i)(^|\\s*)(\\@[a-z][a-z0-9#\\$-_%&]*)\\s*(?=\\.)",
2386
+ "captures": {
2387
+ "2": {
2388
+ "name": "entity.name.tag.abl"
2389
+ }
2390
+ }
2391
+ },
2392
+ "annotation-attributes": {
2393
+ "name": "meta.declaration.annotation.abl",
2394
+ "begin": "(?i)(^|\\s+)(\\@[a-z][a-z0-9#\\$-_%&]*)\\s*(?=\\()",
2395
+ "beginCaptures": {
2396
+ "2": {
2397
+ "name": "entity.name.tag.abl"
2398
+ }
2399
+ },
2400
+ "end": "(?=\\.)",
2401
+ "patterns": [
2402
+ {
2403
+ "include": "#parens"
2404
+ },
2405
+ {
2406
+ "match": "(?i)\\s*([a-z][a-z0-9#\\$-_%&]+)(?=[\\=\\s$])",
2407
+ "captures": {
2408
+ "1": {
2409
+ "name": "entity.other.attribute-name.abl"
2410
+ }
2411
+ }
2412
+ },
2413
+ {
2414
+ "include": "#string"
2415
+ },
2416
+ {
2417
+ "include": "#operator-no-space"
2418
+ },
2419
+ {
2420
+ "include": "#punctuation-comma"
2421
+ }
2422
+ ]
2423
+ },
2424
+ "define": {
2425
+ "name": "meta.define.abl",
2426
+ "begin": "(?i)\\s*(define|defin|defi|def)\\s*",
2427
+ "beginCaptures": {
2428
+ "1": {
2429
+ "name": "keyword.other.abl"
2430
+ }
2431
+ },
2432
+ "end": "(\\.)",
2433
+ "endCaptures": {
2434
+ "1": {
2435
+ "name": "punctuation.terminator.abl"
2436
+ }
2437
+ },
2438
+ "patterns": [
2439
+ {
2440
+ "match": "(?i)\\s*(new|global|glob|shared)\\s*",
2441
+ "captures": {
2442
+ "1": {
2443
+ "name": "keyword.other.abl"
2444
+ }
2445
+ }
2446
+ },
2447
+ {
2448
+ "include": "#serializable"
2449
+ },
2450
+ {
2451
+ "include": "#access-modifier"
2452
+ },
2453
+ {
2454
+ "include": "#define-variable"
2455
+ },
2456
+ {
2457
+ "include": "#define-property"
2458
+ },
2459
+ {
2460
+ "include": "#property-accessor"
2461
+ },
2462
+ {
2463
+ "include": "#array-literal"
2464
+ },
2465
+ {
2466
+ "include": "#define-field"
2467
+ },
2468
+ {
2469
+ "include": "#parameter-as"
2470
+ },
2471
+ {
2472
+ "include": "#define-stream"
2473
+ },
2474
+ {
2475
+ "include": "#define-buffer"
2476
+ },
2477
+ {
2478
+ "include": "#define-frame"
2479
+ },
2480
+ {
2481
+ "include": "#for-table"
2482
+ },
2483
+ {
2484
+ "include": "#buffer-for-table"
2485
+ },
2486
+ {
2487
+ "include": "#define-table"
2488
+ },
2489
+ {
2490
+ "include": "#define-index"
2491
+ },
2492
+ {
2493
+ "include": "#define-like"
2494
+ },
2495
+ {
2496
+ "include": "#field-as-object"
2497
+ },
2498
+ {
2499
+ "include": "#extent"
2500
+ },
2501
+ {
2502
+ "include": "#decimals"
2503
+ },
2504
+ {
2505
+ "include": "#format-constant"
2506
+ },
2507
+ {
2508
+ "include": "#timestamp-constant"
2509
+ },
2510
+ {
2511
+ "include": "#constant"
2512
+ },
2513
+ {
2514
+ "include": "#numeric"
2515
+ },
2516
+ {
2517
+ "include": "#string"
2518
+ },
2519
+ {
2520
+ "include": "#primitive-type"
2521
+ },
2522
+ {
2523
+ "include": "#dll-type"
2524
+ },
2525
+ {
2526
+ "include": "#type-name-progress"
2527
+ },
2528
+ {
2529
+ "include": "#keywords"
2530
+ },
2531
+ {
2532
+ "include": "#comment"
2533
+ },
2534
+ {
2535
+ "include": "#label-variable"
2536
+ },
2537
+ {
2538
+ "include": "#type-name-generic-class"
2539
+ },
2540
+ {
2541
+ "include": "#type-name-generic"
2542
+ },
2543
+ {
2544
+ "include": "#type-name"
2545
+ }
2546
+ ]
2547
+ },
2548
+ "define-field": {
2549
+ "match": "(?i)\\s*(field)\\s+([\\w\\-#$%]+)\\s*",
2550
+ "captures": {
2551
+ "1": {
2552
+ "name": "keyword.other.abl"
2553
+ },
2554
+ "2": {
2555
+ "name": "storage.data.table.abl"
2556
+ }
2557
+ }
2558
+ },
2559
+ "define-property": {
2560
+ "begin": "(?i)\\b(property|prop)\\b",
2561
+ "beginCaptures": {
2562
+ "1": {
2563
+ "name": "keyword.other.abl"
2564
+ }
2565
+ },
2566
+ "comment": "This match just gets the definition of the property; the getter and setter are handled separately",
2567
+ "end": "(?i)\\s*(no-undo)|(?=private|public|protected|get|set)",
2568
+ "endCaptures": {
2569
+ "1": {
2570
+ "name": "keyword.other.abl"
2571
+ }
2572
+ },
2573
+ "patterns": [
2574
+ {
2575
+ "include": "#property-as"
2576
+ },
2577
+ {
2578
+ "include": "#primitive-type"
2579
+ },
2580
+ {
2581
+ "include": "#extent"
2582
+ },
2583
+ {
2584
+ "include": "#decimals"
2585
+ },
2586
+ {
2587
+ "include": "#array-literal"
2588
+ },
2589
+ {
2590
+ "include": "#timestamp-constant"
2591
+ },
2592
+ {
2593
+ "include": "#numeric"
2594
+ },
2595
+ {
2596
+ "comment": "needs to be before the #keywords include",
2597
+ "include": "#type-name-generic-progress"
2598
+ },
2599
+ {
2600
+ "comment": "needs to be before the #keywords include",
2601
+ "include": "#type-name-progress"
2602
+ },
2603
+ {
2604
+ "include": "#keywords"
2605
+ },
2606
+ {
2607
+ "include": "#string"
2608
+ },
2609
+ {
2610
+ "include": "#type-name-generic"
2611
+ },
2612
+ {
2613
+ "include": "#type-name"
2614
+ }
2615
+ ]
2616
+ },
2617
+ "buffer-name": {
2618
+ "match": "(?i)\\b(buffer)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)",
2619
+ "captures": {
2620
+ "1": {
2621
+ "name": "keyword.other.abl"
2622
+ },
2623
+ "2": {
2624
+ "name": "storage.data.table.abl"
2625
+ }
2626
+ }
2627
+ },
2628
+ "temp-table-name": {
2629
+ "match": "(?i)\\b(temp-table)\\s+([\\w\\-#$%]+)",
2630
+ "captures": {
2631
+ "1": {
2632
+ "name": "keyword.other.abl"
2633
+ },
2634
+ "2": {
2635
+ "name": "storage.data.table.abl"
2636
+ }
2637
+ }
2638
+ },
2639
+ "create-buffer": {
2640
+ "comment": "https://docs.progress.com/bundle/abl-reference/page/CREATE-BUFFER-statement.html",
2641
+ "begin": "(?i)(create)\\s+(buffer)\\b",
2642
+ "beginCaptures": {
2643
+ "1": {
2644
+ "name": "keyword.other.abl"
2645
+ },
2646
+ "2": {
2647
+ "name": "keyword.other.abl"
2648
+ }
2649
+ },
2650
+ "end": "(?i)(\\b(buffer-name|in)\\b)|(?=\\.)",
2651
+ "endCaptures": {
2652
+ "1": {
2653
+ "name": "keyword.other.abl"
2654
+ }
2655
+ },
2656
+ "patterns": [
2657
+ {
2658
+ "match": "(?i)\\s*(for|table)\\s*",
2659
+ "captures": {
2660
+ "1": {
2661
+ "name": "keyword.other.abl"
2662
+ }
2663
+ }
2664
+ },
2665
+ {
2666
+ "include": "#define-table"
2667
+ },
2668
+ {
2669
+ "include": "#buffer-name"
2670
+ },
2671
+ {
2672
+ "include": "#temp-table-name"
2673
+ },
2674
+ {
2675
+ "include": "#expression"
2676
+ },
2677
+ {
2678
+ "include": "#keywords"
2679
+ },
2680
+ {
2681
+ "include": "#string"
2682
+ },
2683
+ {
2684
+ "include": "#comment"
2685
+ },
2686
+ {
2687
+ "include": "#handle-attributes"
2688
+ },
2689
+ {
2690
+ "include": "#variable-name"
2691
+ }
2692
+ ]
2693
+ },
2694
+ "define-index": {
2695
+ "begin": "(?i)\\s*(index)\\s+([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&]*)",
2696
+ "beginCaptures": {
2697
+ "1": {
2698
+ "name": "keyword.other.abl"
2699
+ },
2700
+ "2": {
2701
+ "name": "storage.data.table.abl"
2702
+ }
2703
+ },
2704
+ "end": "(?i)(?=index|\\.)",
2705
+ "patterns": [
2706
+ {
2707
+ "match": "(?i)\\b(AS|IS|UNIQUE|PRIMARY|WORD-INDEX|ASCENDING|DESCENDING)\\b",
2708
+ "captures": {
2709
+ "1": {
2710
+ "name": "keyword.other.abl"
2711
+ }
2712
+ }
2713
+ },
2714
+ {
2715
+ "match": "\\b([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&]*)\\b",
2716
+ "captures": {
2717
+ "1": {
2718
+ "name": "storage.data.table.abl"
2719
+ }
2720
+ }
2721
+ }
2722
+ ]
2723
+ },
2724
+ "define-buffer": {
2725
+ "begin": "(?i)\\s*(buffer)\\s*",
2726
+ "beginCaptures": {
2727
+ "1": {
2728
+ "name": "keyword.other.abl"
2729
+ }
2730
+ },
2731
+ "end": "(?=\\.)",
2732
+ "patterns": [
2733
+ {
2734
+ "include": "#for-table"
2735
+ },
2736
+ {
2737
+ "include": "#buffer-for-table"
2738
+ },
2739
+ {
2740
+ "include": "#keywords"
2741
+ },
2742
+ {
2743
+ "include": "#comment"
2744
+ },
2745
+ {
2746
+ "include": "#string"
2747
+ }
2748
+ ]
2749
+ },
2750
+ "define-frame": {
2751
+ "match": "(?i)\\s*(frame)\\s*([a-z][a-z0-9#$\\-_%&]*)",
2752
+ "captures": {
2753
+ "1": {
2754
+ "name": "keyword.other.abl"
2755
+ },
2756
+ "2": {
2757
+ "name": "variable.other.abl"
2758
+ }
2759
+ }
2760
+ },
2761
+ "define-variable": {
2762
+ "comment": "This rule captures just the variable name and the data type. Based on https://docs.progress.com/bundle/abl-reference/page/DEFINE-VARIABLE-statement.html",
2763
+ "begin": "(?i)\\s*(variable|variabl|variab|varia|vari|var)\\s*",
2764
+ "beginCaptures": {
2765
+ "1": {
2766
+ "name": "keyword.other.abl"
2767
+ }
2768
+ },
2769
+ "end": "(?i)(?=\\.)|\\b(?=bgcolor|column-label|contet-help-id|dcolor|decimals|drop-target|extent|font|fgcolor|format|initial|label|mouse-pointer|no-undo|not|case-sensitive|pfcolor|view-as|triggers)\\b",
2770
+ "endCaptures": {
2771
+ "1": {
2772
+ "name": "keyword.other.abl"
2773
+ }
2774
+ },
2775
+ "patterns": [
2776
+ {
2777
+ "match": "(?i)\\b(class)\\b",
2778
+ "captures": {
2779
+ "1": {
2780
+ "name": "keyword.other.abl"
2781
+ }
2782
+ }
2783
+ },
2784
+ {
2785
+ "include": "#variable-as"
2786
+ },
2787
+ {
2788
+ "include": "#primitive-type"
2789
+ },
2790
+ {
2791
+ "comment": "needs to be before the #keywords include",
2792
+ "include": "#type-names"
2793
+ },
2794
+ {
2795
+ "comment": "needs to be before the #keywords include",
2796
+ "include": "#type-name-generic-progress"
2797
+ },
2798
+ {
2799
+ "comment": "needs to be before the #keywords include",
2800
+ "include": "#type-name-progress"
2801
+ },
2802
+ {
2803
+ "include": "#string"
2804
+ },
2805
+ {
2806
+ "include": "#type-name-generic"
2807
+ },
2808
+ {
2809
+ "include": "#type-name"
2810
+ }
2811
+ ]
2812
+ },
2813
+ "label-variable": {
2814
+ "match": "(?i)\\s*(\\w+)\\s+(label)\\s*",
2815
+ "captures": {
2816
+ "1": {
2817
+ "name": "variable.other.abl"
2818
+ },
2819
+ "2": {
2820
+ "name": "keyword.other.abl"
2821
+ }
2822
+ }
2823
+ },
2824
+ "format-constant": {
2825
+ "comment": "DATE/TIME/TZ fields can have an unquoted format if it's something like 99/99/9999",
2826
+ "match": "(?i)\\b(format)\\s+(9+\\/9+\\/9+)\\b",
2827
+ "captures": {
2828
+ "1": {
2829
+ "name": "keyword.other.abl"
2830
+ },
2831
+ "2": {
2832
+ "name": "constant.language.source.abl"
2833
+ }
2834
+ }
2835
+ },
2836
+ "define-table": {
2837
+ "match": "(?i)\\b(temp-table|like|before-table)\\s*([\\w\\-#$%]+)\\s*",
2838
+ "captures": {
2839
+ "1": {
2840
+ "name": "keyword.other.abl"
2841
+ },
2842
+ "2": {
2843
+ "name": "storage.data.table.abl"
2844
+ }
2845
+ }
2846
+ },
2847
+ "buffer-for-table": {
2848
+ "match": "(?i)\\s*(?!do|repeat|for)([\\w\\-#$%]+)\\s+(for)\\s+((temp-table)\\s+)?([\\w\\-#$%]+)\\s*",
2849
+ "captures": {
2850
+ "1": {
2851
+ "name": "storage.data.table.abl"
2852
+ },
2853
+ "2": {
2854
+ "name": "keyword.other.abl"
2855
+ },
2856
+ "4": {
2857
+ "name": "keyword.other.abl"
2858
+ },
2859
+ "5": {
2860
+ "name": "storage.data.table.abl"
2861
+ }
2862
+ }
2863
+ },
2864
+ "double-colon-field-name": {
2865
+ "match": "\\s*::([\\w\\-#$%]+)\\s*",
2866
+ "captures": {
2867
+ "1": {
2868
+ "name": "storage.data.table.abl"
2869
+ }
2870
+ }
2871
+ },
2872
+ "for-table": {
2873
+ "match": "(?i)\\s*(for)\\s+((temp-table)\\s+)?([\\w\\-#$%]+)\\s*",
2874
+ "captures": {
2875
+ "1": {
2876
+ "name": "keyword.other.abl"
2877
+ },
2878
+ "3": {
2879
+ "name": "keyword.other.abl"
2880
+ },
2881
+ "4": {
2882
+ "name": "storage.data.table.abl"
2883
+ }
2884
+ }
2885
+ },
2886
+ "access-modifier": {
2887
+ "match": "(?i)\\s*(package-private|private|package-protected|protected|public|static|override|abstract|final)\\s*",
2888
+ "captures": {
2889
+ "1": {
2890
+ "name": "keyword.other.abl"
2891
+ }
2892
+ }
2893
+ },
2894
+ "serializable": {
2895
+ "match": "(?i)\\b(non-serializable|serializable)\\b",
2896
+ "captures": {
2897
+ "1": {
2898
+ "name": "keyword.other.abl"
2899
+ }
2900
+ }
2901
+ },
2902
+ "define-stream": {
2903
+ "name": "meta.define.stream.abl",
2904
+ "match": "(?i)\\s*(stream)\\s*([\\w\\-]+)",
2905
+ "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/DEFINE-STREAM-statement.html",
2906
+ "captures": {
2907
+ "1": {
2908
+ "name": "keyword.other.abl"
2909
+ },
2910
+ "2": {
2911
+ "patterns": [
2912
+ {
2913
+ "include": "#variable-name"
2914
+ }
2915
+ ]
2916
+ }
2917
+ }
2918
+ },
2919
+ "define-like": {
2920
+ "match": "(?i)\\s*(like|like-sequential)\\s+([\\w\\-#$%]+)\\s*",
2921
+ "captures": {
2922
+ "1": {
2923
+ "name": "keyword.other.abl"
2924
+ },
2925
+ "2": {
2926
+ "name": "storage.data.table.abl"
2927
+ }
2928
+ }
2929
+ },
2930
+ "block-label": {
2931
+ "match": "(?i)^\\s*(([a-z][a-z0-9\\-\\_\\$]*):)\\s+",
2932
+ "comment": "A colon followed by a space is only legal is for block labels. block labels must be at the beginning of a line",
2933
+ "captures": {
2934
+ "2": {
2935
+ "name": "meta.block.label.abl"
2936
+ }
2937
+ }
2938
+ },
2939
+ "end-block": {
2940
+ "comment": "Certain blocks have the option of END <block name>",
2941
+ "match": "(?i)\\s*(end)\\s+(CASE|CATCH|CLASS|CONSTRUCTOR|DESTRUCTOR|ENUM|FINALLY|FUNCTION|GET|INTERFACE|METHOD|PROCEDURE|SET|TRIGGERS)\\s*",
2942
+ "captures": {
2943
+ "1": {
2944
+ "name": "keyword.other.abl"
2945
+ },
2946
+ "2": {
2947
+ "name": "keyword.other.abl"
2948
+ }
2949
+ }
2950
+ },
2951
+ "block-statement": {
2952
+ "begin": "(?i)(?<!end)\\s*(do|repeat|finally)\\s*",
2953
+ "beginCaptures": {
2954
+ "1": {
2955
+ "name": "keyword.other.abl"
2956
+ }
2957
+ },
2958
+ "comment": "The end condition is look forward AND backward for the colon, since contained conditions may terminate on a line-ending, which may contain the colon",
2959
+ "end": "\\s*(?=:)|(?<=:)|(?=\\.)|(?<=\\.)\\s*",
2960
+ "name": "meta.block.abl",
2961
+ "patterns": [
2962
+ {
2963
+ "include": "#for-record"
2964
+ },
2965
+ {
2966
+ "include": "#preselect-phrase"
2967
+ },
2968
+ {
2969
+ "include": "#query-tuning-phrase"
2970
+ },
2971
+ {
2972
+ "include": "#operator"
2973
+ },
2974
+ {
2975
+ "include": "#from-to-by"
2976
+ },
2977
+ {
2978
+ "include": "#while-expression"
2979
+ },
2980
+ {
2981
+ "match": "(?i)\\s*(transaction)\\s*",
2982
+ "name": "keyword.other.abl"
2983
+ },
2984
+ {
2985
+ "include": "#punctuation-comma"
2986
+ },
2987
+ {
2988
+ "include": "#branch-options"
2989
+ },
2990
+ {
2991
+ "include": "#frame-phrase"
2992
+ },
2993
+ {
2994
+ "include": "#expression"
2995
+ },
2996
+ {
2997
+ "include": "#preprocessors"
2998
+ }
2999
+ ]
3000
+ },
3001
+ "from-to-by": {
3002
+ "begin": "\\s*([\\w\\$\\-\\_\\%\\&]+)\\s+(=)\\s*",
3003
+ "beginCaptures": {
3004
+ "1": {
3005
+ "name": "variable.other.abl"
3006
+ },
3007
+ "2": {
3008
+ "name": "keyword.operator.source.abl"
3009
+ }
3010
+ },
3011
+ "comment": "End this block at the end of the line, using a lookahed.",
3012
+ "end": "(?=\\R)",
3013
+ "patterns": [
3014
+ {
3015
+ "match": "(?i)\\s+(to|by)\\s*",
3016
+ "captures": {
3017
+ "1": {
3018
+ "name": "keyword.other.abl"
3019
+ }
3020
+ }
3021
+ },
3022
+ {
3023
+ "include": "#numeric"
3024
+ },
3025
+ {
3026
+ "include": "#branch-options"
3027
+ }
3028
+ ]
3029
+ },
3030
+ "for-record": {
3031
+ "comment": "this regex just tries to capture a bunch (6) of tables",
3032
+ "match": "(?i)\\s*(for)\\s+([\\w\\-#$%]*)\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?",
3033
+ "captures": {
3034
+ "1": {
3035
+ "name": "keyword.other.abl"
3036
+ },
3037
+ "2": {
3038
+ "name": "storage.data.table.abl"
3039
+ },
3040
+ "3": {
3041
+ "name": "punctuation.separator.comma.abl"
3042
+ },
3043
+ "4": {
3044
+ "name": "storage.data.table.abl"
3045
+ },
3046
+ "5": {
3047
+ "name": "punctuation.separator.comma.abl"
3048
+ },
3049
+ "6": {
3050
+ "name": "storage.data.table.abl"
3051
+ },
3052
+ "7": {
3053
+ "name": "punctuation.separator.comma.abl"
3054
+ },
3055
+ "8": {
3056
+ "name": "storage.data.table.abl"
3057
+ },
3058
+ "9": {
3059
+ "name": "punctuation.separator.comma.abl"
3060
+ },
3061
+ "10": {
3062
+ "name": "storage.data.table.abl"
3063
+ },
3064
+ "11": {
3065
+ "name": "punctuation.separator.comma.abl"
3066
+ },
3067
+ "12": {
3068
+ "name": "storage.data.table.abl"
3069
+ }
3070
+ }
3071
+ },
3072
+ "on-error-endkey-stop": {
3073
+ "name": "meta.block.branch.abl",
3074
+ "match": "(?i)\\s*(on)\\s+(endkey|error|stop|quit)\\s+(undo)\\s*(?!leave|next|retry|return|throw)([a-z0-9\\-\\_\\$]*)?\\s*",
3075
+ "captures": {
3076
+ "1": {
3077
+ "name": "keyword.other.abl"
3078
+ },
3079
+ "2": {
3080
+ "name": "keyword.other.abl"
3081
+ },
3082
+ "3": {
3083
+ "name": "keyword.other.abl"
3084
+ },
3085
+ "4": {
3086
+ "name": "meta.block.label.abl"
3087
+ }
3088
+ }
3089
+ },
3090
+ "branch-leave-next-retry-throw": {
3091
+ "name": "meta.block.branch.abl",
3092
+ "match": "(?i)\\s*(?<=,)\\s*(leave|next|retry|throw)\\s*(?!on)([a-z0-9\\-\\_\\$]*)?\\s*",
3093
+ "captures": {
3094
+ "1": {
3095
+ "name": "keyword.other.abl"
3096
+ },
3097
+ "2": {
3098
+ "name": "meta.block.label.abl"
3099
+ }
3100
+ }
3101
+ },
3102
+ "branch-return-value-single": {
3103
+ "comment": "RETURN 'return-value'",
3104
+ "begin": "(?i)\\s*(return)(\\s+(error))?\\s+(')",
3105
+ "beginCaptures": {
3106
+ "1": {
3107
+ "name": "keyword.other.abl"
3108
+ },
3109
+ "2": {
3110
+ "name": "keyword.other.abl"
3111
+ },
3112
+ "3": {
3113
+ "name": "punctuation.definition.string.begin.abl"
3114
+ }
3115
+ },
3116
+ "name": "string.single.complex.abl",
3117
+ "end": "(')",
3118
+ "endCaptures": {
3119
+ "1": {
3120
+ "name": "punctuation.definition.string.end.abl"
3121
+ }
3122
+ },
3123
+ "patterns": [
3124
+ {
3125
+ "include": "#escape-char"
3126
+ }
3127
+ ]
3128
+ },
3129
+ "escape-char": {
3130
+ "match": "~.",
3131
+ "name": "constant.character.escape.abl"
3132
+ },
3133
+ "branch-return-value-double": {
3134
+ "name": "meta.block.branch.abl",
3135
+ "comment": "RETURN \"return-value\"",
3136
+ "begin": "(?i)\\s*(return)(\\s+(error))?\\s+(\")",
3137
+ "beginCaptures": {
3138
+ "1": {
3139
+ "name": "keyword.other.abl"
3140
+ },
3141
+ "2": {
3142
+ "name": "keyword.other.abl"
3143
+ },
3144
+ "3": {
3145
+ "name": "punctuation.definition.string.begin.abl"
3146
+ }
3147
+ },
3148
+ "end": "(\")",
3149
+ "endCaptures": {
3150
+ "1": {
3151
+ "name": "punctuation.definition.string.end.abl"
3152
+ }
3153
+ },
3154
+ "patterns": [
3155
+ {
3156
+ "include": "#escape-char"
3157
+ }
3158
+ ]
3159
+ },
3160
+ "branch-return-no-apply": {
3161
+ "name": "meta.block.branch.abl",
3162
+ "comment": "RETURN NO-APPLY",
3163
+ "match": "(?i)\\s*(return)\\s+(no-apply)\\s*",
3164
+ "captures": {
3165
+ "1": {
3166
+ "name": "keyword.other.abl"
3167
+ },
3168
+ "2": {
3169
+ "name": "keyword.other.abl"
3170
+ }
3171
+ }
3172
+ },
3173
+ "branch-return-error-expression": {
3174
+ "name": "meta.block.branch.abl",
3175
+ "begin": "(?i)\\s*(return)\\s+(error)\\s*",
3176
+ "beginCaptures": {
3177
+ "1": {
3178
+ "name": "keyword.other.abl"
3179
+ },
3180
+ "2": {
3181
+ "name": "keyword.other.abl"
3182
+ }
3183
+ },
3184
+ "comment": " This regex captures to the end of the line, or the colon, whichever comes first",
3185
+ "end": "(?=\\:|$)",
3186
+ "patterns": [
3187
+ {
3188
+ "match": "(?i)\\b(new)\\s+(.*)\\s*(?=\\($|)",
3189
+ "captures": {
3190
+ "1": {
3191
+ "name": "keyword.other.abl"
3192
+ },
3193
+ "2": {
3194
+ "name": "entity.name.type.abl"
3195
+ }
3196
+ }
3197
+ },
3198
+ {
3199
+ "include": "#property-call"
3200
+ },
3201
+ {
3202
+ "include": "#expression"
3203
+ }
3204
+ ]
3205
+ },
3206
+ "undo-statement": {
3207
+ "comment": "https://docs.progress.com/bundle/abl-reference/page/UNDO-statement.html",
3208
+ "begin": "(?i)\\s*(undo)\\s*([a-z0-9\\-\\_\\$]*)?\\s*(,)",
3209
+ "beginCaptures": {
3210
+ "1": {
3211
+ "name": "keyword.other.abl"
3212
+ },
3213
+ "2": {
3214
+ "name": "meta.block.label.abl"
3215
+ },
3216
+ "3": {
3217
+ "name": "punctuation.separator.comma.abl"
3218
+ }
3219
+ },
3220
+ "end": "(?=\\.|\\:)",
3221
+ "patterns": [
3222
+ {
3223
+ "include": "#string"
3224
+ },
3225
+ {
3226
+ "match": "(?i)\\s*(leave|next|retry)\\s([a-z0-9\\-\\_\\$]*)?",
3227
+ "captures": {
3228
+ "1": {
3229
+ "name": "keyword.other.abl"
3230
+ },
3231
+ "2": {
3232
+ "name": "meta.block.label.abl"
3233
+ }
3234
+ }
3235
+ },
3236
+ {
3237
+ "include": "#new-class"
3238
+ },
3239
+ {
3240
+ "include": "#keywords"
3241
+ },
3242
+ {
3243
+ "include": "#code-block"
3244
+ },
3245
+ {
3246
+ "include": "#property-call"
3247
+ },
3248
+ {
3249
+ "include": "#function-arguments"
3250
+ },
3251
+ {
3252
+ "include": "#expression"
3253
+ },
3254
+ {
3255
+ "include": "#punctuation-colon"
3256
+ }
3257
+ ]
3258
+ },
3259
+ "branch-options": {
3260
+ "name": "meta.block.branch.abl",
3261
+ "patterns": [
3262
+ {
3263
+ "include": "#on-error-endkey-stop"
3264
+ },
3265
+ {
3266
+ "include": "#on-quit"
3267
+ },
3268
+ {
3269
+ "include": "#branch-leave-next-retry-throw"
3270
+ },
3271
+ {
3272
+ "include": "#branch-return-value-double"
3273
+ },
3274
+ {
3275
+ "include": "#branch-return-value-single"
3276
+ },
3277
+ {
3278
+ "include": "#branch-return-no-apply"
3279
+ },
3280
+ {
3281
+ "include": "#branch-return-error-expression"
3282
+ },
3283
+ {
3284
+ "include": "#punctuation-comma"
279
3285
  }
280
3286
  ]
281
3287
  },
282
- "do-block": {
283
- "begin": "(?i)\\b(do)\\b",
3288
+ "while-expression": {
3289
+ "begin": "(?i)\\s*(while)\\s*",
284
3290
  "beginCaptures": {
285
3291
  "1": {
286
3292
  "name": "keyword.other.abl"
287
3293
  }
288
3294
  },
289
- "end": "(?=\\.)",
290
- "name": "meta.do.abl",
3295
+ "comment": " This regex just captures to the end of the line, so if the WHILE is split across 2 lines, this may not capture everything",
3296
+ "end": "(?=\\R)",
291
3297
  "patterns": [
292
3298
  {
293
- "begin": "(?i)\\b(while)\\b",
294
- "end": "(?=(?::))",
295
- "beginCaptures": {
296
- "1": {
297
- "name": "keyword.other.abl"
298
- }
299
- },
300
- "name": "meta.do.while.abl",
301
- "patterns": [
302
- {
303
- "include": "#statements"
304
- }
305
- ]
3299
+ "include": "#operator"
306
3300
  },
307
3301
  {
308
- "include": "#statements"
3302
+ "include": "#property-call"
309
3303
  },
310
3304
  {
311
- "begin": ":",
312
- "end": "(?i)(end\\s*do|end)",
313
- "endCaptures": {
314
- "1": {
315
- "name": "keyword.other.abl"
316
- }
317
- },
318
- "name": "meta.do.body.abl",
319
- "patterns": [
320
- {
321
- "include": "#code-block"
322
- }
323
- ]
3305
+ "include": "#branch-options"
3306
+ },
3307
+ {
3308
+ "include": "#statements"
324
3309
  }
325
3310
  ]
326
3311
  },
@@ -347,40 +3332,172 @@
347
3332
  }
348
3333
  ]
349
3334
  },
350
- "method-call": {
351
- "match": "(?<=\\.|:)(\\w|-)+",
352
- "name": "support.function.abl"
353
- },
354
- "function-call": {
355
- "name": "meta.function-call.abl",
356
- "begin": "([\\w-]+)\\s*(\\()",
357
- "end": "(\\))",
3335
+ "if-then": {
3336
+ "begin": "(?i)\\s*(if)\\s*",
358
3337
  "beginCaptures": {
359
3338
  "1": {
360
- "name": "entity.name.function.abl"
3339
+ "name": "keyword.other.abl"
3340
+ }
3341
+ },
3342
+ "patterns": [
3343
+ {
3344
+ "match": "(?i)\\b(and|or)\\b",
3345
+ "captures": {
3346
+ "1": {
3347
+ "name": "keyword.other.abl"
3348
+ }
3349
+ }
361
3350
  },
362
- "2": {
3351
+ {
3352
+ "include": "#parens"
3353
+ },
3354
+ {
3355
+ "include": "#function-arguments"
3356
+ },
3357
+ {
3358
+ "include": "#db-dot-table-dot-field"
3359
+ },
3360
+ {
3361
+ "include": "#operator"
3362
+ },
3363
+ {
3364
+ "include": "#code-block"
3365
+ },
3366
+ {
3367
+ "include": "#comment"
3368
+ },
3369
+ {
3370
+ "include": "#property-call"
3371
+ },
3372
+ {
3373
+ "include": "#handle-attributes"
3374
+ },
3375
+ {
3376
+ "include": "#keywords"
3377
+ }
3378
+ ],
3379
+ "end": "(?i)\\b(?=then)\\b"
3380
+ },
3381
+ "function-arguments": {
3382
+ "name": "meta.function.arguments.abl",
3383
+ "comment": "Captures what's between ( and ) when calling a function, excluding the braces ",
3384
+ "begin": "(?=\\()",
3385
+ "beginCaptures": {
3386
+ "1": {
363
3387
  "name": "meta.brace.round.js"
364
3388
  }
365
3389
  },
3390
+ "end": "(?=\\))",
366
3391
  "endCaptures": {
367
3392
  "1": {
368
3393
  "name": "meta.brace.round.js"
369
3394
  }
370
3395
  },
371
3396
  "patterns": [
3397
+ {
3398
+ "include": "#parens"
3399
+ },
3400
+ {
3401
+ "match": "(?i)\\s*(input-output|output|input|table-handle|table|dataset-handle|dataset|APPEND|BY-VALUE|BY-REFERENCE|BIND)\\s*",
3402
+ "captures": {
3403
+ "1": {
3404
+ "name": "keyword.other.abl"
3405
+ }
3406
+ }
3407
+ },
3408
+ {
3409
+ "include": "#constant"
3410
+ },
3411
+ {
3412
+ "include": "#type-reference"
3413
+ },
3414
+ {
3415
+ "include": "#db-dot-table-dot-field"
3416
+ },
3417
+ {
3418
+ "include": "#abl-system-handles"
3419
+ },
3420
+ {
3421
+ "include": "#abl-functions"
3422
+ },
372
3423
  {
373
3424
  "include": "#expression"
374
3425
  },
3426
+ {
3427
+ "include": "#property-call"
3428
+ },
375
3429
  {
376
3430
  "include": "#punctuation-comma"
3431
+ },
3432
+ {
3433
+ "include": "#static-object-property-call"
377
3434
  }
378
3435
  ]
379
3436
  },
3437
+ "static-object-property-call": {
3438
+ "match": "(?i)\\s*(([\\w\\#\\$\\%\\-]+|progress)(\\.[\\w\\#\\$\\%\\-]+)+)\\s*(:)([\\w-]+)\\s*",
3439
+ "commment": "This rule only captures dotted type name and not single class names",
3440
+ "captures": {
3441
+ "1": {
3442
+ "name": "entity.name.type.abl"
3443
+ },
3444
+ "4": {
3445
+ "name": "punctuation.separator.colon.abl"
3446
+ },
3447
+ "5": {
3448
+ "name": "entity.name.function.abl"
3449
+ }
3450
+ }
3451
+ },
3452
+ "property-call": {
3453
+ "match": "(:)([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&]*)\\b",
3454
+ "captures": {
3455
+ "1": {
3456
+ "name": "punctuation.separator.colon.abl"
3457
+ },
3458
+ "2": {
3459
+ "name": "entity.name.function.abl"
3460
+ }
3461
+ }
3462
+ },
380
3463
  "variable-name": {
381
- "match": "(?<=^|\\s|\\[|\\()([\\w-]+)",
3464
+ "comment": "1 to 128 characters; can consist of any combination of letters (a-z or A-Z), numbers (0-9), and these special characters: #$-_%& Names must begin with a letter (from https://docs.progress.com/bundle/openedge-abl-manage-applications/page/Name-limits.html)",
3465
+ "match": "(?<=^|\\s|\\[|\\()([a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\&]*)",
382
3466
  "name": "variable.other.abl"
383
3467
  },
3468
+ "extent": {
3469
+ "match": "(?i)\\s*(extent)\\s*((0x[0-9a-f]+)|([0-9]+)?)",
3470
+ "captures": {
3471
+ "1": {
3472
+ "name": "keyword.other.abl"
3473
+ },
3474
+ "2": {
3475
+ "name": "constant.numeric.source.abl"
3476
+ }
3477
+ }
3478
+ },
3479
+ "decimals": {
3480
+ "match": "(?i)\\s*(decimals)\\s((0x[0-9a-f]+)|([0-9]+)?)",
3481
+ "captures": {
3482
+ "1": {
3483
+ "name": "keyword.other.abl"
3484
+ },
3485
+ "2": {
3486
+ "name": "constant.numeric.source.abl"
3487
+ }
3488
+ }
3489
+ },
3490
+ "ordinal": {
3491
+ "match": "(?i)\\s*(ordinal)\\s((0x[0-9a-f]+)|([0-9]+)?)",
3492
+ "captures": {
3493
+ "1": {
3494
+ "name": "keyword.other.abl"
3495
+ },
3496
+ "2": {
3497
+ "name": "constant.numeric.source.abl"
3498
+ }
3499
+ }
3500
+ },
384
3501
  "array-literal": {
385
3502
  "name": "meta.array.literal.abl",
386
3503
  "begin": "\\[",
@@ -404,11 +3521,37 @@
404
3521
  }
405
3522
  ]
406
3523
  },
3524
+ "array-use": {
3525
+ "name": "meta.array.literal.abl",
3526
+ "begin": "\\[",
3527
+ "beginCaptures": {
3528
+ "0": {
3529
+ "name": "meta.brace.square.abl"
3530
+ }
3531
+ },
3532
+ "end": "\\]",
3533
+ "endCaptures": {
3534
+ "0": {
3535
+ "name": "meta.brace.square.abl"
3536
+ }
3537
+ },
3538
+ "patterns": [
3539
+ {
3540
+ "include": "#expression"
3541
+ },
3542
+ {
3543
+ "include": "#punctuation-comma"
3544
+ }
3545
+ ]
3546
+ },
407
3547
  "expression": {
408
3548
  "patterns": [
409
3549
  {
410
3550
  "include": "#string"
411
3551
  },
3552
+ {
3553
+ "include": "#timestamp-constant"
3554
+ },
412
3555
  {
413
3556
  "include": "#constant"
414
3557
  },
@@ -417,6 +3560,9 @@
417
3560
  },
418
3561
  {
419
3562
  "include": "#variable-name"
3563
+ },
3564
+ {
3565
+ "include": "#double-colon-field-name"
420
3566
  }
421
3567
  ]
422
3568
  },
@@ -424,54 +3570,117 @@
424
3570
  "match": "(?<=^|\\s)(\\w|-)+(?=\\s)",
425
3571
  "name": "variable.parameter.abl"
426
3572
  },
3573
+ "run-statement": {
3574
+ "match": "(?i)\\s*(run)\\s+(?!value)(([a-z][a-z0-9\\/\\-\\_\\\\]+)(\\.[a-z]+)?)",
3575
+ "captures": {
3576
+ "1": {
3577
+ "name": "keyword.other.abl"
3578
+ },
3579
+ "2": {
3580
+ "name": "meta.other.procedure.abl"
3581
+ }
3582
+ }
3583
+ },
427
3584
  "include-file": {
428
- "begin": "({)\\s*",
3585
+ "name": "meta.include.abl",
3586
+ "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/Include-file-reference.html",
3587
+ "begin": "(?i)({)\\s*(([a-z][a-z0-9\\/\\-\\_\\\\]+)(\\.[a-z]+)?)",
429
3588
  "beginCaptures": {
430
3589
  "1": {
431
3590
  "name": "punctuation.section.abl"
3591
+ },
3592
+ "2": {
3593
+ "name": "meta.other.include.abl"
432
3594
  }
433
3595
  },
434
- "end": "\\s*(})",
3596
+ "end": "\\s*(})\\s*",
435
3597
  "endCaptures": {
436
3598
  "1": {
437
3599
  "name": "punctuation.section.abl"
438
3600
  }
439
3601
  },
440
- "name": "meta.include.abl",
441
3602
  "patterns": [
3603
+ {
3604
+ "include": "#argument-reference"
3605
+ },
3606
+ {
3607
+ "match": "(?<=\\s)(&[a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\.]+)\\s*(=?)",
3608
+ "name": "meta.include.argument.abl",
3609
+ "comment": "This is intended to catch '&arg' and '&arg=' ",
3610
+ "captures": {
3611
+ "1": {
3612
+ "name": "support.other.argument.abl",
3613
+ "comment": "you can use variable names, field names, and reserved words as argument names."
3614
+ },
3615
+ "2": {
3616
+ "name": "keyword.operator.source.abl"
3617
+ }
3618
+ }
3619
+ },
442
3620
  {
443
3621
  "include": "#string"
444
3622
  },
445
3623
  {
446
- "match": "(?i)({\\&[\\w-]*})",
447
- "name": "keyword.other"
3624
+ "match": "(?<=\\s)(&[a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\.]+)\\s*(=?)",
3625
+ "comment": "non-string argument values after the &arg = ",
3626
+ "name": "meta.include-named-argument",
3627
+ "captures": {
3628
+ "1": {
3629
+ "name": "support.other.argument.abl",
3630
+ "comment": "you can use variable names, field names, and reserved words as argument names."
3631
+ },
3632
+ "2": {
3633
+ "name": "keyword.operator.source.abl"
3634
+ }
3635
+ }
448
3636
  },
449
3637
  {
450
- "match": "(\\&[\\w-]+)(\\s*)=(\\s*)((\".*\")|('.*')|([^}\\s]*))",
451
- "name": "meta.include-named-argument"
3638
+ "include": "#string"
452
3639
  },
453
3640
  {
454
- "match": "([^}\\s]*)\\s*",
3641
+ "match": "(?<=\\s)(&[a-zA-Z][a-zA-Z0-9\\#\\$\\-\\_\\%\\.]+)\\s*(=?)",
3642
+ "comment": "non-string argument values after the &arg = ",
3643
+ "name": "meta.include-named-argument",
455
3644
  "captures": {
456
3645
  "1": {
457
- "name": "string.unquoted.include-argument.abl"
3646
+ "name": "support.other.argument.abl",
3647
+ "comment": "you can use variable names, field names, and reserved words as argument names."
3648
+ },
3649
+ "2": {
3650
+ "name": "keyword.operator.source.abl"
458
3651
  }
459
3652
  }
460
3653
  }
461
- ],
462
- "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/Include-file-reference.html"
3654
+ ]
463
3655
  },
464
3656
  "argument-reference": {
465
- "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/Argument-reference.html"
3657
+ "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/Argument-reference.html",
3658
+ "match": "\\s*((\\{\\s*\\&[\\.\\w\\\/-]+\\})|(\\{\\s*\\d+\\})|(\\{\\s*\\*\\}))\\s*",
3659
+ "captures": {
3660
+ "1": {
3661
+ "name": "support.other.argument.abl"
3662
+ }
3663
+ }
3664
+ },
3665
+ "comment": {
3666
+ "patterns": [
3667
+ {
3668
+ "include": "#singlelinecomment"
3669
+ },
3670
+ {
3671
+ "include": "#multilinecomment"
3672
+ }
3673
+ ]
466
3674
  },
467
3675
  "singlelinecomment": {
468
- "match": "//.*$",
469
- "name": "comment.source.abl"
3676
+ "match": "\\/\\/.*$",
3677
+ "comment": "Was comment.source.abl but should be changed, per https://macromates.com/manual/en/language_grammars",
3678
+ "name": "comment.line.double-slash.abl"
470
3679
  },
471
3680
  "multilinecomment": {
472
3681
  "begin": "(?<!=)\\/\\*",
473
3682
  "contentName": "comment",
474
- "end": "\\*/",
3683
+ "end": "\\*\\/",
475
3684
  "name": "comment.block.source.abl",
476
3685
  "patterns": [
477
3686
  {
@@ -487,75 +3696,170 @@
487
3696
  },
488
3697
  {
489
3698
  "include": "#doublequotedstring"
3699
+ },
3700
+ {
3701
+ "include": "#translation-attribute"
490
3702
  }
491
3703
  ]
492
3704
  },
493
3705
  "singlequotedstring": {
494
- "begin": "'",
3706
+ "begin": "(')",
495
3707
  "beginCaptures": {
496
- "0": {
3708
+ "1": {
497
3709
  "name": "punctuation.definition.string.begin.abl"
498
3710
  }
499
3711
  },
500
- "end": "'",
3712
+ "end": "(')",
501
3713
  "endCaptures": {
502
- "0": {
3714
+ "1": {
503
3715
  "name": "punctuation.definition.string.end.abl"
504
3716
  }
505
3717
  },
506
3718
  "name": "string.single.complex.abl",
507
3719
  "patterns": [
508
3720
  {
509
- "match": "~.",
510
- "name": "constant.character.escape.abl"
3721
+ "include": "#escape-char"
511
3722
  }
512
3723
  ]
513
3724
  },
514
3725
  "doublequotedstring": {
515
- "begin": "\"",
3726
+ "begin": "(\")",
516
3727
  "beginCaptures": {
517
- "0": {
3728
+ "1": {
518
3729
  "name": "punctuation.definition.string.begin.abl"
519
3730
  }
520
3731
  },
521
- "end": "\"",
3732
+ "end": "(\")",
522
3733
  "endCaptures": {
523
- "0": {
3734
+ "1": {
524
3735
  "name": "punctuation.definition.string.end.abl"
525
3736
  }
526
3737
  },
527
3738
  "name": "string.double.complex.abl",
528
3739
  "patterns": [
529
3740
  {
530
- "match": "~.",
531
- "name": "constant.character.escape.abl"
3741
+ "include": "#escape-char"
532
3742
  }
533
3743
  ]
534
3744
  },
3745
+ "dll-type": {
3746
+ "match": "(?i)\\s*(byte|unsigned-short|short|unsigned-long|long|int64|float)\\s*",
3747
+ "captures": {
3748
+ "1": {
3749
+ "name": "storage.type.abl"
3750
+ }
3751
+ },
3752
+ "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/Data-types.html"
3753
+ },
535
3754
  "primitive-type": {
536
- "match": "(?i)(?<=^|\\s)(blob|character|characte|charact|charac|chara|char|clob|com-handle|date|datetime|datetime-tz|decimal|decima|decim|deci|dec|handle|int64|integer|intege|integ|inte|int|logical|logica|logic|logi|log|longchar|longcha|longch|memptr|raw|recid|rowid|widget-handle)(?![=\\w-])",
537
- "name": "storage.type.abl",
3755
+ "match": "(?i)(?<=^|\\s)(blob|character|characte|charact|charac|chara|char|cha|ch|c|clob|com-handle|date|da|datetime|datetime-tz|decimal|decima|decim|deci|dec|de|handle|int64|integer|intege|integ|inte|int|in|i|logical|logica|logic|logi|log|lo|l|longchar|longcha|longch|memptr|raw|recid|rowid|widget-handle)(?![=\\w-])",
3756
+ "captures": {
3757
+ "1": {
3758
+ "name": "storage.type.abl"
3759
+ }
3760
+ },
538
3761
  "comment": "https://docs.progress.com/bundle/openedge-abl-reference-122/page/Data-types.html"
539
3762
  },
540
3763
  "numeric": {
541
- "match": "(?<![\\w-])((0(x|X)[0-9a-fA-F]+)|([0-9]+(\\.[0-9]+)?))",
3764
+ "match": "(?<![\\w-])((0(x|X)[0-9a-fA-F]+)|(\\-?[0-9]+(\\.[0-9]+)?))",
542
3765
  "name": "constant.numeric.source.abl"
543
3766
  },
3767
+ "abl-system-handles": {
3768
+ "match": "(?i)\\s*(this-object|super|self|this-procedure|target-procedure|source-procedure|session|error-status|compiler|audit-control|audit-policy|clipboard|codebase-locator|color-table|debugger|dslog-manager|file-information|file-info|font-table|last-event|log-manager|profiler|rcode-information|rcode-info|security-policy|session|web-context)\\s*(?=:)",
3769
+ "captures": {
3770
+ "1": {
3771
+ "name": "variable.language.abl"
3772
+ },
3773
+ "2": {
3774
+ "name": "punctuation.separator.colon.abl"
3775
+ }
3776
+ }
3777
+ },
3778
+ "timestamp-constant": {
3779
+ "match": "(?i)(?<=^|\\s*)(today|now)(?!\\w|-)",
3780
+ "name": "constant.language.abl"
3781
+ },
544
3782
  "constant": {
545
- "match": "(?i)(?<=^|\\s)(true|false|yes|no)(?!\\w|-)",
546
- "name": "constant.language.source.abl"
3783
+ "match": "(?i)(?<=^|\\s|\\()(true|false|yes|no|\\?)(?!\\w|-)",
3784
+ "name": "constant.language.abl"
3785
+ },
3786
+ "punctuation-colon": {
3787
+ "name": "punctuation.terminator.abl",
3788
+ "match": ":"
3789
+ },
3790
+ "punctuation-separator": {
3791
+ "name": "punctuation.separator.abl",
3792
+ "patterns": [
3793
+ {
3794
+ "include": "#punctuation-comma"
3795
+ },
3796
+ {
3797
+ "match": "(\\:)",
3798
+ "captures": {
3799
+ "1": {
3800
+ "name": "punctuation.separator.colon.abl"
3801
+ }
3802
+ }
3803
+ },
3804
+ {
3805
+ "match": "(\\.)",
3806
+ "captures": {
3807
+ "1": {
3808
+ "name": "punctuation.separator.period.abl"
3809
+ }
3810
+ }
3811
+ }
3812
+ ]
547
3813
  },
548
3814
  "punctuation-comma": {
549
- "name": "punctuation.separator.comma.abl",
550
- "match": ","
3815
+ "captures": {
3816
+ "1": {
3817
+ "name": "punctuation.separator.comma.abl"
3818
+ }
3819
+ },
3820
+ "match": "(,)"
551
3821
  },
552
3822
  "punctuation-semicolon": {
553
- "name": "punctuation.terminator.abl",
554
- "match": "\\."
3823
+ "captures": {
3824
+ "1": {
3825
+ "name": "punctuation.terminator.abl"
3826
+ }
3827
+ },
3828
+ "match": "(;)"
3829
+ },
3830
+ "punctuation-period": {
3831
+ "captures": {
3832
+ "1": {
3833
+ "name": "punctuation.terminator.abl"
3834
+ }
3835
+ },
3836
+ "match": "(\\.)"
555
3837
  },
556
3838
  "operator": {
557
- "match": "(?i)(<=|<>|>=|=|\\+| - |/|<|>|,)",
558
- "name": "keyword.operator.source.abl"
3839
+ "patterns": [
3840
+ {
3841
+ "include": "#operator-no-space"
3842
+ },
3843
+ {
3844
+ "include": "#operator-with-space"
3845
+ }
3846
+ ]
3847
+ },
3848
+ "operator-no-space": {
3849
+ "match": "(\\+=|-=|\\\\=|\\*=|<=|<>|>=|=|\\+|\\-|\/|<|>|\\*)",
3850
+ "captures": {
3851
+ "1": {
3852
+ "name": "keyword.operator.source.abl"
3853
+ }
3854
+ }
3855
+ },
3856
+ "operator-with-space": {
3857
+ "match": "(?i)\\s+(contains|begins|matches|eq|le|lt|ge|gt|ne)\\s+",
3858
+ "captures": {
3859
+ "1": {
3860
+ "name": "keyword.operator.source.abl"
3861
+ }
3862
+ }
559
3863
  },
560
3864
  "keywords": {
561
3865
  "patterns": [
@@ -729,14 +4033,14 @@
729
4033
  "name": "keyword.other.abl"
730
4034
  },
731
4035
  "keywords-x": {
732
- "match": "(?i)(?<![\\w-])(x|x-document|x-noderef|x-of|xcode|xcode-session-key|xml-data-type|xml-entity-expansion-limit|xml-node-name|xml-node-type|xml-schema-pat|xml-schema-path|xml-strict-entity-resolution|xml-suppress-namespace-processing|xor|xref|xref-xml)(?![\\w-])",
4036
+ "match": "(?i)(?<![\\w-])(x-document|x-noderef|x-of|xcode|xcode-session-key|xml-data-type|xml-entity-expansion-limit|xml-node-name|xml-node-type|xml-schema-pat|xml-schema-path|xml-strict-entity-resolution|xml-suppress-namespace-processing|xor|xref|xref-xml)(?![\\w-])",
733
4037
  "name": "keyword.other.abl"
734
4038
  },
735
4039
  "keywords-y": {
736
4040
  "match": "(?i)(?<![\\w-])(y|y-of|year|year-offset|yes|yes-no|yes-no-cancel)(?![\\w-])",
737
4041
  "name": "keyword.other.abl"
738
4042
  }
739
- },
4043
+ },
740
4044
  "scopeName": "source.abl",
741
4045
  "uuid": "075bb86e-03ea-4fea-bac0-e11b9dc73e03"
742
4046
  }