2022-10-28 06:33:37 -05:00
|
|
|
import type { languages } from 'monaco-editor';
|
|
|
|
|
|
|
|
export const languageConfiguration: languages.LanguageConfiguration = {
|
|
|
|
// the default separators except `@$`
|
|
|
|
wordPattern: /(-?\d*\.\d\w*)|([^`~!#%^&*()\-=+\[{\]}\\|;:'",.<>\/?\s]+)/g,
|
|
|
|
brackets: [['{', '}']],
|
|
|
|
autoClosingPairs: [
|
|
|
|
{ open: '{', close: '}' },
|
|
|
|
{ open: '"', close: '"' },
|
|
|
|
{ open: "'", close: "'" },
|
|
|
|
],
|
|
|
|
surroundingPairs: [
|
|
|
|
{ open: '{', close: '}' },
|
|
|
|
{ open: '"', close: '"' },
|
|
|
|
{ open: "'", close: "'" },
|
|
|
|
],
|
|
|
|
folding: {},
|
|
|
|
};
|
|
|
|
|
|
|
|
export const language: languages.IMonarchLanguage = {
|
|
|
|
ignoreCase: false,
|
|
|
|
defaultToken: '',
|
2022-11-30 11:22:47 -06:00
|
|
|
tokenPostfix: '.phlareql',
|
2022-10-28 06:33:37 -05:00
|
|
|
|
|
|
|
keywords: [],
|
|
|
|
operators: [],
|
|
|
|
|
|
|
|
// we include these common regular expressions
|
|
|
|
symbols: /[=><!~?:&|+\-*\/^%]+/,
|
|
|
|
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
|
|
|
|
digits: /\d+(_+\d+)*/,
|
|
|
|
octaldigits: /[0-7]+(_+[0-7]+)*/,
|
|
|
|
binarydigits: /[0-1]+(_+[0-1]+)*/,
|
|
|
|
hexdigits: /[[0-9a-fA-F]+(_+[0-9a-fA-F]+)*/,
|
|
|
|
integersuffix: /(ll|LL|u|U|l|L)?(ll|LL|u|U|l|L)?/,
|
|
|
|
floatsuffix: /[fFlL]?/,
|
|
|
|
|
|
|
|
tokenizer: {
|
|
|
|
root: [
|
|
|
|
// labels
|
|
|
|
[/[a-z_]\w*(?=\s*(=|!=|=~|!~))/, 'tag'],
|
|
|
|
|
|
|
|
// strings
|
|
|
|
[/"([^"\\]|\\.)*$/, 'string.invalid'], // non-teminated string
|
|
|
|
[/'([^'\\]|\\.)*$/, 'string.invalid'], // non-teminated string
|
|
|
|
[/"/, 'string', '@string_double'],
|
|
|
|
[/'/, 'string', '@string_single'],
|
|
|
|
|
|
|
|
// whitespace
|
|
|
|
{ include: '@whitespace' },
|
|
|
|
|
|
|
|
// delimiters and operators
|
|
|
|
[/[{}()\[\]]/, '@brackets'],
|
|
|
|
[/[<>](?!@symbols)/, '@brackets'],
|
|
|
|
[
|
|
|
|
/@symbols/,
|
|
|
|
{
|
|
|
|
cases: {
|
|
|
|
'@operators': 'delimiter',
|
|
|
|
'@default': '',
|
|
|
|
},
|
|
|
|
},
|
|
|
|
],
|
|
|
|
|
|
|
|
// numbers
|
|
|
|
[/\d+/, 'number'],
|
|
|
|
[/\d*\d+[eE]([\-+]?\d+)?(@floatsuffix)/, 'number.float'],
|
|
|
|
[/\d*\.\d+([eE][\-+]?\d+)?(@floatsuffix)/, 'number.float'],
|
|
|
|
[/0[xX][0-9a-fA-F']*[0-9a-fA-F](@integersuffix)/, 'number.hex'],
|
|
|
|
[/0[0-7']*[0-7](@integersuffix)/, 'number.octal'],
|
|
|
|
[/0[bB][0-1']*[0-1](@integersuffix)/, 'number.binary'],
|
|
|
|
[/\d[\d']*\d(@integersuffix)/, 'number'],
|
|
|
|
[/\d(@integersuffix)/, 'number'],
|
|
|
|
],
|
|
|
|
|
|
|
|
string_double: [
|
|
|
|
[/[^\\"]+/, 'string'],
|
|
|
|
[/@escapes/, 'string.escape'],
|
|
|
|
[/\\./, 'string.escape.invalid'],
|
|
|
|
[/"/, 'string', '@pop'],
|
|
|
|
],
|
|
|
|
|
|
|
|
string_single: [
|
|
|
|
[/[^\\']+/, 'string'],
|
|
|
|
[/@escapes/, 'string.escape'],
|
|
|
|
[/\\./, 'string.escape.invalid'],
|
|
|
|
[/'/, 'string', '@pop'],
|
|
|
|
],
|
|
|
|
|
|
|
|
clauses: [
|
|
|
|
[/[^(,)]/, 'tag'],
|
|
|
|
[/\)/, 'identifier', '@pop'],
|
|
|
|
],
|
|
|
|
|
|
|
|
whitespace: [[/[ \t\r\n]+/, 'white']],
|
|
|
|
},
|
|
|
|
};
|