123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 |
- /*---------------------------------------------------------------------------------------------
- * 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: 'COMMENT'
- // blockComment: ['COMMENT', '.'],
- },
- brackets: [['(', ')']],
- autoClosingPairs: [
- { open: '{', close: '}' },
- { open: '[', close: ']' },
- { open: '(', close: ')' },
- { open: '"', close: '"' },
- { open: ':', close: '.' }
- ],
- surroundingPairs: [
- { open: '{', close: '}' },
- { open: '[', close: ']' },
- { open: '(', close: ')' },
- { open: '`', close: '`' },
- { open: '"', close: '"' },
- { open: "'", close: "'" },
- { open: ':', close: '.' }
- ],
- folding: {
- markers: {
- start: new RegExp('^\\s*(::\\s*|COMMENT\\s+)#region'),
- end: new RegExp('^\\s*(::\\s*|COMMENT\\s+)#endregion')
- }
- }
- };
- export const language = <languages.IMonarchLanguage>{
- // Set defaultToken to invalid to see what you do not tokenize yet
- // defaultToken: 'invalid',
- tokenPostfix: '.lexon',
- ignoreCase: true,
- keywords: [
- 'lexon',
- 'lex',
- 'clause',
- 'terms',
- 'contracts',
- 'may',
- 'pay',
- 'pays',
- 'appoints',
- 'into',
- 'to'
- ],
- typeKeywords: ['amount', 'person', 'key', 'time', 'date', 'asset', 'text'],
- operators: [
- 'less',
- 'greater',
- 'equal',
- 'le',
- 'gt',
- 'or',
- 'and',
- 'add',
- 'added',
- 'subtract',
- 'subtracted',
- 'multiply',
- 'multiplied',
- 'times',
- 'divide',
- 'divided',
- 'is',
- 'be',
- 'certified'
- ],
- // we include these common regular expressions
- symbols: /[=><!~?:&|+\-*\/\^%]+/,
- // The main tokenizer for our languages
- tokenizer: {
- root: [
- // comment
- [/^(\s*)(comment:?(?:\s.*|))$/, ['', 'comment']],
- // special identifier cases
- [
- /"/,
- {
- token: 'identifier.quote',
- bracket: '@open',
- next: '@quoted_identifier'
- }
- ],
- [
- 'LEX$',
- {
- token: 'keyword',
- bracket: '@open',
- next: '@identifier_until_period'
- }
- ],
- ['LEXON', { token: 'keyword', bracket: '@open', next: '@semver' }],
- [
- ':',
- {
- token: 'delimiter',
- bracket: '@open',
- next: '@identifier_until_period'
- }
- ],
- // identifiers and keywords
- [
- /[a-z_$][\w$]*/,
- {
- cases: {
- '@operators': 'operator',
- '@typeKeywords': 'keyword.type',
- '@keywords': 'keyword',
- '@default': 'identifier'
- }
- }
- ],
- // whitespace
- { include: '@whitespace' },
- // delimiters and operators
- [/[{}()\[\]]/, '@brackets'],
- [/[<>](?!@symbols)/, '@brackets'],
- [/@symbols/, 'delimiter'],
- // numbers
- [/\d*\.\d*\.\d*/, 'number.semver'],
- [/\d*\.\d+([eE][\-+]?\d+)?/, 'number.float'],
- [/0[xX][0-9a-fA-F]+/, 'number.hex'],
- [/\d+/, 'number'],
- // delimiter: after number because of .\d floats
- [/[;,.]/, 'delimiter']
- ],
- quoted_identifier: [
- [/[^\\"]+/, 'identifier'],
- [/"/, { token: 'identifier.quote', bracket: '@close', next: '@pop' }]
- ],
- space_identifier_until_period: [
- [':', 'delimiter'],
- [' ', { token: 'white', next: '@identifier_rest' }]
- ],
- identifier_until_period: [
- { include: '@whitespace' },
- [':', { token: 'delimiter', next: '@identifier_rest' }],
- [/[^\\.]+/, 'identifier'],
- [/\./, { token: 'delimiter', bracket: '@close', next: '@pop' }]
- ],
- identifier_rest: [
- [/[^\\.]+/, 'identifier'],
- [/\./, { token: 'delimiter', bracket: '@close', next: '@pop' }]
- ],
- semver: [
- { include: '@whitespace' },
- [':', 'delimiter'],
- [/\d*\.\d*\.\d*/, { token: 'number.semver', bracket: '@close', next: '@pop' }]
- ],
- whitespace: [[/[ \t\r\n]+/, 'white']]
- }
- };
|