mirror of
https://github.com/microsoft/monaco-editor.git
synced 2025-12-23 00:22:56 +01:00
Merge pull request #118 from dehilsterlexis/LEXER-ECL-001
LEXER-ECL-001 Lexer for ECL (Enterprise Control Language)
This commit is contained in:
commit
f87a5f32bc
4 changed files with 503 additions and 0 deletions
13
src/ecl/ecl.contribution.ts
Normal file
13
src/ecl/ecl.contribution.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { registerLanguage } from '../_.contribution';
|
||||
|
||||
registerLanguage({
|
||||
id: 'ecl',
|
||||
extensions: ['.ecl'],
|
||||
aliases: ['ECL', 'Ecl', 'ecl'],
|
||||
loader: () => import('./ecl')
|
||||
});
|
||||
8
src/ecl/ecl.test.ts
Normal file
8
src/ecl/ecl.test.ts
Normal file
|
|
@ -0,0 +1,8 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import { testTokenization } from '../test/testRunner';
|
||||
|
||||
testTokenization('ecl', []);
|
||||
481
src/ecl/ecl.ts
Normal file
481
src/ecl/ecl.ts
Normal file
|
|
@ -0,0 +1,481 @@
|
|||
/*---------------------------------------------------------------------------------------------
|
||||
* Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
* Licensed under the MIT License. See License.txt in the project root for license information.
|
||||
*--------------------------------------------------------------------------------------------*/
|
||||
|
||||
import type { languages } from '../fillers/monaco-editor-core';
|
||||
|
||||
export const conf: languages.LanguageConfiguration = {
|
||||
comments: {
|
||||
lineComment: '//',
|
||||
blockComment: ['/*', '*/']
|
||||
},
|
||||
brackets: [
|
||||
['{', '}'],
|
||||
['[', ']'],
|
||||
['(', ')']
|
||||
],
|
||||
autoClosingPairs: [
|
||||
{ open: '{', close: '}' },
|
||||
{ open: '[', close: ']' },
|
||||
{ open: '(', close: ')' },
|
||||
{ open: "'", close: "'", notIn: ['string', 'comment'] },
|
||||
{ open: '"', close: '"', notIn: ['string', 'comment'] }
|
||||
],
|
||||
surroundingPairs: [
|
||||
{ open: '{', close: '}' },
|
||||
{ open: '[', close: ']' },
|
||||
{ open: '(', close: ')' },
|
||||
{ open: '<', close: '>' },
|
||||
{ open: "'", close: "'" },
|
||||
{ open: '"', close: '"' }
|
||||
]
|
||||
};
|
||||
|
||||
export const language = <languages.IMonarchLanguage>{
|
||||
defaultToken: '',
|
||||
tokenPostfix: '.ecl',
|
||||
ignoreCase: true,
|
||||
|
||||
brackets: [
|
||||
{ open: '{', close: '}', token: 'delimiter.curly' },
|
||||
{ open: '[', close: ']', token: 'delimiter.square' },
|
||||
{ open: '(', close: ')', token: 'delimiter.parenthesis' },
|
||||
{ open: '<', close: '>', token: 'delimiter.angle' }
|
||||
],
|
||||
|
||||
pounds: [
|
||||
'append',
|
||||
'break',
|
||||
'declare',
|
||||
'demangle',
|
||||
'end',
|
||||
'for',
|
||||
'getdatatype',
|
||||
'if',
|
||||
'inmodule',
|
||||
'loop',
|
||||
'mangle',
|
||||
'onwarning',
|
||||
'option',
|
||||
'set',
|
||||
'stored',
|
||||
'uniquename'
|
||||
].join('|'),
|
||||
|
||||
keywords: [
|
||||
'__compressed__',
|
||||
'after',
|
||||
'all',
|
||||
'and',
|
||||
'any',
|
||||
'as',
|
||||
'atmost',
|
||||
'before',
|
||||
'beginc',
|
||||
'best',
|
||||
'between',
|
||||
'case',
|
||||
'cluster',
|
||||
'compressed',
|
||||
'compression',
|
||||
'const',
|
||||
'counter',
|
||||
'csv',
|
||||
'default',
|
||||
'descend',
|
||||
'embed',
|
||||
'encoding',
|
||||
'encrypt',
|
||||
'end',
|
||||
'endc',
|
||||
'endembed',
|
||||
'endmacro',
|
||||
'enum',
|
||||
'escape',
|
||||
'except',
|
||||
'exclusive',
|
||||
'expire',
|
||||
'export',
|
||||
'extend',
|
||||
'fail',
|
||||
'few',
|
||||
'fileposition',
|
||||
'first',
|
||||
'flat',
|
||||
'forward',
|
||||
'from',
|
||||
'full',
|
||||
'function',
|
||||
'functionmacro',
|
||||
'group',
|
||||
'grouped',
|
||||
'heading',
|
||||
'hole',
|
||||
'ifblock',
|
||||
'import',
|
||||
'in',
|
||||
'inner',
|
||||
'interface',
|
||||
'internal',
|
||||
'joined',
|
||||
'keep',
|
||||
'keyed',
|
||||
'last',
|
||||
'left',
|
||||
'limit',
|
||||
'linkcounted',
|
||||
'literal',
|
||||
'little_endian',
|
||||
'load',
|
||||
'local',
|
||||
'locale',
|
||||
'lookup',
|
||||
'lzw',
|
||||
'macro',
|
||||
'many',
|
||||
'maxcount',
|
||||
'maxlength',
|
||||
'min skew',
|
||||
'module',
|
||||
'mofn',
|
||||
'multiple',
|
||||
'named',
|
||||
'namespace',
|
||||
'nocase',
|
||||
'noroot',
|
||||
'noscan',
|
||||
'nosort',
|
||||
'not',
|
||||
'noxpath',
|
||||
'of',
|
||||
'onfail',
|
||||
'only',
|
||||
'opt',
|
||||
'or',
|
||||
'outer',
|
||||
'overwrite',
|
||||
'packed',
|
||||
'partition',
|
||||
'penalty',
|
||||
'physicallength',
|
||||
'pipe',
|
||||
'prefetch',
|
||||
'quote',
|
||||
'record',
|
||||
'repeat',
|
||||
'retry',
|
||||
'return',
|
||||
'right',
|
||||
'right1',
|
||||
'right2',
|
||||
'rows',
|
||||
'rowset',
|
||||
'scan',
|
||||
'scope',
|
||||
'self',
|
||||
'separator',
|
||||
'service',
|
||||
'shared',
|
||||
'skew',
|
||||
'skip',
|
||||
'smart',
|
||||
'soapaction',
|
||||
'sql',
|
||||
'stable',
|
||||
'store',
|
||||
'terminator',
|
||||
'thor',
|
||||
'threshold',
|
||||
'timelimit',
|
||||
'timeout',
|
||||
'token',
|
||||
'transform',
|
||||
'trim',
|
||||
'type',
|
||||
'unicodeorder',
|
||||
'unordered',
|
||||
'unsorted',
|
||||
'unstable',
|
||||
'update',
|
||||
'use',
|
||||
'validate',
|
||||
'virtual',
|
||||
'whole',
|
||||
'width',
|
||||
'wild',
|
||||
'within',
|
||||
'wnotrim',
|
||||
'xml',
|
||||
'xpath'
|
||||
],
|
||||
|
||||
functions: [
|
||||
'abs',
|
||||
'acos',
|
||||
'aggregate',
|
||||
'allnodes',
|
||||
'apply',
|
||||
'ascii',
|
||||
'asin',
|
||||
'assert',
|
||||
'asstring',
|
||||
'atan',
|
||||
'atan2',
|
||||
'ave',
|
||||
'build',
|
||||
'buildindex',
|
||||
'case',
|
||||
'catch',
|
||||
'choose',
|
||||
'choosen',
|
||||
'choosesets',
|
||||
'clustersize',
|
||||
'combine',
|
||||
'correlation',
|
||||
'cos',
|
||||
'cosh',
|
||||
'count',
|
||||
'covariance',
|
||||
'cron',
|
||||
'dataset',
|
||||
'dedup',
|
||||
'define',
|
||||
'denormalize',
|
||||
'dictionary',
|
||||
'distribute',
|
||||
'distributed',
|
||||
'distribution',
|
||||
'ebcdic',
|
||||
'enth',
|
||||
'error',
|
||||
'evaluate',
|
||||
'event',
|
||||
'eventextra',
|
||||
'eventname',
|
||||
'exists',
|
||||
'exp',
|
||||
'fail',
|
||||
'failcode',
|
||||
'failmessage',
|
||||
'fetch',
|
||||
'fromunicode',
|
||||
'fromxml',
|
||||
'getenv',
|
||||
'getisvalid',
|
||||
'global',
|
||||
'graph',
|
||||
'group',
|
||||
'hash',
|
||||
'hash32',
|
||||
'hash64',
|
||||
'hashcrc',
|
||||
'hashmd5',
|
||||
'having',
|
||||
'httpcall',
|
||||
'httpheader',
|
||||
'if',
|
||||
'iff',
|
||||
'index',
|
||||
'intformat',
|
||||
'isvalid',
|
||||
'iterate',
|
||||
'join',
|
||||
'keydiff',
|
||||
'keypatch',
|
||||
'keyunicode',
|
||||
'length',
|
||||
'library',
|
||||
'limit',
|
||||
'ln',
|
||||
'loadxml',
|
||||
'local',
|
||||
'log',
|
||||
'loop',
|
||||
'map',
|
||||
'matched',
|
||||
'matchlength',
|
||||
'matchposition',
|
||||
'matchtext',
|
||||
'matchunicode',
|
||||
'max',
|
||||
'merge',
|
||||
'mergejoin',
|
||||
'min',
|
||||
'nofold',
|
||||
'nolocal',
|
||||
'nonempty',
|
||||
'normalize',
|
||||
'nothor',
|
||||
'notify',
|
||||
'output',
|
||||
'parallel',
|
||||
'parse',
|
||||
'pipe',
|
||||
'power',
|
||||
'preload',
|
||||
'process',
|
||||
'project',
|
||||
'pull',
|
||||
'random',
|
||||
'range',
|
||||
'rank',
|
||||
'ranked',
|
||||
'realformat',
|
||||
'recordof',
|
||||
'regexfind',
|
||||
'regexreplace',
|
||||
'regroup',
|
||||
'rejected',
|
||||
'rollup',
|
||||
'round',
|
||||
'roundup',
|
||||
'row',
|
||||
'rowdiff',
|
||||
'sample',
|
||||
'sequential',
|
||||
'set',
|
||||
'sin',
|
||||
'sinh',
|
||||
'sizeof',
|
||||
'soapcall',
|
||||
'sort',
|
||||
'sorted',
|
||||
'sqrt',
|
||||
'stepped',
|
||||
'stored',
|
||||
'sum',
|
||||
'table',
|
||||
'tan',
|
||||
'tanh',
|
||||
'thisnode',
|
||||
'topn',
|
||||
'tounicode',
|
||||
'toxml',
|
||||
'transfer',
|
||||
'transform',
|
||||
'trim',
|
||||
'truncate',
|
||||
'typeof',
|
||||
'ungroup',
|
||||
'unicodeorder',
|
||||
'variance',
|
||||
'wait',
|
||||
'which',
|
||||
'workunit',
|
||||
'xmldecode',
|
||||
'xmlencode',
|
||||
'xmltext',
|
||||
'xmlunicode'
|
||||
],
|
||||
|
||||
typesint: ['integer', 'unsigned'].join('|'),
|
||||
|
||||
typesnum: ['data', 'qstring', 'string', 'unicode', 'utf8', 'varstring', 'varunicode'],
|
||||
|
||||
typesone: [
|
||||
'ascii',
|
||||
'big_endian',
|
||||
'boolean',
|
||||
'data',
|
||||
'decimal',
|
||||
'ebcdic',
|
||||
'grouped',
|
||||
'integer',
|
||||
'linkcounted',
|
||||
'pattern',
|
||||
'qstring',
|
||||
'real',
|
||||
'record',
|
||||
'rule',
|
||||
'set of',
|
||||
'streamed',
|
||||
'string',
|
||||
'token',
|
||||
'udecimal',
|
||||
'unicode',
|
||||
'unsigned',
|
||||
'utf8',
|
||||
'varstring',
|
||||
'varunicode'
|
||||
].join('|'),
|
||||
|
||||
operators: ['+', '-', '/', ':=', '<', '<>', '=', '>', '\\', 'and', 'in', 'not', 'or'],
|
||||
|
||||
symbols: /[=><!~?:&|+\-*\/\^%]+/,
|
||||
|
||||
// escape sequences
|
||||
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
||||
|
||||
// The main tokenizer for our languages
|
||||
tokenizer: {
|
||||
root: [
|
||||
[/@typesint[4|8]/, 'type'],
|
||||
[/#(@pounds)/, 'type'],
|
||||
[/@typesone/, 'type'],
|
||||
|
||||
[
|
||||
/[a-zA-Z_$][\w-$]*/,
|
||||
{
|
||||
cases: {
|
||||
'@functions': 'keyword.function',
|
||||
'@keywords': 'keyword',
|
||||
'@operators': 'operator'
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
// whitespace
|
||||
{ include: '@whitespace' },
|
||||
|
||||
[/[{}()\[\]]/, '@brackets'],
|
||||
[/[<>](?!@symbols)/, '@brackets'],
|
||||
[
|
||||
/@symbols/,
|
||||
{
|
||||
cases: {
|
||||
'@operators': 'delimiter',
|
||||
'@default': ''
|
||||
}
|
||||
}
|
||||
],
|
||||
|
||||
// numbers
|
||||
[/[0-9_]*\.[0-9_]+([eE][\-+]?\d+)?/, 'number.float'],
|
||||
[/0[xX][0-9a-fA-F_]+/, 'number.hex'],
|
||||
[/0[bB][01]+/, 'number.hex'], // binary: use same theme style as hex
|
||||
[/[0-9_]+/, 'number'],
|
||||
|
||||
// delimiter: after number because of .\d floats
|
||||
[/[;,.]/, 'delimiter'],
|
||||
|
||||
// strings
|
||||
[/"([^"\\]|\\.)*$/, 'string.invalid'],
|
||||
[/"/, 'string', '@string'],
|
||||
|
||||
// characters
|
||||
[/'[^\\']'/, 'string'],
|
||||
[/(')(@escapes)(')/, ['string', 'string.escape', 'string']],
|
||||
[/'/, 'string.invalid']
|
||||
],
|
||||
|
||||
whitespace: [
|
||||
[/[ \t\v\f\r\n]+/, ''],
|
||||
[/\/\*/, 'comment', '@comment'],
|
||||
[/\/\/.*$/, 'comment']
|
||||
],
|
||||
|
||||
comment: [
|
||||
[/[^\/*]+/, 'comment'],
|
||||
[/\*\//, 'comment', '@pop'],
|
||||
[/[\/*]/, 'comment']
|
||||
],
|
||||
|
||||
string: [
|
||||
[/[^\\']+/, 'string'],
|
||||
[/@escapes/, 'string.escape'],
|
||||
[/\\./, 'string.escape.invalid'],
|
||||
[/'/, 'string', '@pop']
|
||||
]
|
||||
}
|
||||
};
|
||||
|
|
@ -16,6 +16,7 @@ import './csp/csp.contribution';
|
|||
import './css/css.contribution';
|
||||
import './dart/dart.contribution';
|
||||
import './dockerfile/dockerfile.contribution';
|
||||
import './ecl/ecl.contribution';
|
||||
import './fsharp/fsharp.contribution';
|
||||
import './go/go.contribution';
|
||||
import './graphql/graphql.contribution';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue