/
source.abl.js
1807 lines (1806 loc) · 106 KB
/
source.abl.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
// This is a TextMate grammar distributed by `starry-night`.
// This grammar is developed at
// <https://github.com/chriscamicas/abl-tmlanguage>
// and licensed `mit`.
// See <https://github.com/wooorm/starry-night> for more info.
/** @type {import('../lib/index.js').Grammar} */
const grammar = {
extensions: ['.w'],
names: ['openedge-abl', 'progress', 'openedge', 'abl'],
patterns: [{include: '#statements'}],
repository: {
'abl-functions': {
patterns: [
{include: '#abl-functions-A'},
{include: '#abl-functions-B'},
{include: '#abl-functions-C'},
{include: '#abl-functions-D'},
{include: '#abl-functions-E'},
{include: '#abl-functions-F'},
{include: '#abl-functions-G'},
{include: '#abl-functions-H'},
{include: '#abl-functions-I'},
{include: '#abl-functions-K'},
{include: '#abl-functions-L'},
{include: '#abl-functions-M'},
{include: '#abl-functions-N'},
{include: '#abl-functions-O'},
{include: '#abl-functions-P'},
{include: '#abl-functions-Q'},
{include: '#abl-functions-R'},
{include: '#abl-functions-S'},
{include: '#abl-functions-T'},
{include: '#abl-functions-U'},
{include: '#abl-functions-V'},
{include: '#abl-functions-W'},
{include: '#abl-functions-Y'}
]
},
'abl-functions-A': {
begin:
'(?i)\\s*(ABSOLUTE|ACCUM|ADD-INTERVAL|ALIAS|AMBIGUOUS|ASC|AUDIT-ENABLED|AVAILABLE)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-B': {
begin:
'(?i)\\s*(BASE64-DECODE|BASE64-ENCODE|BOX|BUFFER-GROUP-ID|BUFFER-GROUP-NAME|BUFFER-PARTITION-ID|BUFFER-TENANT-ID|BUFFER-TENANT-NAME)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-C': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-D': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-E': {
begin:
'(?i)\\s*(ENCODE|ENCRYPT|ENTERED|ENTRY|ERROR|ETIME|EXP|EXTENT)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-F': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-G': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-H': {
begin: '(?i)\\s*(HANDLE|HASH-CODE|HEX-DECODE|HEX-ENCODE)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-I': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-K': {
begin:
'(?i)\\s*(KBLABEL|KEYCODE|KEYFUNCTION|KEYLABEL|KEYWORD|KEYWORD-ALL)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-L': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-M': {
begin:
'(?i)\\s*(MAXIMUM|MD5-DIGEST|MEMBER|MESSAGE-DIGEST|MESSAGE-LINES|MINIMUM|MONTH|MTIME)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-N': {
begin:
'(?i)\\s*(NEXT-VALUE|NORMALIZE|NOT ENTERED|NOW|NUM-ALIASES|NUM-DBS|NUM-ENTRIES|NUM-RESULTS)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-O': {
begin: '(?i)\\s*(OPSYS|OS-DRIVES|OS-ERROR|OS-GETENV)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-P': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-Q': {
begin: '(?i)\\s*(QUERY-OFF-END|QUOTER)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-R': {
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*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-S': {
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|subst|substi|substit|substitu|substitut|substitute|substr|substri|substrin|substring|SUPER)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-T': {
begin:
'(?i)\\s*(TENANT-ID|TENANT-NAME|TENANT-NAME-TO-ID|TERMINAL|TIME|TIMEZONE|TODAY|TO-ROWID|TRANSACTION|TRIM|TRUNCATE|TYPE-OF)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-U': {
begin: '(?i)\\s*(UNBOX|USERID)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-V': {
begin: '(?i)\\s*(VALID-EVENT|VALID-HANDLE|VALID-OBJECT|VALUE)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-W': {
begin: '(?i)\\s*(WEEKDAY|WIDGET-HANDLE)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-functions-Y': {
begin: '(?i)\\s*(YEAR)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(?=\\))',
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}, {include: '#parens'}]
},
'abl-system-handles': {
captures: {
1: {name: 'variable.language.abl'},
2: {name: 'punctuation.terminator.abl'},
3: {name: 'meta.brace.round.js'}
},
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*'
},
'access-modifier': {
captures: {1: {name: 'keyword.other.abl'}},
match:
'(?i)\\s*(package-private|private|package-protected|protected|public|static|override|abstract|final)\\s*'
},
'analyze-suspend-resume': {
begin: '(?i)(\\&analyze-suspend|\\&analyze-resume)\\s*',
end: '(?=(?://|/\\*))|$',
name: 'comment.preprocessor.analyze-suspend.abl'
},
annotation: {
patterns: [
{include: '#annotation-simple'},
{include: '#annotation-attributes'}
]
},
'annotation-attributes': {
begin: '(?i)(^|\\s+)(\\@[a-z][a-z0-9#\\$-_%&]*)',
beginCaptures: {2: {name: 'storage.type.annotation.abl'}},
end: '(?=\\.)',
name: 'meta.declaration.annotation.abl',
patterns: [
{include: '#parens'},
{
captures: {1: {name: 'constant.other.key.abl'}},
match: '(?i)\\s*([a-z][a-z0-9#\\$-_%&]+)(?=[\\=\\s$])'
},
{include: '#string'},
{include: '#operator-no-space'},
{include: '#punctuation-comma'}
]
},
'annotation-simple': {
captures: {2: {name: 'storage.type.annotation.abl'}},
match: '(?i)(^|\\s*)(\\@[a-z][a-z0-9#\\$-_%&]*)\\s*(?=\\.)',
name: 'meta.declaration.annotation.abl'
},
'argument-reference': {
captures: {1: {name: 'support.other.argument.abl'}},
match:
'\\s*((\\{\\s*\\&[\\.\\w\\/-]+\\})|(\\{\\s*\\d+\\})|(\\{\\s*\\*\\}))\\s*'
},
'array-literal': {
begin: '\\[',
beginCaptures: {0: {name: 'meta.brace.square.abl'}},
end: '\\]',
endCaptures: {0: {name: 'meta.brace.square.abl'}},
name: 'meta.array.literal.abl',
patterns: [{include: '#expression'}, {include: '#punctuation-comma'}]
},
'array-use': {
begin: '\\[',
beginCaptures: {0: {name: 'meta.brace.square.abl'}},
end: '\\]',
endCaptures: {0: {name: 'meta.brace.square.abl'}},
name: 'meta.array.literal.abl',
patterns: [{include: '#expression'}, {include: '#punctuation-comma'}]
},
'as-type': {
begin: '(?i)\\s*(as)\\s*(class)?',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
end: '\\s*(\\.|\\,|\\s*)',
patterns: [
{include: '#primitive-type'},
{include: '#type-name-generic-progress'},
{include: '#type-name-progress'},
{include: '#type-name-generic'},
{include: '#type-name'}
]
},
'attribute-access': {begin: ':', end: '(?=:)|(?=\\s*)'},
'block-label': {
captures: {2: {name: 'meta.block.label.abl'}},
match: '(?i)^\\s*(([a-z][a-z0-9\\-\\_\\$]*):)\\s+'
},
'block-statement': {
begin: '(?i)(?<!end)\\s*(do|repeat|finally)\\s*',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '\\s*(?=:)|(?<=:)\\s*',
name: 'meta.block.abl',
patterns: [
{include: '#for-record'},
{include: '#preselect-phrase'},
{include: '#query-tuning-phrase'},
{include: '#operator'},
{include: '#from-to-by'},
{include: '#while-expression'},
{match: '(?i)\\s*(transaction)\\s*', name: 'keyword.other.abl'},
{include: '#branch-options'},
{include: '#frame-phrase'}
]
},
'branch-leave-next-retry-throw': {
captures: {
1: {name: 'separator.comma.abl'},
2: {name: 'keyword.other.abl'},
3: {name: 'meta.block.label.abl'}
},
match:
'(?i)\\s*(,)\\s*(leave|next|retry|throw)\\s*(?!on)([a-z0-9\\-\\_\\$]*)?\\s*',
name: 'meta.block.branch.abl'
},
'branch-options': {
name: 'meta.block.branch.abl',
patterns: [
{include: '#on-error-endkey-stop'},
{include: '#on-quit'},
{include: '#branch-leave-next-retry-throw'},
{include: '#branch-return-value-double'},
{include: '#branch-return-value-single'},
{include: '#branch-return-no-apply'},
{include: '#branch-return-error'},
{include: '#branch-return-error-expression'}
]
},
'branch-return-error-expression': {
begin: '(?i)\\s*(return)\\s+(error)\\s*',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
end: '(?=\\R)',
name: 'meta.block.branch.abl',
patterns: [
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.type.abl'}
},
match: '(?i)\\s*(new)\\s+(.*)\\s*\\('
},
{include: '#property-call'},
{include: '#expression'}
]
},
'branch-return-no-apply': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
match: '(?i)\\s*(return)\\s+(no-apply)\\s*',
name: 'meta.block.branch.abl'
},
'branch-return-value-double': {
begin: '(?i)\\s*(return)(\\s+(error))?\\s+(")',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'},
3: {name: 'punctuation.definition.string.begin.abl'}
},
end: '(")',
endCaptures: {1: {name: 'punctuation.definition.string.end.abl'}},
name: 'meta.block.branch.abl',
patterns: [{match: '~.', name: 'constant.character.escape.abl'}]
},
'branch-return-value-single': {
begin: "(?i)\\s*(return)(\\s+(error))?\\s+(')",
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'},
3: {name: 'punctuation.definition.string.begin.abl'}
},
end: "(')",
endCaptures: {1: {name: 'punctuation.definition.string.end.abl'}},
name: 'string.single.complex.abl',
patterns: [{match: '~.', name: 'constant.character.escape.abl'}]
},
'break-group': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'meta.brace.round.js'},
3: {name: 'storage.data.table.abl'},
4: {name: 'meta.brace.round.js'}
},
match:
'(?i)\\s*(first-of|first|last-of|last)\\s*(\\()\\s*([\\w\\-#$%]+\\.[\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*(\\))\\s*'
},
'buffer-for-table': {
captures: {
1: {name: 'storage.data.table.abl'},
2: {name: 'keyword.other.abl'},
4: {name: 'keyword.other.abl'},
5: {name: 'storage.data.table.abl'}
},
match:
'(?i)\\s*(?!do|repeat|for)([\\w\\-#$%]+)\\s+(for)\\s+((temp-table)\\s+)?([\\w\\-#$%]+)\\s*'
},
'code-block': {
patterns: [
{include: '#singlelinecomment'},
{include: '#multilinecomment'},
{include: '#string'},
{include: '#language-functions'},
{include: '#numeric'},
{include: '#constant'},
{include: '#operator'},
{include: '#include-file'},
{include: '#run-statement'},
{include: '#define'},
{include: '#block-statement'},
{include: '#end-block'},
{include: '#property-call'},
{include: '#abl-system-handles'},
{include: '#keywords'},
{include: '#variable-name'},
{include: '#type-reference'},
{include: '#method-call'},
{include: '#static-object-property-call'},
{include: '#function-call'},
{
captures: {1: {name: 'punctuation.terminator.abl'}},
match: '(\\.)\\s*$'
}
]
},
comment: {
patterns: [
{include: '#singlelinecomment'},
{include: '#multilinecomment'}
]
},
constant: {
match: '(?i)(?<=^|\\s|\\()(true|false|yes|no|\\?)(?!\\w|-)',
name: 'constant.language.abl'
},
'db-dot-table': {
captures: {1: {name: 'storage.data.table.abl'}},
match: '(?i)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*'
},
'db-dot-table-dot-field': {
captures: {1: {name: 'storage.data.table.abl'}},
match:
'(?i)(?<=^|\\s)(([\\w\\-#$%]+\\.)?([\\w\\-#$%]+\\.)([\\w\\-#$%]+)(\\[\\d+\\])?)'
},
decimals: {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'constant.numeric.source.abl'}
},
match: '(?i)\\s*(decimals)\\s((0x[0-9a-f]+)|([0-9]+)?)'
},
declarations: {patterns: [{include: '#define'}]},
define: {
begin: '(?i)\\s*(define|defin|defi|def)\\s*',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(\\.)',
endCaptures: {1: {name: 'punctuation.terminator.abl'}},
name: 'meta.define.abl',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\s*(new|global|glob|shared)\\s*'
},
{include: '#serializable'},
{include: '#access-modifier'},
{include: '#define-variable'},
{include: '#define-property'},
{include: '#property-accessor'},
{include: '#function-call'},
{include: '#array-literal'},
{include: '#define-field'},
{include: '#parameter-as'},
{include: '#define-stream'},
{include: '#define-buffer'},
{include: '#define-frame'},
{include: '#for-table'},
{include: '#buffer-for-table'},
{include: '#define-table'},
{include: '#define-like'},
{include: '#field-as-object'},
{include: '#extent'},
{include: '#decimals'},
{include: '#format-constant'},
{include: '#timestamp-constant'},
{include: '#constant'},
{include: '#numeric'},
{include: '#string'},
{include: '#dll-type'},
{include: '#primitive-type'},
{include: '#type-name-progress'},
{include: '#keywords'},
{include: '#comment'},
{include: '#label-variable'},
{include: '#type-name-generic-class'},
{include: '#type-name-generic'},
{include: '#type-name'}
]
},
'define-buffer': {
begin: '(?i)\\s*(buffer)\\s*',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?=\\.)',
patterns: [
{include: '#for-table'},
{include: '#buffer-for-table'},
{include: '#keywords'},
{include: '#comment'},
{include: '#string'}
]
},
'define-class': {
begin: '(?i)\\s*(class)\\s*',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '\\s*(:)\\s*',
endCaptures: {1: {name: 'punctuation.terminator.abl'}},
name: 'meta.define.class.abl',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match:
'(?i)\\s*(serializable|abstract|final|use-widget-pool|inherits|implements)\\s*'
},
{include: '#implements-type'},
{include: '#type-name-generic-progress'},
{include: '#type-name-generic'},
{include: '#type-name-comma-progress'},
{include: '#type-name-progress'},
{include: '#type-name-comma'},
{include: '#type-name'}
]
},
'define-enum': {
patterns: [
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.type.abl'},
3: {name: 'keyword.other.abl'},
4: {name: 'punctuation.terminator.abl'}
},
match: '(?i)(enum)\\s+([\\w\\#\\$\\%\\.]+)\\s*(flags)?\\s*(:)',
name: 'meta.define.enum.abl'
}
]
},
'define-field': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match: '(?i)\\s*(field)\\s+([\\w\\-#$%]+)\\s*'
},
'define-frame': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
match: '(?i)\\s*(frame)\\s*([a-z][a-z0-9#$\\-_%&]*)'
},
'define-interface': {
begin:
'(?i)\\s*(interface)\\s*([\\w\\#\\$\\%]+[\\w\\#\\$\\%\\.]*(\\s*<\\s*[\\w\\#\\$\\%\\.]+\\s*\\>)?)',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.type.abl'}
},
end: '\\s*(:)',
endCaptures: {1: {name: 'punctuation.terminator.abl'}},
name: 'meta.define.interface.abl',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\s*(inherits|implements)\\s*'
},
{include: '#implements-type'},
{include: '#type-name-comma'}
]
},
'define-like': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match: '(?i)\\s*(like|like-sequential)\\s+([\\w\\-#$%]+)\\s*'
},
'define-property': {
begin: '(?i)\\b(property|prop)\\b',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?i)\\s*(no-undo)|(?=private|public|protected|get|set)',
endCaptures: {1: {name: 'keyword.other.abl'}},
patterns: [
{include: '#property-as'},
{include: '#primitive-type'},
{include: '#extent'},
{include: '#decimals'},
{include: '#array-literal'},
{include: '#timestamp-constant'},
{include: '#numeric'},
{include: '#type-name-generic-progress'},
{include: '#type-name-progress'},
{include: '#keywords'},
{include: '#string'},
{include: '#type-name-generic'},
{include: '#type-name'}
]
},
'define-stream': {
captures: {
1: {name: 'keyword.other.abl'},
2: {patterns: [{include: '#variable-name'}]}
},
match: '(?i)\\s*(stream)\\s*([\\w\\-]+)',
name: 'meta.define.stream.abl'
},
'define-table': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match: '(?i)\\b(temp-table|like|before-table)\\s*([\\w\\-#$%]+)\\s*'
},
'define-type': {
patterns: [
{include: '#define-class'},
{include: '#define-interface'},
{include: '#define-enum'}
]
},
'define-variable': {
begin: '(?i)\\s*(variable|variabl|variab|varia|vari|var)\\s*',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?=\\.)|(?i)\\s*(no-undo)\\s*',
endCaptures: {1: {name: 'keyword.other.abl'}},
patterns: [
{include: '#variable-as'},
{include: '#primitive-type'},
{include: '#extent'},
{include: '#decimals'},
{include: '#array-literal'},
{include: '#timestamp-constant'},
{include: '#numeric'},
{include: '#type-name-generic-progress'},
{include: '#type-name-progress'},
{include: '#keywords'},
{include: '#string'},
{include: '#type-name-generic'},
{include: '#type-name'}
]
},
'define-variable-name': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
match:
'(?i)(var|vari|varia|variab|variabl|variable)\\s+([a-z][a-z0-9#$-_%&])+\\s*'
},
'dll-type': {
captures: {1: {name: 'storage.type.abl'}},
match:
'(?i)\\s*(byte|unsigned-short|short|unsigned-long|long|int64|float)\\s*'
},
'double-colon-field-name': {
captures: {1: {name: 'storage.data.table.abl'}},
match: '\\s*::([\\w\\-#$%]+)\\s*'
},
doublequotedstring: {
begin: '(")',
beginCaptures: {1: {name: 'punctuation.definition.string.begin.abl'}},
end: '(")',
endCaptures: {1: {name: 'punctuation.definition.string.end.abl'}},
name: 'string.double.complex.abl',
patterns: [{match: '~.', name: 'constant.character.escape.abl'}]
},
'end-block': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
match:
'(?i)\\s*(end)\\s+(CASE|CATCH|CLASS|CONSTRUCTOR|DESTRUCTOR|ENUM|FINALLY|FUNCTION|GET|INTERFACE|METHOD|PROCEDURE|SET|TRIGGERS)\\s*'
},
'end-function-procedure-method-block': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
match: '(?i)\\s*(end)\\s*(method|procedure|function)?\\s*(?=\\.)\\s*'
},
expression: {
patterns: [
{include: '#string'},
{include: '#timestamp-constant'},
{include: '#constant'},
{include: '#numeric'},
{include: '#variable-name'},
{include: '#double-colon-field-name'}
]
},
extent: {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'constant.numeric.source.abl'}
},
match: '(?i)\\s*(extent)\\s*((0x[0-9a-f]+)|([0-9]+)?)'
},
'field-as-object': {
captures: {1: {name: 'entity.name.type.abl'}},
match: '(?i)\\s*(progress\\.lang\\.object|object)\\s*'
},
'field-name': {
patterns: [
{
captures: {1: {name: 'storage.data.table.abl'}},
match: '\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?\\s*(\\[\\d+\\]))\\s*'
},
{
captures: {1: {name: 'storage.data.table.abl'}},
match: '\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*'
}
]
},
'fields-except-list': {
begin: '(?i)\\s*(fields|except)\\s*(\\()',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'meta.brace.round.js'}
},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
patterns: [{include: '#db-dot-table-dot-field'}, {include: '#field-name'}]
},
'find-record': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'},
3: {name: 'storage.data.table.abl'}
},
match:
'(?i)\\s*(find)\\s+(first|last|next|prev|current)?\\s*([\\w\\-#$%]+)\\s*'
},
'for-each-join': {
begin:
'(?i)(?<=,)\\s*((each|first|last)|([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?))\\s*',
beginCaptures: {
2: {name: 'keyword.other.abl'},
3: {name: 'storage.data.table.abl'}
},
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*',
patterns: [
{include: '#fields-except-list'},
{include: '#of-phrase'},
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match: '(?i)\\s*(of)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*'
},
{
captures: {1: {name: 'storage.data.table.abl'}},
match: '\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s*'
}
]
},
'for-each-table': {
beginCaptures: {1: {name: 'keyword.other.abl'}},
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*',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\s*(each|first|last|of)\\s*'
},
{include: '#fields-except-list'},
{include: '#of-phrase'},
{include: '#field-name'},
{include: '#db-dot-table'},
{include: '#db-dot-table-dot-field'}
]
},
'for-join': {
captures: {
2: {name: 'storage.data.table.abl'},
4: {name: 'keyword.other.abl'}
},
match: '(?i)(^|,)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s+(where)\\s*'
},
'for-record': {
captures: {
1: {name: 'keyword.other.abl'},
10: {name: 'storage.data.table.abl'},
11: {name: 'separator.comma.abl'},
12: {name: 'storage.data.table.abl'},
2: {name: 'storage.data.table.abl'},
3: {name: 'separator.comma.abl'},
4: {name: 'storage.data.table.abl'},
5: {name: 'separator.comma.abl'},
6: {name: 'storage.data.table.abl'},
7: {name: 'separator.comma.abl'},
8: {name: 'storage.data.table.abl'},
9: {name: 'separator.comma.abl'}
},
match:
'(?i)\\s*(for)\\s+([\\w\\-#$%]*)\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?\\s*(,)?\\s*([\\w\\-#$%]*)?'
},
'for-table': {
captures: {
1: {name: 'keyword.other.abl'},
3: {name: 'keyword.other.abl'},
4: {name: 'storage.data.table.abl'}
},
match: '(?i)\\s*(for)\\s+((temp-table)\\s+)?([\\w\\-#$%]+)\\s*'
},
'format-constant': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'constant.language.source.abl'}
},
match: '(?i)\\b(format)\\s+(9+\\/9+\\/9+)\\b'
},
'from-to-by': {
begin: '\\s*([\\w\\$\\-\\_\\%\\&]+)\\s+(=)\\s*',
beginCaptures: {
1: {name: 'variable.other.abl'},
2: {name: 'keyword.operator.source.abl'}
},
end: '(?=\\R)',
patterns: [
{match: '(?i)\\s+(to|by)\\s*', name: 'keyword.other'},
{include: '#numeric'},
{include: '#branch-options'}
]
},
'function-arguments': {
begin: '(?=\\()',
beginCaptures: {1: {name: 'meta.brace.round.js'}},
end: '(?=\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function.arguments.abl',
patterns: [
{include: '#parens'},
{include: '#constant'},
{include: '#type-reference'},
{include: '#expression'},
{include: '#property-call'},
{include: '#punctuation-comma'},
{include: '#static-object-property-call'},
{include: '#function-call'}
]
},
'function-parameter-definition': {
begin: '(\\()',
beginCaptures: {1: {name: 'meta.brace.round.js'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function.parameters',
patterns: [{include: '#parameter-definition'}]
},
'generic-types': {
patterns: [
{include: '#type-name-comma-progress'},
{include: '#type-name-comma'},
{include: '#type-name-generic-progress'},
{include: '#type-name-progress'},
{include: '#type-name-generic'},
{include: '#type-name'}
]
},
'get-class': {
begin: '(?i)\\s*(get-class)\\s*(\\()',
beginCaptures: {
1: {name: 'entity.name.function.abl'},
2: {name: 'meta.brace.round.js'}
},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#string'}, {include: '#type-names'}]
},
'global-scoped-define': {
begin: '(?i)(\\&scoped-define|\\&global-define)\\s*([\\.\\w\\\\/-]*)\\s*',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.function.preprocessor.abl'}
},
end: '(?=(?://|/\\*))|$',
name: 'meta.preprocessor.define.abl',
patterns: [{include: '#string'}]
},
'handle-attributes': {
patterns: [
{include: '#handle-attributes-A'},
{include: '#handle-attributes-B'},
{include: '#handle-attributes-C'},
{include: '#handle-attributes-D'},
{include: '#handle-attributes-E'},
{include: '#handle-attributes-F'},
{include: '#handle-attributes-G'},
{include: '#handle-attributes-H'},
{include: '#handle-attributes-I'},
{include: '#handle-attributes-K'},
{include: '#handle-attributes-L'},
{include: '#handle-attributes-M'},
{include: '#handle-attributes-N'},
{include: '#handle-attributes-O'},
{include: '#handle-attributes-P'},
{include: '#handle-attributes-Q'},
{include: '#handle-attributes-R'},
{include: '#handle-attributes-S'},
{include: '#handle-attributes-T'},
{include: '#handle-attributes-U'},
{include: '#handle-attributes-V'},
{include: '#handle-attributes-W'},
{include: '#handle-attributes-X'},
{include: '#handle-attributes-Y'}
]
},
'handle-attributes-A': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-B': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-C': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-D': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-E': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-F': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-G': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-H': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-I': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-K': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-L': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-M': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-N': {
captures: {1: {name: 'entity.name.function.abl'}},
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*'
},
'handle-attributes-O': {