// This is a TextMate grammar distributed by `starry-night`. // This grammar is developed at // // and licensed `mit`. // See 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-function-variable-arg': { begin: '(?i)\\s*(set-size)\\s*(?=\\()', beginCaptures: {1: {name: 'support.function.abl'}}, end: '(\\))', endCaptures: {1: {name: 'meta.brace.round.js'}}, name: 'meta.function-call.abl', patterns: [ {include: '#parens'}, {include: '#type-member-call'}, {include: '#variable-name'} ] }, '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*(a(?:bsolute?|bsolu?|bso?|ccumulate?|ccumula?|ccumu?|dd-interval|lias|mbiguous?|mbiguo?|mbig|scending?|scendi?|scen?|sc|udit-enabled|vailable?|vailab?|vail))\\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*(b(?:ase64-decode|ase64-encode|ox|uffer-group-id|uffer-group-name|uffer-partition-id|uffer-tenant-id|uffer-tenant-name))\\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*(c(?:an-do|an-find|an-query|an-set|aps|ast|hr|odepage-convert|ompares?|onnected|ount-of|urrent-changed|urrent-language?|urrent-langua?|urrent-lang|urrent-result-row|urrent-value))\\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*(d(?:ata-source-modified|ataservers|ate|atetime|atetime-tz|ay|b-remote-host|bcodepage|bcollation|bname|bparam|brestrictions?|brestrictio?|brestrict?|brestri?|brest|btaskid|btype|bversion?|bversi?|ecimal?|ecim?|ec|ecrypt|efined|ynamic-cast|ynamic-current-value|ynamic-enum|ynamic-function?|ynamic-functi?|ynamic-func|ynamic-invoke|ynamic-next-value|ynamic-property))\\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*(e(?:ncode|ncrypt|ntered|ntry|rror|time|xp|xtent))\\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*(f(?:ill|irst|irst-of|rame-col|rame-db|rame-down|rame-field|rame-file|rame-index?|rame-line|rame-name|rame-row|rame-value?|rame-val))\\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*(g(?:ateways?|enerate-pbe-key|enerate-pbe-salt|enerate-random-key|enerate-uuid|et-bits|et-byte|et-byte-order|et-bytes|et-class|et-codepages?|et-codepages?|et-collations??|et-collation?|et-collati?|et-colla?|et-db-client|et-double|et-effective-tenant-id|et-effective-tenant-name|et-float|et-int64|et-long|et-pointer-value|et-short|et-size|et-string|et-unsigned-long|et-unsigned-short|o-pending?|o-pendi?|uid))\\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*(h(?:andle|ash-code|ex-decode|ex-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-I': { begin: '(?i)\\s*(i(?:ndex|nput|nt64|nteger?|nteg?|nt|nterval|s-attr-space?|s-attr-spa?|s-attr-s?|s-attr|s-codepage-fixed|s-column-codepage|s-db-multi-tenant|s-lead-byte|so-date))\\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*(k(?:blabel|eycode|eyfunction?|eyfuncti?|eyfunc|eylabel|eyword|eyword-all))\\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*(l(?:ast|ast-of|astkey|c|dbname|eft-trim|ength|ibrary|ine-counter?|ine-count|ist-events|ist-query-attrs|ist-set-attrs|ist-widgets|ocked|og|ogical?|ogic?|og?|ookup|ower))\\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*(m(?:aximum|d5-digest|ember|essage-digest|essage-lines|inimum?|inim?|in|onth|time))\\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*(n(?:ew|ext-value|ormalize|ot|ow|um-aliases?|um-alias?|um-ali|um-dbs|um-entries|um-results))\\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*(o(?:psys|s-dir|s-drives?|s-error|s-getenv))\\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*(p(?:age-number?|age-numb?|age-size|dbname|roc-handle?|roc-hand?|roc-ha|roc-status?|roc-stat?|roc-st|rocess-architecture|rogram-name|rogress|romsgs|ropath|roversion?|roversi?))\\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*(qu(?:ery-off-end|oter))\\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*(r(?:-index|andom|aw|ecid|ecord-length?|ecord-leng?|ejected|elation-fields?|elation-fiel?|elation-fi|eplace|etry|eturn|eturn-value?|eturn-val|gb-value?|gb-val?|gb-v|ight-trim|ound|ow-state|owid))\\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*(s(?:creen-lines|dbname|earch|eek|et-db-client|et-effective-tenant|et-size|etuserid?|etuser|ha1-digest|kip|pace|qrt|sl-server-name|tring|ubstitute?|ubstitu?|ubsti?|ubstring?|ubstri?|uper))\\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*(t(?:enant-id|enant-name|enant-name-to-id|erminal|his-object|ime|imezone|o-rowid|oday|ransaction?|ransacti?|rim|runcate?|runca?|ype-of))\\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*(u(?:nbox|serid))\\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*(val(?:id-event|id-handle|id-object|ue))\\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*(w(?:eekday|idget-handle?|idget-hand?|idget-ha?))\\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(active-window|audit-control|audit-policy|clipboard|codebase-locator|color-table|compiler|current-window|debugger|default-window|dslog-manager|(error-stat(?:us|u)?)|(file-info(?:rmation|rmatio|rmati|rmat|rma|rm|r)?)|font-table|(last-even(?:t)?)|log-manager|profiler|(rcode-info(?:rmation|rmatio|rmati|rmat|rma|rm|r)?)|security-policy|self|session|source-procedure|super|target-procedure|this-object|this-procedure|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)\\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: '(^|\\s+)(\\@[a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\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*([a-zA-Z_][a-zA-Z0-9_#$\\-%&]+)(?=[\\=\\s$])' }, {include: '#string'}, {include: '#operator-no-space'}, {include: '#punctuation-comma'} ] }, 'annotation-simple': { captures: {2: {name: 'entity.name.tag.abl'}}, match: '(^|\\s*)(\\@[a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\s*(?=\\.)', name: 'meta.declaration.annotation.abl' }, 'argument-reference': { captures: { 1: {name: 'meta.argument.abl'}, 2: {name: 'punctuation.section.abl'}, 3: {name: 'support.other.argument.abl'}, 4: {name: 'punctuation.section.abl'} }, match: '\\s*(({)([0-9]+|\\*\\s*)(}))\\s*' }, 'array-literal': { begin: '\\[', beginCaptures: { 0: {name: 'punctuation.definition.bracket.square.begin.abl'} }, end: '\\]', endCaptures: {0: {name: 'punctuation.definition.bracket.square.end.abl'}}, name: 'meta.array.literal.abl', patterns: [ { captures: {1: {name: 'keyword.other.abl'}}, match: '(?i)\\s+(for)\\s+' }, {include: '#expression'}, {include: '#preprocessors'}, {include: '#comment'}, {include: '#punctuation-comma'} ] }, 'array-use': { begin: '\\[', beginCaptures: { 0: {name: 'punctuation.definition.bracket.square.begin.abl'} }, end: '\\]', endCaptures: {0: {name: 'punctuation.definition.bracket.square.end.abl'}}, name: 'meta.array.literal.abl', patterns: [{include: '#expression'}, {include: '#punctuation-comma'}] }, 'as-type': { begin: '\\s*([Aa][Ss])\\s*([Cc][Ll][Aa][Ss]{2})?', beginCaptures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'keyword.other.abl'} }, end: '\\s*(\\.|\\,|\\s*)', patterns: [{include: '#primitive-type'}, {include: '#type-names'}] }, 'assign-statment': { patterns: [ {include: '#abl-functions'}, {include: '#language-functions'}, {include: '#string'}, {include: '#expression'}, {include: '#argument-reference'}, {include: '#preprocessors'}, {include: '#attribute-access'}, {include: '#buffer-name'}, {include: '#can-find'}, {include: '#abl-system-handles'}, {include: '#db-dot-table-dot-field'}, {include: '#extent'}, {include: '#function-arguments'}, {include: '#get-class'}, {include: '#handle-attributes'}, {include: '#handle-methods'}, {include: '#if-then'}, {include: '#operator'}, {include: '#type-member-call'}, {include: '#include-file'}, {include: '#new-record'}, {include: '#new-class'}, {include: '#record-buffer-functions'}, {include: '#rowid-function'}, {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*(?!((?:transact(?:ion|io|i)?)|no-lock|(?:exclusive-l(?:ock|oc|o)?)|(?:share(?:-lock|-loc|-lo|-l|-)?)):)([a-zA-Z][a-zA-Z0-9_\\-#$%\\-$#]*)(:)\\s' }, 'block-statement': { begin: '(?i)(?)?)', 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+(([a-zA-Z][a-zA-Z_\\-#$%]*\\.)?([a-zA-Z][a-zA-Z0-9_\\-#$%]*\\.)?([a-zA-Z][a-zA-Z0-9_\\-#$%]*))' }, 'define-parameter': { begin: '(?i)\\b(param(?:eter|ete|et|e)?)\\b', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(?i)(?=\\.)|\\b(?=(bgc(?:olor|olo|ol|o)?)|(column-lab(?:el|e)?)|context-help-id|dcolor|decimals|drop-target|extent|font|(fgc(?:olor|olo|ol|o)?)|(form(?:at|a)?)|initial|label|(mouse-p(?:ointer|ointe|oint|oin|oi|o)?)|no-undo|not|(case-sen(?:sitive|sitiv|siti|sit|si|s)?)|(pfc(?:olor|olo|ol|o)?)|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+([a-zA-Z][a-zA-Z_\\-#$%]*(\\.[a-zA-Z][a-zA-Z_\\-#$%]*)?)\\b' }, { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'variable.other.abl'} }, match: '(?i)\\b(table-handle|dataset-handle)\\s+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\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+([a-zA-Z_\\-#$%]+(\\.[a-zA-Z_\\-#$%]+)?)\\b' }, {include: '#parameter-as'}, {include: '#keywords'}, {include: '#expression'} ] }, 'define-property': { begin: '(?i)\\b(property)\\b', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '\\s*(?=[Gg][Ee][Tt]|[Ss][Ee][Tt])', 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+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\s*', beginCaptures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'variable.other.abl'} }, end: '(?i)(?=\\.\\s*)', patterns: [ { captures: {1: {name: 'keyword.other.abl'}}, match: '(?i)\\b(for|scrolling|(rcode-info(?:rmation|rmatio|rmati|rmat|rma|rm|r)?))\\b' }, {include: '#cache-value'}, {include: '#db-dot-table'}, {include: '#fields-except-list'}, {include: '#punctuation-comma'}, {include: '#expression'}, {include: '#keywords'} ] }, 'define-stream': { captures: { 1: {name: 'keyword.other.abl'}, 2: {patterns: [{include: '#variable-name'}]} }, match: '(?i)\\s*(stream)\\s*([a-zA-Z][a-zA-Z0-9_\\-#$%\\-]*)', 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*([a-zA-Z_][a-zA-Z0-9_\\-#$%]*)\\s*' }, 'define-type': { patterns: [ {include: '#define-class'}, {include: '#define-interface'}, {include: '#define-enum-type'} ] }, 'define-variable': { begin: '(?i)\\s*(var(?:iable|iabl|iab|ia|i)?)\\s*', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(?i)(?=\\.)|\\b(?=(bgc(?:olor|olo|ol|o)?)|(column-lab(?:el|e)?)|context-help-id|dcolor|decimals|drop-target|extent|font|(fgc(?:olor|olo|ol|o)?)|(form(?:at|a)?)|(init(?:ial|ia|i)?)|label|(mouse-p(?:ointer|ointe|oint|oin|oi|o)?)|no-undo|not|(case-sen(?:sitive|sitiv|siti|sit|si|s)?)|(pfc(?:olor|olo|ol|o)?)|view-as|triggers)\\b', patterns: [ { captures: {1: {name: 'keyword.other.abl'}}, match: '\\b([Cc][Ll][Aa][Ss][Ss])\\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)(var(?:iable|iabl|iab|ia|i)?)\\s+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\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*::([a-zA-Z_\\-#$%]+)\\s*' }, doublequotedstring: { begin: '(")', beginCaptures: {1: {name: 'punctuation.definition.string.begin.abl'}}, end: '(?i)(")(:[LlRrTtCcUu]\\d*\\b)?', endCaptures: { 1: {name: 'punctuation.definition.string.end.abl'}, 2: {name: 'support.other.abl'} }, name: 'string.quoted.double.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'}, 'escape-endline': { captures: {1: {name: 'punctuation.separator.continuation'}}, match: '(~)\\s*$' }, '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*([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\s*((,)|(:))\\s*' }, { captures: {1: {name: 'entity.name.function.abl'}}, match: '\\s*([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\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:]]+\\b)?' }, 'field-as-object': { captures: {1: {name: 'entity.name.type.abl'}}, match: '(?i)\\s*((progress\\.lang\\.)?object)\\s*' }, 'field-name': { patterns: [ { captures: {1: {name: 'storage.data.table.abl'}}, match: '\\s*([a-zA-Z][a-zA-Z0-9_\\-#$%]*(\\.[a-zA-Z][a-zA-Z0-9_\\-#$%]*)?\\s*(\\[\\d+\\]))\\s*' }, { captures: {1: {name: 'storage.data.table.abl'}}, match: '\\s*([a-zA-Z][a-zA-Z0-9_\\-#$%]*(\\.[a-zA-Z][a-zA-Z0-9_\\-#$%]*)?)\\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'}, {include: '#punctuation-comma'} ] }, '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*([a-zA-Z_][a-zA-Z0-9#$\\-_%&]+(\\.[a-zA-Z_][a-zA-Z0-9#$\\-_%&]*)?)\\s*' }, 'for-each-join': { begin: '(?i)\\b(each|first|last)\\b(?|>=|=|\\+|-|/|<|>|\\*)' }, 'operator-with-space': { captures: {1: {name: 'keyword.operator.source.abl'}}, match: '(?i)(?<=\\s)(contains|begins|matches|eq|le|lt|ge|gt|ne)(?=\\s|\\()' }, 'operator-with-trailing-space': { captures: {1: {name: 'keyword.operator.source.abl'}}, match: '\\b([Nn][Oo][Tt])(?=\\s|\\()' }, 'opsys-device-name': { captures: {1: {name: 'storage.other.opsys-device.abl'}}, match: '([_\\w\\/\\-\\\\$:\\.]+)(?)', endCaptures: {1: {name: 'punctuation.definition.generic.end.abl'}}, name: 'meta.generic.abl', patterns: [ {include: '#type-name-generic'}, {include: '#punctuation-comma'}, {include: '#type-name'} ] }, 'type-names': { patterns: [{include: '#type-name-generic'}, {include: '#type-name'}] }, 'type-reference': { patterns: [ {include: '#define-type'}, {include: '#get-class'}, {include: '#new-class'}, {include: '#using'}, {include: '#type-argument-function'} ] }, 'undo-statement': { begin: '(?i)\\s*(undo)\\s*([a-zA-Z0-9_\\-#$%\\-$]*)?\\s*(,)', beginCaptures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'entity.name.label.abl'}, 3: {name: 'punctuation.separator.comma.abl'} }, end: '(?=[\\.:](?![a-zA-Z0-9_\\-#$%]))', patterns: [ {include: '#string'}, { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'entity.name.label.abl'} }, match: '(?i)\\s*(leave|next|retry)\\s([a-zA-Z0-9_\\-#$%\\-$]*)?' }, {include: '#new-class'}, {include: '#keywords'}, {include: '#code-block'}, {include: '#property-call'}, {include: '#function-arguments'}, {include: '#function-arguments-no-parens'}, {include: '#parens'}, {include: '#expression'}, {include: '#punctuation-colon'} ] }, 'unqualified-method-call': { captures: {1: {name: 'entity.name.function.abl'}}, match: '\\b([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\b(?=\\()' }, 'use-index': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'storage.data.table.abl'} }, match: '(?i)\\b(use-index)\\s+([a-zA-Z_][a-zA-Z0-9_\\-$]*)\\b' }, using: { begin: '(?i)\\s*(using)\\s*', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(\\.)', endCaptures: {1: {name: 'punctuation.terminator.abl'}}, name: 'meta.using.abl', patterns: [ { captures: {2: {name: 'entity.name.package.abl'}}, match: '(?i)\\s*((([\\w#$%]+|progress)(\\.[\\w#$%]+)*)\\.\\*)\\s*' }, { captures: {1: {name: 'keyword.other.abl'}}, match: '(?i)\\s*(from|propath|assembly)\\s*' }, {include: '#type-name'} ] }, 'using-except': { begin: '(?i)\\b(using|except)\\b', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(?i)\\s*(?=to|using|except)\\b', patterns: [ {include: '#field-name'}, {include: '#comment'}, {include: '#preprocessors'} ] }, 'var-statement': { begin: '^\\s*(var)\\s+', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(\\s([a-zA-Z][a-zA-Z0-9_\\-#$%]*))', endCaptures: {2: {name: 'variable.other.abl'}}, name: 'meta.define.abl', patterns: [ {include: '#access-modifier'}, {include: '#serializable'}, { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'entity.name.type.abl'} }, match: '(?i)\\s*(class)\\s*(blob|character|char|clob|com-handle|date|datetime|datetime-tz|decimal|handle|int64|integer|int|logical|longchar|memptr|raw|recid|rowid|widget-handle)?' }, {include: '#primitive-type'}, {include: '#type-names'}, {include: '#array-literal'}, {include: '#string'}, {include: '#comment'}, {include: '#preprocessors'} ] }, 'variable-as': { captures: { 1: {name: 'variable.other.abl'}, 2: {name: 'keyword.other.abl'} }, match: '\\s*([a-zA-Z0-9_\\-#$%\\-]+)\\s+([Aa][Ss])\\b' }, 'variable-like': { captures: {1: {name: 'variable.other.abl'}}, match: '(?i)\\s*([a-zA-Z0-9_\\-#$%\\-]+)\\s+(?=like)\\s*' }, 'variable-name': { match: '(?<=^|\\s|\\[|\\(|,)([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)(?=\\.\\s|\\.$|,|:|\\s|\\)|\\]|\\[|$)', name: 'variable.other.abl' }, 'while-expression': { begin: '(?i)\\s*(while)\\b', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(?i)(?=(transact(?:ion|io|i)?)|on|:|with)', patterns: [{include: '#logical-expression'}, {include: '#branch-options'}] } }, scopeName: 'source.abl' } export default grammar