Move basic languages sources to /src/

This commit is contained in:
Alex Dima 2021-11-13 20:29:32 +01:00
parent d5e3af3744
commit 0f7286cf55
No known key found for this signature in database
GPG key ID: 39563C1504FDD0C9
247 changed files with 138 additions and 210 deletions

View file

@ -1,276 +0,0 @@
/*!---------------------------------------------------------------------------------------------
* Copyright (C) David Owens II, owensd.io. All rights reserved.
*--------------------------------------------------------------------------------------------*/
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: '"' },
{ open: "'", close: "'" },
{ open: '`', close: '`' }
],
surroundingPairs: [
{ open: '{', close: '}' },
{ open: '[', close: ']' },
{ open: '(', close: ')' },
{ open: '"', close: '"' },
{ open: "'", close: "'" },
{ open: '`', close: '`' }
]
};
export const language = <languages.IMonarchLanguage>{
defaultToken: '',
tokenPostfix: '.swift',
// TODO(owensd): Support the full range of unicode valid identifiers.
identifier: /[a-zA-Z_][\w$]*/,
// TODO(owensd): Support the @availability macro properly.
attributes: [
'@autoclosure',
'@noescape',
'@noreturn',
'@NSApplicationMain',
'@NSCopying',
'@NSManaged',
'@objc',
'@UIApplicationMain',
'@noreturn',
'@availability',
'@IBAction',
'@IBDesignable',
'@IBInspectable',
'@IBOutlet'
],
accessmodifiers: ['public', 'private', 'fileprivate', 'internal'],
keywords: [
'__COLUMN__',
'__FILE__',
'__FUNCTION__',
'__LINE__',
'as',
'as!',
'as?',
'associativity',
'break',
'case',
'catch',
'class',
'continue',
'convenience',
'default',
'deinit',
'didSet',
'do',
'dynamic',
'dynamicType',
'else',
'enum',
'extension',
'fallthrough',
'fileprivate',
'final',
'for',
'func',
'get',
'guard',
'if',
'import',
'in',
'infix',
'init',
'inout',
'internal',
'is',
'lazy',
'left',
'let',
'mutating',
'nil',
'none',
'nonmutating',
'operator',
'optional',
'override',
'postfix',
'precedence',
'prefix',
'private',
'protocol',
'Protocol',
'public',
'repeat',
'required',
'return',
'right',
'self',
'Self',
'set',
'static',
'struct',
'subscript',
'super',
'switch',
'throw',
'throws',
'try',
'try!',
'Type',
'typealias',
'unowned',
'var',
'weak',
'where',
'while',
'willSet',
'FALSE',
'TRUE'
],
symbols: /[=(){}\[\].,:;@#\_&\-<>`?!+*\\\/]/,
// Moved . to operatorstart so it can be a delimiter
operatorstart:
/[\/=\-+!*%<>&|^~?\u00A1-\u00A7\u00A9\u00AB\u00AC\u00AE\u00B0-\u00B1\u00B6\u00BB\u00BF\u00D7\u00F7\u2016-\u2017\u2020-\u2027\u2030-\u203E\u2041-\u2053\u2055-\u205E\u2190-\u23FF\u2500-\u2775\u2794-\u2BFF\u2E00-\u2E7F\u3001-\u3003\u3008-\u3030]/,
operatorend: /[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE00-\uFE0F\uFE20-\uFE2F\uE0100-\uE01EF]/,
operators: /(@operatorstart)((@operatorstart)|(@operatorend))*/,
// TODO(owensd): These are borrowed from C#; need to validate correctness for Swift.
escapes: /\\(?:[abfnrtv\\"']|x[0-9A-Fa-f]{1,4}|u[0-9A-Fa-f]{4}|U[0-9A-Fa-f]{8})/,
tokenizer: {
root: [
{ include: '@whitespace' },
{ include: '@comment' },
{ include: '@attribute' },
{ include: '@literal' },
{ include: '@keyword' },
{ include: '@invokedmethod' },
{ include: '@symbol' }
],
whitespace: [
[/\s+/, 'white'],
[/"""/, 'string.quote', '@endDblDocString']
],
endDblDocString: [
[/[^"]+/, 'string'],
[/\\"/, 'string'],
[/"""/, 'string.quote', '@popall'],
[/"/, 'string']
],
symbol: [
[/[{}()\[\]]/, '@brackets'],
[/[<>](?!@symbols)/, '@brackets'],
[/[.]/, 'delimiter'],
[/@operators/, 'operator'],
[/@symbols/, 'operator']
],
comment: [
[/\/\/\/.*$/, 'comment.doc'],
[/\/\*\*/, 'comment.doc', '@commentdocbody'],
[/\/\/.*$/, 'comment'],
[/\/\*/, 'comment', '@commentbody']
],
commentdocbody: [
[/\/\*/, 'comment', '@commentbody'],
[/\*\//, 'comment.doc', '@pop'],
[/\:[a-zA-Z]+\:/, 'comment.doc.param'],
[/./, 'comment.doc']
],
commentbody: [
[/\/\*/, 'comment', '@commentbody'],
[/\*\//, 'comment', '@pop'],
[/./, 'comment']
],
attribute: [
[
/@@@identifier/,
{
cases: {
'@attributes': 'keyword.control',
'@default': ''
}
}
]
],
literal: [
[/"/, { token: 'string.quote', next: '@stringlit' }],
[/0[b]([01]_?)+/, 'number.binary'],
[/0[o]([0-7]_?)+/, 'number.octal'],
[/0[x]([0-9a-fA-F]_?)+([pP][\-+](\d_?)+)?/, 'number.hex'],
[/(\d_?)*\.(\d_?)+([eE][\-+]?(\d_?)+)?/, 'number.float'],
[/(\d_?)+/, 'number']
],
stringlit: [
[/\\\(/, { token: 'operator', next: '@interpolatedexpression' }],
[/@escapes/, 'string'],
[/\\./, 'string.escape.invalid'],
[/"/, { token: 'string.quote', next: '@pop' }],
[/./, 'string']
],
interpolatedexpression: [
[/\(/, { token: 'operator', next: '@interpolatedexpression' }],
[/\)/, { token: 'operator', next: '@pop' }],
{ include: '@literal' },
{ include: '@keyword' },
{ include: '@symbol' }
],
keyword: [
[/`/, { token: 'operator', next: '@escapedkeyword' }],
[
/@identifier/,
{
cases: {
'@keywords': 'keyword',
'[A-Z][a-zA-Z0-9$]*': 'type.identifier',
'@default': 'identifier'
}
}
]
],
escapedkeyword: [
[/`/, { token: 'operator', next: '@pop' }],
[/./, 'identifier']
],
// symbol: [
// [ /@symbols/, 'operator' ],
// [ /@operators/, 'operator' ]
// ],
invokedmethod: [
[
/([.])(@identifier)/,
{
cases: {
$2: ['delimeter', 'type.identifier'],
'@default': ''
}
}
]
]
}
};