UNPKG

@wooorm/starry-night

Version:
1,359 lines (1,358 loc) 127 kB
// 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-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*((abs(?:olute|olut|olu|ol|o)?)|(accum(?:ulate|ulat|ula|ul|u)?)|(ambig(?:uous|uou|uo|u)?)|(asc(?:ending|endin|endi|end|en|e)?)|(avail(?:able|abl|ab|a)?)|add-interval|alias|audit-enabled)\\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*(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: '(\\))', endCaptures: {1: {name: 'meta.brace.round.js'}}, name: 'meta.function-call.abl', patterns: [{include: '#function-arguments'}] }, 'abl-functions-C': { begin: '(?i)\\s*((compare(?:s)?)|(current-lang(?:uage|uag|ua|u)?)|can-do|can-find|can-query|can-set|caps|cast|chr|codepage-convert|connected|count-of|current-changed|current-result-row|current-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*((dbrest(?:rictions|riction|rictio|ricti|rict|ric|ri|r)?)|(dbvers(?:ion|io|i)?)|(dec(?:imal|ima|im|i)?)|(dynamic-func(?:tion|tio|ti|t)?)|data-source-modified|dataservers|date|datetime|datetime-tz|day|db-remote-host|dbcodepage|dbcollation|dbname|dbparam|dbtaskid|dbtype|decrypt|defined|dynamic-cast|dynamic-current-value|dynamic-enum|dynamic-invoke|dynamic-next-value|dynamic-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*(encode|encrypt|entered|entry|error|etime|exp|extent)\\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-inde(?:x)?)|(frame-val(?:ue|u)?)|fill|first|first-of|frame-col|frame-db|frame-down|frame-field|frame-file|frame-line|frame-name|frame-row)\\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*((gateway(?:s)?)|(get-codepage(?:s)?)|(get-codepage(?:s)?)|(get-coll(?:ations|ation|atio|ati|at|a)?)|(go-pend(?:ing|in|i)?)|generate-pbe-key|generate-pbe-salt|generate-random-key|generate-uuid|get-bits|get-byte|get-byte-order|get-bytes|get-class|get-collation|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|guid)\\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*(handle|hash-code|hex-decode|hex-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*((int(?:eger|ege|eg|e)?)|(is-attr(?:-space|-spac|-spa|-sp|-s|-)?)|index|input|int64|interval|is-codepage-fixed|is-column-codepage|is-db-multi-tenant|is-lead-byte|iso-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*((keyfunc(?:tion|tio|ti|t)?)|kblabel|keycode|keylabel|keyword|keyword-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*((line-count(?:er|e)?)|last|last-of|lastkey|lc|ldbname|left-trim|length|library|list-events|list-query-attrs|list-set-attrs|list-widgets|locked|log|logical|lookup|lower)\\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*((min(?:imum|imu|im|i)?)|maximum|md5-digest|member|message-digest|message-lines|month|mtime)\\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-ali(?:ases|ase|as|a)?)|new|next-value|normalize|not|now|num-dbs|num-entries|num-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*((os-drive(?:s)?)|opsys|os-dir|os-error|os-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*((page-num(?:ber|be|b)?)|(proc-ha(?:ndle|ndl|nd|n)?)|(proc-st(?:atus|atu|at|a)?)|(provers(?:ion|io|i)?)|page-size|pdbname|process-architecture|program-name|progress|promsgs|propath)\\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*(query-off-end|quoter)\\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*((record-len(?:gth|gt|g)?)|(relation-fi(?:elds|eld|el|e)?)|(return-val(?:ue|u)?)|(rgb-v(?:alue|alu|al|a)?)|r-index|random|raw|recid|rejected|replace|retry|return|right-trim|round|row-state|rowid)\\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*((setuser(?:id|i)?)|(subst(?:itute|itut|itu|it|i)?)|(substr(?:ing|in|i)?)|screen-lines|sdbname|search|seek|set-db-client|set-effective-tenant|set-size|sha1-digest|skip|sqrt|ssl-server-name|string|super)\\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*((transact(?:ion|io|i)?)|(trunc(?:ate|at|a)?)|tenant-id|tenant-name|tenant-name-to-id|terminal|this-object|time|timezone|to-rowid|today|trim|type-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*(unbox|userid)\\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*(valid-event|valid-handle|valid-object|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-W': { begin: '(?i)\\s*((widget-h(?:andle|andl|and|an|a)?)|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(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: 'support.other.argument.abl'}}, match: '\\s*((\\{\\s*&[\\.a-zA-Z0-9_\\-#$%\\/]+\\})|(\\{\\s*\\d+\\})|(\\{\\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'}] }, '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)(?<!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((transact(?:ion|io|i)?)|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)([a-zA-Z0-9_\\-#$%\\-$]*)?\\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)([a-zA-Z0-9_\\-#$%\\-$]*)?\\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+(([a-zA-Z][a-zA-Z_\\-#$%]*\\.)?([a-zA-Z][a-zA-Z_\\-#$%]*\\.)([a-zA-Z][a-zA-Z_\\-#$%]*)(\\[\\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*([a-zA-Z][a-zA-Z#$\\-_%&]*\\.[a-zA-Z_][a-zA-Z#$\\-_%&]*(\\.[a-zA-Z_][a-zA-Z#$\\-_%&]*)?)\\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)([a-zA-Z_\\-#$%]+)\\s+(for)\\s+((temp-table)\\s+)?([a-zA-Z][a-zA-Z0-9_\\-#$%]*)\\s*' }, 'buffer-name': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'storage.data.table.abl'} }, match: '(?i)\\b(buffer)\\s+([a-zA-Z][a-zA-Z0-9_\\-#$%]*(\\.[a-zA-Z][a-zA-Z0-9_\\-#$%]*)?)' }, 'cache-value': { captures: { 1: {name: 'keyword.other.abl'}, 3: {name: 'constant.numeric.source.abl'} }, match: '\\b([Cc][Aa][Cc][Hh][Ee])\\s+(0[xX][[:xdigit:]]+)?|(\\-?[0-9]+(\\.[0-9]+)?)\\b' }, '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|-loc|-lo|-l|-)?)|using|(no-prefe(?:tch|tc|t)?)|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: '#create-statement'}, {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)(?<=^|\\b|\\s|\\()(true|false|yes|no|\\?)(?![a-zA-Z0-9_\\-#$%])', name: 'constant.language.abl' }, 'copy-lob': { begin: '(?i)\\b(copy-lob)\\b', beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(?=\\.)', patterns: [{include: '#code-block'}] }, 'create-alias': { begin: '(?i)\\s*(create)\\s+(alias)\\s*', beginCaptures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'keyword.other.abl'} }, end: '(?=\\.)', patterns: [ {include: '#keywords'}, {include: '#abl-functions'}, { captures: {1: {name: 'storage.data.database.abl'}}, match: '\\b([a-zA-Z0-9][a-zA-Z0-9_\\-]*)\\b' }, {include: '#expression'} ] }, 'create-buffer': { begin: '(?i)(create)\\s+(buffer)\\b', beginCaptures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'keyword.other.abl'} }, end: '(?i)(\\b((buffer-n(?:ame|am|a)?)|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'} ] }, 'create-record': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'storage.data.table.abl'}, 5: {name: 'keyword.other.abl'}, 6: {name: 'keyword.other.abl'} }, match: '(?i)\\s*(create)\\s+([a-zA-Z][a-zA-Z_\\-#$%]*(\\.[a-zA-Z][a-zA-Z_\\-#$%]*)?)\\s*((for)\\s+(tenant))?\\s*' }, 'create-statement': { patterns: [ {include: '#create-buffer'}, {include: '#create-alias'}, {include: '#create-widget'}, {include: '#create-with-expression'}, {include: '#create-record'} ] }, 'create-widget': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'keyword.other.abl'}, 3: {name: 'variable.other.abl'} }, match: '(?i)\\s*(create)\\s+(button|combo-box|(?:control-fram(?:e)?)|dialog-box|editor|fill-in|(?:fram(?:e)?)|image|menu|menu-item|radio-set|(?:rect(?:angle|angl|ang|an|a)?)|selection-list|slider|sub-menu|text|toggle-box|window)\\s+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\b' }, 'create-with-expression': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'keyword.other.abl'} }, match: '(?i)\\s*(create)\\s+(browse|call|client-principal|database|dataset|data-source|query|sax-attributes|sax-reader|sax-writer|server|server-socket|soap-header|soap-header-entryref|socket|temp-table|widget-pool|x-document|x-noderef)\\s*' }, 'db-dot-table': { captures: {1: {name: 'storage.data.table.abl'}}, match: '(?i)\\b([a-zA-Z_][a-zA-Z0-9#$\\-_%&]*(\\.[a-zA-Z_][a-zA-Z0-9#$\\-_%&]*)?)\\b' }, 'db-dot-table-dot-field': { captures: {1: {name: 'storage.data.table.abl'}}, match: '(?i)(?<=^|\\s|\\(|,)(([a-zA-Z][a-zA-Z0-9#$\\-_%&]*\\.)?([a-zA-Z_][a-zA-Z0-9#$\\-_%&]*\\.)([a-zA-Z_][a-zA-Z0-9#$\\-_%&]*)(\\[\\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*(def(?:ine|in|i)?)\\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|(glob(?:al|a|)?)|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+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\s*', beginCaptures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'variable.other.abl'} }, end: '(?i)\\b(?=\\.)', patterns: [ { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'variable.other.abl'} }, match: '\\b([Qq][Uu][Ee][Rr][Yy])\\s+([a-zA-Z][a-zA-Z0-9\\-_#$%\\&]+)\\b' }, { captures: {1: {name: 'keyword.other.abl'}}, match: '(?i)\\b((share(?:-lock|-loc|-lo|-l|-)?)|(exclusive-l(?:ock|oc|o)?)|no-lock|no-wait|(disp(?:lay|la|l)?))\\b' }, {include: '#comment'}, {include: '#db-dot-table-dot-field'}, {include: '#keywords'}, {include: '#expression'} ] }, '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+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)', 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: '\\b(?<![#$\\-_%&])([Cc][Ll][Aa][Ss]{2})\\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+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\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-rel(?:ation|atio|ati|at|a)?)|parent-id-relation)\\s*([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)' }, { captures: {1: {name: 'support.function.abl'}}, match: '(?i)\\b(relation-fi(?:elds|eld|el|e)?)\\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([a-zA-Z][a-zA-Z0-9_#$%]*)\\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+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\b' }, 'define-field': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'storage.data.table.abl'} }, match: '(?i)\\s*(field)\\s+([a-zA-Z][a-zA-Z0-9_\\-#$%]*)\\s*' }, 'define-frame': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'variable.other.abl'} }, match: '(?i)\\s*((?:fram(?:e)?))\\s*([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)' }, 'define-index': { begin: '(?i)\\s*(index)\\s+([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)', 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|(asc(?:ending|endin|endi|end|en|e)?)|(desc(?:ending|endin|endi|end|en|e)?))\\b' }, { captures: {1: {name: 'storage.data.table.abl'}}, match: '\\b([a-zA-Z_][a-zA-Z0-9_#$\\-%&]*)\\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+(([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)\\b(?=\\.)\\b', 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)?)|contet-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', endCaptures: {1: {name: 'keyword.other.abl'}}, 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.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*([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:]]+)?' }, '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)(?<=,)\\s*(each|first|last)\\s*', beginCaptures: { 1: {name: 'keyword.other.abl'}, 3: {name: 'storage.data.table.abl'} }, end: '(?i)\\s*(?=where|no-lock|(exclusive-l(?:ock|oc|o)?)|(share(?:-lock|-loc|-lo|-l|-)?)|tenant-where|use-index|table-scan|using|(no-prefe(?:tch|tc|t)?)|left|outer-join|break|by|(transact(?:ion|io|i)?)|,|:)\\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+([a-zA-Z][a-zA-Z_\\-#$%]*(\\.[a-zA-Z][a-zA-Z_\\-#$%]*)?)\\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*' } ] }, 'for-each-table': { beginCaptures: {1: {name: 'keyword.other.abl'}}, end: '(?i)\\s*(?=where|no-lock|(exclusive-l(?:ock|oc|o)?)|(share(?:-lock|-loc|-lo|-l|-)?)|tenant-where|use-index|table-scan|using|(no-prefe(?:tch|tc|t)?)|left|outer-join|break|by|(transact(?:ion|io|i)?)|,|:|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'}, {include: '#while-expression'}, {include: '#comment'} ] }, 'for-join': { captures: {1: {name: 'storage.data.table.abl'}}, match: '(?i)(?<=,|^)\\s*([a-zA-Z][a-zA-Z0-9_\\-#$%]*(\\.[a-zA-Z_][a-zA-Z0-9_\\-#$%]*)?)\\s+(?=where|no-lock|(exclusive-l(?:ock|oc|o)?)|(share(?:-lock|-loc|-lo|-l|-)?)|tenant-where|use-index|table-scan|using|(no-prefe(?:tch|tc|t)?)|left|outer-join|break|by|(transact(?:ion|io|i)?))\\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+([a-zA-Z_\\-#$%]*)\\s*(,)?\\s*([a-zA-Z_\\-#$%]*)?\\s*(,)?\\s*([a-zA-Z_\\-#$%]*)?\\s*(,)?\\s*([a-zA-Z_\\-#$%]*)?\\s*(,)?\\s*([a-zA-Z_\\-#$%]*)?\\s*(,)?\\s*([a-zA-Z_\\-#$%]*)?' }, '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+)?([a-zA-Z_\\-#$%]+)\\s*' }, 'format-constant': { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'constant.language.source.abl'} }, match: '(?i)\\b((?:form(?:at|a)?))\\s+(9+/9+/9+)\\b' }, 'from-to-by': { begin: '\\s*([a-zA-Z0-9_\\-#$%$\\-_%&]+)\\s+(=)\\s*', beginCaptures: { 1: {name: 'variable.other.abl'}, 2: {name: 'keyword.operator.source.abl'} }, end: '(?i)(?=(transact(?:ion|io|i)?)|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:]]]+)|(\\-?[[0-9]]+(\\.[[0-9]]+)?))\\s+(y)\\s+((0(x)[[[:xdigit:]]]+)|(\\-?[[0-9]]+(\\.[[0-9]]+)?))\\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-o(?:utput|utpu|utp|u)?)|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+([a-zA-Z_\\-#$%]+(\\.[a-zA-Z_\\-#$%]+)?)\\b' }, { captures: { 1: {name: 'keyword.other.abl'}, 2: {name: 'storage.data.table.abl'} }, match: '(?i)\\b(temp-table|table|buffer)\\s+([a-zA-Z_\\-#$%]+(\\.[a-zA-Z_\\-#$%]+)?)\\b' }, {include: '#function-arguments'}, {include: '#constant'}, {include: '#type-reference'}, {include: '#abl-system-handles'}, {include: '#can-find'}, {include: '#language-functions'}, {include: '#abl-functions'}, {include: '#type-member-call'}, {include: '#db-dot-table-dot-field'}, {include: '#handle-attributes'}, {include: '#handle-methods'}, {include: '#keywords'}, {include: '#expression'}, {include: '#comment'}, {include: '#array-literal'}, {include: '#punctuation-comma'}, {include: '#preprocessors'} ] }, 'function-definition': { begin: '(?i)\\b(function)\\s+([a-zA-Z0-9_][a-zA-Z0-9_#$\\-%&]+)\\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+)([a-zA-Z_][a-zA-Z0-9_#$\\-%&]+)\\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: