@wooorm/starry-night
Version:
Syntax highlighting, like GitHub
1,317 lines (1,316 loc) • 131 kB
JavaScript
// 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.
/**
* @import {Grammar} from '@wooorm/starry-night'
*/
/** @type {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*(available|audit-enabled|asc|ambiguous|alias|add-interval|accum|absolute|absolut|absolu|absol|abso|abs)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-B': {
begin:
'(?i)\\s*(buffer-tenant-name|buffer-tenant-id|buffer-partition-id|buffer-group-name|buffer-group-id|box|base64-encode|base64-decode)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-C': {
begin:
'(?i)\\s*(current-value|current-result-row|current-language|current-languag|current-langua|current-langu|current-lang|current-changed|count-of|connected|compare|codepage-convert|chr|cast|caps|can-set|can-query|can-find|can-do)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-D': {
begin:
'(?i)\\s*(dynamic-property|dynamic-next-value|dynamic-invoke|dynamic-function|dynamic-functio|dynamic-functi|dynamic-funct|dynamic-func|dynamic-enum|dynamic-current-value|dynamic-cast|defined|decrypt|decimal|decima|decim|deci|dec|dbversion|dbversio|dbversi|dbvers|dbtype|dbtaskid|dbrestrictions|dbrestriction|dbrestrictio|dbrestricti|dbrestrict|dbrestric|dbrestri|dbrestr|dbrest|dbparam|dbname|dbcollation|dbcodepage|db-remote-host|day|datetime-tz|datetime|date|dataservers|data-source-modified)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-E': {
begin:
'(?i)\\s*(extent|exp|etime|error|entry|entered|encrypt|encode)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-F': {
begin:
'(?i)\\s*(frame-value|frame-valu|frame-val|frame-row|frame-name|frame-line|frame-index|frame-inde|frame-file|frame-field|frame-down|frame-db|frame-col|first-of|first|fill)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-G': {
begin:
'(?i)\\s*(guid|go-pending|go-pendin|go-pendi|go-pend|get-unsigned-short|get-unsigned-long|get-string|get-size|get-short|get-pointer-value|get-long|get-int64|get-float|get-effective-tenant-name|get-effective-tenant-id|get-double|get-db-client|get-collations|get-collation|get-collatio|get-collati|get-collat|get-colla|get-coll|get-codepages|get-codepage|get-class|get-bytes|get-byte-order|get-byte|get-bits|generate-uuid|generate-random-key|generate-pbe-salt|generate-pbe-key|gateways|gateway)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-H': {
begin: '(?i)\\s*(hex-encode|hex-decode|hash-code|handle)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-I': {
begin:
'(?i)\\s*(iso-date|is-lead-byte|is-db-multi-tenant|is-column-codepage|is-codepage-fixed|is-attr-space|is-attr-spac|is-attr-spa|is-attr-sp|is-attr-s|is-attr-|is-attr|interval|integer|intege|integ|inte|int64|int|input|index)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-K': {
begin:
'(?i)\\s*(keyword-all|keyword|keylabel|keyfunction|keyfunctio|keyfuncti|keyfunct|keyfunc|keycode|kblabel)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-L': {
begin:
'(?i)\\s*(lower|lookup|logical|log|locked|list-widgets|list-set-attrs|list-query-attrs|list-events|line-counter|line-counte|line-count|library|length|left-trim|ldbname|lc|lastkey|last-of|last)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-M': {
begin:
'(?i)\\s*(mtime|month|minimum|minimu|minim|mini|min|message-lines|message-digest|member|md5-digest|maximum)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-N': {
begin:
'(?i)\\s*(num-results|num-entries|num-dbs|num-aliases|num-aliase|num-alias|num-alia|num-ali|now|not entered|normalize|next-value|new)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-O': {
begin: '(?i)\\s*(os-getenv|os-error|os-drives|os-drive|opsys)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-P': {
begin:
'(?i)\\s*(proversion|proversio|proversi|provers|propath|promsgs|progress|program-name|process-architecture|proc-status|proc-statu|proc-stat|proc-sta|proc-st|proc-handle|proc-handl|proc-hand|proc-han|proc-ha|pdbname|page-size|page-number|page-numbe|page-numb|page-num)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-Q': {
begin: '(?i)\\s*(quoter|query-off-end)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-R': {
begin:
'(?i)\\s*(rowid|row-state|round|right-trim|rgb-value|rgb-valu|rgb-val|rgb-va|rgb-v|return-value|return|retry|replace|relation-fields|relation-field|relation-fiel|relation-fie|relation-fi|rejected|record-length|recid|raw|random|r-index)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-S': {
begin:
'(?i)\\s*(super|substring|substrin|substri|substr|substitute|substitut|substitu|substit|substi|subst|string|ssl-server-name|sqrt|skip|sha1-digest|setuserid|setuseri|setuser|set-size|set-effective-tenant|set-db-client|seek|search|sdbname|screen-lines)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-T': {
begin:
'(?i)\\s*(type-of|truncate|truncat|trunca|trunc|trim|transaction|today|to-rowid|timezone|time|this-object|terminal|tenant-name-to-id|tenant-name|tenant-id)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-U': {
begin: '(?i)\\s*(userid|unbox)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-V': {
begin: '(?i)\\s*(value|valid-object|valid-handle|valid-event)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-W': {
begin:
'(?i)\\s*(widget-handle|widget-handl|widget-hand|widget-han|widget-ha|widget-h|weekday)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-functions-Y': {
begin: '(?i)\\s*(year)\\s*(?=\\()',
beginCaptures: {1: {name: 'support.function.abl'}},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
name: 'meta.function-call.abl',
patterns: [{include: '#function-arguments'}]
},
'abl-system-handles': {
captures: {
1: {name: 'variable.language.abl'},
2: {name: 'punctuation.separator.colon.abl'}
},
match:
'(?i)\\b(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)\\b(?![\\#\\$\\-\\_\\%\\&])'
},
'access-modifier': {
captures: {1: {name: 'keyword.other.abl'}},
match:
'(?i)\\s*(package-private|private|package-protected|protected|public|static|override|abstract|final)\\b'
},
'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: '(^|\\s+)(\\@[[:alpha:]][\\w#\\$-%&]*)\\s*(?=\\()',
beginCaptures: {2: {name: 'entity.name.tag.abl'}},
end: '(?=\\.)',
name: 'meta.declaration.annotation.abl',
patterns: [
{include: '#parens'},
{
captures: {1: {name: 'entity.other.attribute-name.abl'}},
match: '\\s*([[:alpha:]][\\w#\\$-%&]+)(?=[\\=\\s$])'
},
{include: '#string'},
{include: '#operator-no-space'},
{include: '#punctuation-comma'}
]
},
'annotation-simple': {
captures: {2: {name: 'entity.name.tag.abl'}},
match: '(^|\\s*)(\\@[[:alpha:]][\\w#\\$-%&]*)\\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: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\s+(for)\\s+'
},
{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-names'}]
},
'attribute-access': {begin: ':', end: '(?=:)|(?=\\s*)'},
'block-label': {
captures: {
2: {name: 'entity.name.label.abl'},
3: {name: 'punctuation.terminator.abl'}
},
match:
'(?i)^\\s*(?!(transaction|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share):)([\\w\\-\\$\\#]+)(:)\\s'
},
'block-statement': {
begin: '(?i)(?<!end)\\s*(do|repeat|finally)\\b',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '\\s*(?=:)|(?<=:)|(?=\\.)|(?<=\\.)\\s*',
name: 'meta.block.abl',
patterns: [
{include: '#comment'},
{include: '#for-record'},
{include: '#operator'},
{include: '#from-to-by'},
{include: '#while-expression'},
{
match: '(?i)\\b(transaction|stop-after)\\b',
name: 'keyword.other.abl'
},
{include: '#numeric'},
{include: '#type-member-call'},
{include: '#language-functions'},
{include: '#abl-functions'},
{include: '#punctuation-comma'},
{include: '#punctuation-colon'},
{include: '#branch-options'},
{include: '#keywords'},
{include: '#expression'},
{include: '#preprocessors'}
]
},
'block-undo-leave-next-retry': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.label.abl'}
},
match:
'(?i)\\s*(?<!,)\\s*(leave|next|retry|undo)\\s*(?!on)([\\w\\-\\$]*)?\\s*'
},
'branch-leave-next-retry-throw': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.label.abl'}
},
match:
'(?i)\\s*(?<=,)\\s*(leave|next|retry|throw)\\s*(?!on)([\\w\\-\\$]*)?\\s*'
},
'branch-options': {
patterns: [
{include: '#on-error-endkey-stop'},
{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-expression'},
{include: '#punctuation-comma'}
]
},
'branch-return-error-expression': {
begin: '(?i)\\s*(return)\\s+(error)\\s*',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
end: '(?=\\:|$)',
patterns: [
{include: '#new-class'},
{include: '#function-arguments'},
{include: '#parens'},
{include: '#property-call'},
{include: '#preprocessors'},
{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*'
},
'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'}},
patterns: [{include: '#escape-char'}]
},
'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: [{include: '#escape-char'}]
},
'break-by': {
captures: {
2: {name: 'keyword.other.abl'},
3: {name: 'keyword.other.abl'},
4: {name: 'storage.data.table.abl'}
},
match:
'(?i)\\s*((break)\\s+)?(by)\\s+(([\\w\\-#$%]+\\.)?([\\w\\-#$%]+\\.)([\\w\\-#$%]+)(\\[\\d+\\])?)\\b'
},
'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*'
},
'buffer-name': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match: '(?i)\\b(buffer)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)'
},
'can-find': {
begin: '(?i)\\s*(can-find)\\s*(\\()',
beginCaptures: {
1: {name: 'support.function.abl'},
2: {name: 'meta.brace.round.js'}
},
end: '(?i)\\b(?=\\)|where|no-lock|share-lock|using|no-prefetch|no-wait)\\s*',
patterns: [
{include: '#parens'},
{include: '#comment'},
{include: '#string'},
{include: '#numeric'},
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\b(first|last)\\b'
},
{include: '#use-index'},
{include: '#of-phrase'},
{include: '#db-dot-table'},
{include: '#db-dot-table-dot-field'}
]
},
'code-block': {
patterns: [
{include: '#record-buffer-functions'},
{include: '#can-find'},
{include: '#comment'},
{include: '#break-group'},
{include: '#block-undo-leave-next-retry'},
{include: '#operator'},
{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: '#new-record'},
{include: '#type-reference'},
{include: '#abl-functions'},
{include: '#abl-system-handles'},
{include: '#handle-methods'},
{include: '#handle-attributes'},
{include: '#keywords'},
{include: '#variable-name'},
{include: '#static-object-property-call'},
{include: '#punctuation-period'},
{include: '#punctuation-colon'}
]
},
comment: {
patterns: [
{include: '#singlelinecomment'},
{include: '#multilinecomment'}
]
},
constant: {
match: '(?i)(?<=^|\\s|\\()(true|false|yes|no|\\?)(?!\\w|-)',
name: 'constant.language.abl'
},
'copy-lob': {
begin: '(?i)\\b(copy-lob)\\b',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?=\\.)',
patterns: [{include: '#code-block'}]
},
'create-buffer': {
begin: '(?i)(create)\\s+(buffer)\\b',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'}
},
end: '(?i)(\\b(buffer-name|in)\\b)|(?=\\.)',
endCaptures: {1: {name: 'keyword.other.abl'}},
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\s*(for|table)\\s*'
},
{include: '#define-table'},
{include: '#buffer-name'},
{include: '#temp-table-name'},
{include: '#expression'},
{include: '#keywords'},
{include: '#string'},
{include: '#comment'},
{include: '#handle-attributes'},
{include: '#variable-name'}
]
},
'db-dot-table': {
captures: {1: {name: 'storage.data.table.abl'}},
match: '(?i)\\b([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b'
},
'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)?[[:xdigit:]]+)?'
},
declarations: {patterns: [{include: '#define'}]},
define: {
begin: '(?i)\\s*(define|defin|defi|def)\\b',
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-enum-member'},
{include: '#define-variable'},
{include: '#define-parameter'},
{include: '#define-button'},
{include: '#define-dataset'},
{include: '#define-query'},
{include: '#define-browse'},
{include: '#fields-except-list'},
{include: '#define-event'},
{include: '#define-property'},
{include: '#property-accessor'},
{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-index'},
{include: '#define-like'},
{include: '#field-as-object'},
{include: '#preprocessors'},
{include: '#extent'},
{include: '#decimals'},
{include: '#format-constant'},
{include: '#timestamp-constant'},
{include: '#constant'},
{include: '#numeric'},
{include: '#string'},
{include: '#primitive-type'},
{include: '#dll-type'},
{include: '#abl-system-handles'},
{include: '#property-call'},
{include: '#handle-attributes'},
{include: '#handle-methods'},
{include: '#abl-functions'},
{include: '#function-parameter-definition'},
{include: '#keywords'},
{include: '#comment'},
{include: '#label-variable'},
{include: '#type-names'}
]
},
'define-browse': {
begin: '(?i)\\b(browse)\\s+([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\s*',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
end: '(?i)\\b(?=query)\\b'
},
'define-buffer': {
begin: '(?i)\\s*(buffer)\\b(?![\\#\\$\\-\\_\\%\\&])',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?=\\.)',
patterns: [
{include: '#for-table'},
{include: '#buffer-for-table'},
{include: '#keywords'},
{include: '#comment'},
{include: '#string'}
]
},
'define-button': {
begin: '(?i)\\s*(button)\\s+([[:alpha:]][\\w#$\\-%&]*)',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
end: '(?=\\.)',
patterns: [
{include: '#comment'},
{include: '#string'},
{include: '#from-x-and-y'},
{include: '#numeric'},
{include: '#keywords'},
{include: '#expression'}
]
},
'define-class': {
begin:
'(?i)\\b(?<![\\#\\$\\-\\_\\%\\&])(class)\\b(?![\\#\\$\\-\\_\\%\\&])',
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: '#type-names'},
{include: '#punctuation-comma'},
{include: '#comment'}
]
},
'define-dataset': {
begin: '(?i)\\b(dataset)\\s+([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\b',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.dataset.abl'}
},
end: '(?=\\.)',
patterns: [
{include: '#parens'},
{include: '#punctuation-comma'},
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.dataset.abl'}
},
match:
'(?i)\\b(data-relation|parent-id-relation)\\s*([[:alpha:]][\\w#$\\-\\%\\&]+)'
},
{
captures: {1: {name: 'support.function.abl'}},
match: '(?i)\\b(relation-fields)\\b'
},
{include: '#keywords'},
{include: '#preprocessors'},
{include: '#db-dot-table'},
{include: '#comment'},
{include: '#string'}
]
},
'define-enum-member': {
begin: '(?i)\\b(enum)\\b',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?=\\.)',
patterns: [
{include: '#comment'},
{include: '#operator'},
{include: '#numeric'},
{
captures: {1: {name: 'entity.name.function.abl'}},
match: '\\b([\\w\\#\\$\\%]+)\\b'
}
]
},
'define-enum-type': {
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)\\b(enum)\\s+([\\w\\#\\$\\%\\.]+)\\s*(flags)?\\s*(:)',
name: 'meta.define.enum.abl'
}
]
},
'define-event': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.function.abl'}
},
match: '(?i)\\b(event)\\s+([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\b'
},
'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*([[:alpha:]][\\w#$\\-%&]*)'
},
'define-index': {
begin: '(?i)\\s*(index)\\s+([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
end: '(?i)(?=\\bindex\\b|\\.)',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match:
'(?i)\\b(AS|IS|UNIQUE|PRIMARY|WORD-INDEX|ASCENDING|DESCENDING)\\b'
},
{
captures: {1: {name: 'storage.data.table.abl'}},
match: '\\b([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\b'
}
]
},
'define-interface': {
begin:
'(?i)\\b(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: '#type-names'},
{include: '#punctuation-comma'}
]
},
'define-like': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match:
'(?i)\\s*(like|like-sequential)\\s+(([\\w\\-#$%]+\\.)?([\\w\\-#$%]+\\.)?([\\w\\-#$%]+))'
},
'define-parameter': {
begin: '(?i)\\b(parameter|paramete|paramet|parame|param)\\b',
beginCaptures: {1: {name: 'keyword.other.abl'}},
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',
patterns: [
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'},
3: {name: 'storage.data.table.abl'}
},
match:
'(?i)\\b(table)\\s+(for)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b'
},
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
match:
'(?i)\\b(table-handle|dataset-handle)\\s+([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\b'
},
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'keyword.other.abl'},
3: {name: 'storage.data.dataset.abl'}
},
match:
'(?i)\\b(dataset)\\s+(for)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b'
},
{include: '#parameter-as'},
{include: '#keywords'},
{include: '#expression'}
]
},
'define-property': {
begin: '(?i)\\b(property|prop)\\b',
beginCaptures: {1: {name: 'keyword.other.abl'}},
end: '(?i)\\s*(?=get|set)',
patterns: [
{include: '#property-as'},
{include: '#comment'},
{include: '#primitive-type'},
{include: '#extent'},
{include: '#decimals'},
{include: '#array-literal'},
{include: '#timestamp-constant'},
{include: '#numeric'},
{include: '#keywords'},
{include: '#string'},
{include: '#type-names'}
]
},
'define-query': {
begin: '(?i)\\b(query)\\s+([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\s*',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
end: '(?i)\\b(?=for|display|share-lock|no-lock|exclusive-lock)\\b'
},
'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|before-table)\\s*([\\w\\-#$%]+)\\s*'
},
'define-type': {
patterns: [
{include: '#define-class'},
{include: '#define-interface'},
{include: '#define-enum-type'}
]
},
'define-variable': {
begin: '(?i)\\s*(variable|variabl|variab|varia|vari|var)\\s*',
beginCaptures: {1: {name: 'keyword.other.abl'}},
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',
endCaptures: {1: {name: 'keyword.other.abl'}},
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\b(class)\\b'
},
{include: '#variable-as'},
{include: '#variable-like'},
{include: '#primitive-type'},
{include: '#define-like'},
{include: '#type-names'},
{include: '#string'}
]
},
'define-variable-name': {
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'variable.other.abl'}
},
match:
'(?i)(variable|variabl|variab|varia|vari|var)\\s+([[:alpha:]][\\w#$-%&])+\\s*'
},
'dll-type': {
captures: {1: {name: 'storage.type.abl'}},
match:
'(?i)\\b(byte|unsigned-short|short|unsigned-long|long|int64|float)\\b'
},
'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: '(?i)(")(:[L|R|T|C|U]\\d*\\b)?',
endCaptures: {
1: {name: 'punctuation.definition.string.end.abl'},
2: {name: 'support.other.abl'}
},
name: 'string.double.complex.abl',
patterns: [{include: '#escape-char'}]
},
'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*'
},
'escape-char': {match: '~.', name: 'constant.character.escape.abl'},
'event-un-subscribe': {
begin: '(?i)(:)(unsubscribe|subscribe)\\s*(\\()',
beginCaptures: {
1: {name: 'punctuation.separator.colon.abl'},
2: {name: 'entity.name.function.abl'},
3: {name: 'meta.brace.round.js'}
},
end: '(\\))',
endCaptures: {1: {name: 'meta.brace.round.js'}},
patterns: [
{
captures: {
1: {name: 'entity.name.type.abl'},
3: {name: 'punctuation.separator.colon.abl'}
},
match: '\\s*([\\w\\#\\$\\%\\-]+(\\.[\\w\\#\\$\\%\\-]+)+)\\s*(:)'
},
{
captures: {
1: {name: 'variable.other.abl'},
3: {name: 'punctuation.separator.comma.abl'},
4: {name: 'punctuation.separator.colon.abl'}
},
match: '\\s*([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\s*((,)|(:))\\s*'
},
{
captures: {1: {name: 'entity.name.function.abl'}},
match: '\\s*([[:alpha:]][\\w\\#\\$\\-\\%\\&]*)\\s*'
},
{include: '#string'}
]
},
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)?[[:xdigit:]]+)?'
},
'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)\\s*',
beginCaptures: {
1: {name: 'keyword.other.abl'},
3: {name: 'storage.data.table.abl'}
},
end: '(?i)\\s*(?=where|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share|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|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction|,|:|on)\\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: {1: {name: 'storage.data.table.abl'}},
match:
'(?i)(?<=,|^)\\s*([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\s+(?=where|no-lock|exclusive-lock|exclusive-loc|exclusive-lo|exclusive-l|share-lock|share-loc|share-lo|share-|share|tenant-where|use-index|table-scan|using|no-prefetch|left|outer-join|break|by|transaction)\\s*'
},
'for-record': {
captures: {
1: {name: 'keyword.other.abl'},
10: {name: 'storage.data.table.abl'},
11: {name: 'punctuation.separator.comma.abl'},
12: {name: 'storage.data.table.abl'},
2: {name: 'storage.data.table.abl'},
3: {name: 'punctuation.separator.comma.abl'},
4: {name: 'storage.data.table.abl'},
5: {name: 'punctuation.separator.comma.abl'},
6: {name: 'storage.data.table.abl'},
7: {name: 'punctuation.separator.comma.abl'},
8: {name: 'storage.data.table.abl'},
9: {name: 'punctuation.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: '(?i)(?=transaction|on|\\:|with|while)',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\s+(to|by)\\s*'
},
{include: '#numeric'},
{include: '#branch-options'},
{include: '#abl-functions'},
{include: '#db-dot-table-dot-field'},
{include: '#expression'}
]
},
'from-x-and-y': {
captures: {
1: {name: 'keyword.other.abl'},
12: {name: 'constant.numeric.source.abl'},
2: {name: 'keyword.other.abl'},
6: {name: 'constant.numeric.source.abl'},
8: {name: 'keyword.other.abl'}
},
match:
'(?i)\\b(from)\\s+(X)\\s+((0(x)[[[:xdigit:]]]+)|(\\-?[[[:digit:]]]+(\\.[[[:digit:]]]+)?))\\s+(y)\\s+((0(x)[[[:xdigit:]]]+)|(\\-?[[[:digit:]]]+(\\.[[[:digit:]]]+)?))\\s+ '
},
'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: '#function-arguments-no-parens'}
]
},
'function-arguments-no-parens': {
name: 'meta.function.arguments.abl',
patterns: [
{
captures: {1: {name: 'keyword.other.abl'}},
match:
'(?i)\\s*(input-output|input-outpu|input-outp|input-out|input-ou|input-o|output|input|table-handle|dataset-handle|APPEND|BY-VALUE|BY-REFERENCE|BIND)\\b(?![\\#\\$\\-\\_\\%\\&])'
},
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.dataset.abl'}
},
match: '(?i)\\b(dataset)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b'
},
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'storage.data.table.abl'}
},
match:
'(?i)\\b(temp-table|table|buffer)\\s+([\\w\\-#$%]+(\\.[\\w\\-#$%]+)?)\\b'
},
{include: '#constant'},
{include: '#type-reference'},
{include: '#db-dot-table-dot-field'},
{include: '#abl-system-handles'},
{include: '#can-find'},
{include: '#language-functions'},
{include: '#abl-functions'},
{include: '#handle-attributes'},
{include: '#handle-methods'},
{include: '#type-member-call'},
{include: '#expression'},
{include: '#comment'},
{include: '#punctuation-comma'},
{include: '#preprocessors'}
]
},
'function-definition': {
begin: '(?i)\\b(function)\\s+([[:alnum:]][\\w#$\\-%&]+)\\b',
beginCaptures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.function.abl'}
},
end: '(\\.|\\:)',
endCaptures: {1: {name: 'punctuation.terminator.abl'}},
name: 'meta.define.function.abl',
patterns: [
{
captures: {
1: {name: 'keyword.other.abl'},
2: {name: 'entity.name.function.abl'}
},
match: '(?i)\\b(map|to)\\s+(?!to\\s+)([[:alpha:]][\\w#$\\-%&]+)\\b'
},
{
captures: {1: {name: 'keyword.other.abl'}},
match: '(?i)\\b(returns|private|class|extent|in|super|forward|map)\\b'
},
{include: '#function-parameter-definition'},
{include: '#parens'},
{
begin: '(?i)(?<=\\)|in)',
end: '(?=(\\.|\\:)\\s)',
patterns: [
{include: '#keywords'},
{include: '#type-member-call'},
{include: '#variable-name'},
{include: '#comment'},
{include: '#string'},
{include: '#preprocessors'}
]
},
{include: '#primitive-type'},
{include: '#type-name'},
{include: '#keywords'},
{include: '#comment'},
{include: '#preprocessors'}
]
},
'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'}]
},
'get-class': {
begin: '(?i)\\s*(get-class)\\s*(\\()',
beginCaptures: {
1: {name: 'support.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: 'punctuation.separator.colon.abl'},
2: {name: 'entity.name.function.abl'}
},
match:
'(?i)(:)(available-formats|available|availabl|availab|availa|avail|auto-zap|auto-za|auto-z|auto-validate|auto-validat|auto-valida|auto-valid|auto-vali|auto-val|auto-synchronize|auto-return|auto-retur|auto-retu|auto-ret|auto-resize|auto-indent|auto-inden|auto-inde|auto-ind|auto-go|auto-end-key|auto-delete-xml|auto-delete|auto-completion|auto-completio|auto-completi|auto-complet|auto-comple|auto-compl|auto-comp|audit-event-context|attribute-names|attr-space|attr-spac|attr-spa|attr-sp|attr-s|attr-|attr|attached-pairlist|asynchronous|async-request-handle|async-request-count|appserver-userid|appserver-password|appserver-info|appl-context-id|appl-alert-boxes|appl-alert-boxe|appl-alert-box|appl-alert-bo|appl-alert-b|appl-alert-|appl-alert|ambiguous|ambiguou|ambiguo|ambigu|ambig|always-on-top|allow-prev-deserialization|allow-column-searching|after-table|after-rowid|after-buffer|adm-data|actor|active|accelerator)\\b(?![\\#\\$\\-\\_\\%\\&])'
},
'handle-attributes-B': {
captures: {
1: {name: 'punctuation.separator.colon.abl'},
2: {name: 'entity.name.function.abl'}
},
match:
'(?i)(:)(bytes-written|bytes-read|buffer-tenant-name|buffer-tenant-id|buffer-partition-id|buffer-name|buffer-nam|buffer-na|buffer-n|buffer-lines|buffer-handle|buffer-group-name|buffer-group-id|buffer-field|buffer-chars|box-selectable|box-selectabl|box-selectab|box-selecta|box-select|box|border-top-pixels|border-top-pixel|border-top-pixe|border-top-pix|border-top-pi|border-top-p|border-top-chars|border-top-char|border-top-cha|border-top-ch|border-top-c|border-right-pixels|border-right-pixel|border-right-pixe|border-right-pix|border-right-pi|border-right-p|border-right-chars|border-right-char|border-right-cha|border-right-ch|border-right-c|border-left-pixels|border-left-pixel|border-left-pixe|border-left-pix|border-left-pi|border-left-p|border-left-chars|border-left-char|border-left-cha|border-left-ch|border-left-c|border-bottom-pixels|border-bottom-pi