Parcourir la source

Create julia.ts

alan.invents il y a 5 ans
Parent
commit
1e47fbb52a
1 fichiers modifiés avec 297 ajouts et 0 suppressions
  1. 297 0
      src/julia/julia.ts

+ 297 - 0
src/julia/julia.ts

@@ -0,0 +1,297 @@
+/*---------------------------------------------------------------------------------------------
+ *  Copyright (c) Microsoft Corporation. All rights reserved.
+ *  Licensed under the MIT License. See License.txt in the project root for license information.
+ *--------------------------------------------------------------------------------------------*/
+
+'use strict';
+
+import IRichLanguageConfiguration = monaco.languages.LanguageConfiguration;
+import ILanguage = monaco.languages.IMonarchLanguage;
+
+export const conf: IRichLanguageConfiguration = {
+	brackets: [
+		['{', '}'],
+		['[', ']'],
+		['(', ')']
+	],
+	autoClosingPairs: [
+		{open: '{', close: '}'},
+		{open: '[', close: ']'},
+		{open: '(', close: ')'},
+		{open: '"', close: '"'},
+		{open: '\'', close: '\''},
+	],
+	surroundingPairs: [
+		{open: '{', close: '}'},
+		{open: '[', close: ']'},
+		{open: '(', close: ')'},
+		{open: '"', close: '"'},
+		{open: '\'', close: '\''},
+	]
+};
+
+export const language = <ILanguage>{
+	tokenPostfix: '.julia',
+	
+	keywords: [
+		'begin', 'while', 'if', 'for', 'try', 'return', 'break', 'continue',
+		'function', 'macro', 'quote', 'let', 'local', 'global', 'const', 'do',
+		'struct', 'module', 'baremodule', 'using', 'import', 'export',
+		'end', 'else', 'elseif', 'catch', 'finally',
+		'mutable', 'primitive', 'abstract', 'type',
+		'in', 'isa', 'where', 'new'
+	],
+
+	types: [
+		'LinRange', 'LineNumberNode', 'LinearIndices', 'LoadError', 'MIME', 'Matrix', 'Method', 'MethodError',
+		'Missing', 'MissingException', 'Module', 'NTuple', 'NamedTuple', 'Nothing', 'Number', 'OrdinalRange',
+		'OutOfMemoryError', 'OverflowError', 'Pair', 'PartialQuickSort', 'PermutedDimsArray', 'Pipe', 'Ptr',
+		'QuoteNode', 'Rational', 'RawFD', 'ReadOnlyMemoryError', 'Real', 'ReentrantLock', 'Ref', 'Regex', 'RegexMatch',
+		'RoundingMode', 'SegmentationFault', 'Set', 'Signed', 'Some', 'StackOverflowError', 'StepRange', 'StepRangeLen',
+		'StridedArray', 'StridedMatrix', 'StridedVecOrMat', 'StridedVector', 'String', 'StringIndexError', 'SubArray', 
+		'SubString', 'SubstitutionString', 'Symbol', 'SystemError', 'Task', 'Text', 'TextDisplay', 'Timer', 'Tuple', 'Type', 
+		'TypeError', 'TypeVar', 'UInt', 'UInt128', 'UInt16', 'UInt32', 'UInt64', 'UInt8', 'UndefInitializer', 'AbstractArray', 
+		'UndefKeywordError', 'AbstractChannel', 'UndefRefError', 'AbstractChar', 'UndefVarError', 'AbstractDict', 'Union', 
+		'AbstractDisplay', 'UnionAll', 'AbstractFloat', 'UnitRange', 'AbstractIrrational', 'Unsigned', 'AbstractMatrix', 
+		'AbstractRange', 'Val', 'AbstractSet', 'Vararg', 'AbstractString', 'VecElement', 'AbstractUnitRange', 'VecOrMat', 
+		'AbstractVecOrMat', 'Vector', 'AbstractVector', 'VersionNumber', 'Any', 'WeakKeyDict', 'ArgumentError', 'WeakRef', 
+		'Array', 'AssertionError', 'BigFloat', 'BigInt', 'BitArray', 'BitMatrix', 'BitSet', 'BitVector', 'Bool', 'BoundsError', 
+		'CapturedException', 'CartesianIndex', 'CartesianIndices', 'Cchar', 'Cdouble', 'Cfloat', 'Channel', 'Char', 'Cint', 
+		'Cintmax_t', 'Clong', 'Clonglong', 'Cmd', 'Colon', 'Complex', 'ComplexF16', 'ComplexF32', 'ComplexF64', 
+		'CompositeException', 'Condition', 'Cptrdiff_t', 'Cshort', 'Csize_t', 'Cssize_t', 'Cstring', 'Cuchar', 'Cuint', 
+		'Cuintmax_t', 'Culong', 'Culonglong', 'Cushort', 'Cvoid', 'Cwchar_t', 'Cwstring', 'DataType', 'DenseArray', 
+		'DenseMatrix', 'DenseVecOrMat', 'DenseVector', 'Dict', 'DimensionMismatch', 'Dims', 'DivideError', 'DomainError', 
+		'EOFError', 'Enum', 'ErrorException', 'Exception', 'ExponentialBackOff', 'Expr', 'Float16', 'Float32', 'Float64', 
+		'Function', 'GlobalRef', 'HTML', 'IO', 'IOBuffer', 'IOContext', 'IOStream', 'IdDict', 'IndexCartesian', 'IndexLinear', 
+		'IndexStyle', 'InexactError', 'InitError', 'Int', 'Int128', 'Int16', 'Int32', 'Int64', 'Int8', 'Integer', 
+		'InterruptException', 'InvalidStateException', 'Irrational', 'KeyError'
+	],
+
+	keywordops: [
+		'<:', '>:', ':', '=>', '...', '.', '->', '?'
+	],
+
+	allops: /[^\w\d\s()\[\]{}"'#]+/,
+
+	constants: [
+		'true', 'false', 'nothing', 'missing', 'undef',
+		'Inf', 'pi', 'NaN', 'π', 'ℯ',
+		'ans',
+		'PROGRAM_FILE', 'ARGS', 'C_NULL', 'VERSION', 'DEPOT_PATH', 'LOAD_PATH'
+	],
+
+	operators: [
+		'!', '!=', '!==', '%', '&', '*', '+', '-', '/', '//', '<', '<<', '<=', '==', '===',
+		'=>', '>', '>=', '>>', '>>>', '\\', '^', '|', '|>', '~', '÷', '∈', '∉', '∋', '∌', '∘',
+		'√', '∛', '∩', '∪', '≈', '≉', '≠', '≡', '≢', '≤', '≥', '⊆', '⊇', '⊈', '⊉', '⊊', '⊋', '⊻'
+	],
+
+	brackets: [
+		{ open: '(', close: ')', token: 'delimiter.parenthesis' },
+		{ open: '{', close: '}', token: 'delimiter.curly' },
+		{ open: '[', close: ']', token: 'delimiter.square' }
+	],
+
+	ident: /π|ℯ|\b(?!\d)\w+\b/,
+
+	// escape sequences
+	escape: /(?:[abefnrstv\\"'\n\r]|[0-7]{1,3}|x[0-9A-Fa-f]{1,2}|u[0-9A-Fa-f]{4})/,
+	escapes: /\\(?:C\-(@escape|.)|c(@escape|.)|@escape)/,
+
+	// The main tokenizer for our languages
+	tokenizer: {
+		root: [
+			[/(::)\s*|\b(isa)\s+/, 'keyword', '@typeanno'],
+			[/\b(isa)(\s*\(@ident\s*,\s*)/, ['keyword', {token: '', next: '@typeanno'}]],
+			[/\b(type|struct)[ \t]+/, 'keyword', '@typeanno'],
+
+			// symbols
+			[/^\s*:@ident[!?]?/, 'metatag'],
+			[/(return)(\s*:@ident[!?]?)/, ['keyword', 'metatag']],
+			[/(\(|\[|\{|@allops)(\s*:@ident[!?]?)/, ['', 'metatag']],
+			[/:\(/, 'metatag', '@quote'],
+
+			// regular expressions
+			[/r"""/, 'regexp.delim', '@tregexp'],
+			[/r"/, 'regexp.delim', '@sregexp'],
+
+			// strings
+			[/raw"""/, 'string.delim', '@rtstring'],
+			[/[bv]?"""/, 'string.delim', '@dtstring'],
+			
+			[/raw"/, 'string.delim', '@rsstring'],
+			[/[bv]?"/, 'string.delim', '@dsstring'],
+
+			[/(@ident)\{/, {
+				cases: {
+					'$1@types': {token: 'type', next: '@gen'},
+					'@default': {token: 'type', next: '@gen'}
+				}
+			}],
+
+			[/@ident[!?'']?(?=\.?\()/, {
+				cases: {
+					'@types': 'type',
+					'@keywords': 'keyword',
+					'@constants': 'variable',
+					'@default': 'keyword.flow'
+				}
+			}],
+
+			[/@ident[!?']?/, {
+				cases: {
+					'@types': 'type',
+					'@keywords': 'keyword',
+					'@constants': 'variable',
+					'@default': 'identifier'
+				}
+			}],
+
+			[/\$\w+/, 'key'],
+			[/\$\(/, 'key', '@paste'],
+			
+			[/@@ident/, 'annotation'],
+
+			// whitespace
+			{include: '@whitespace'},
+
+			// characters
+			[/'(?:@escapes|.)'/, 'string.character'],
+
+			// delimiters and operators
+			[/[()\[\]{}]/, '@brackets'],
+			[/@allops/, {
+				cases: {
+					'@keywordops': 'keyword',
+					'@operators': 'operator',
+				}
+			}],
+			[/[;,]/, 'delimiter'],
+
+
+			// numbers
+			[/0[xX][0-9a-fA-F](_?[0-9a-fA-F])*/, 'number.hex'],
+			[/0[_oO][0-7](_?[0-7])*/, 'number.octal'],
+			[/0[bB][01](_?[01])*/, 'number.binary'],
+			[/[+\-]?\d+(\.\d+)?(im?|[eE][+\-]?\d+(\.\d+)?)?/, 'number']
+		],
+
+		// type
+		typeanno: [
+			[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*\{/, 'type', '@gen'],
+			[/([a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*)(\s*<:\s*)/, ['type', 'keyword']],
+			[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/, 'type', '@pop'],
+			['', '', '@pop']
+		],
+
+		// generic type
+		gen: [
+			[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*\{/, 'type', '@push'],
+			[/[a-zA-Z_]\w*(?:\.[a-zA-Z_]\w*)*/, 'type'],
+			[/<:/, 'keyword'],
+			[/(\})(\s*<:\s*)/, ['type', {token: 'keyword', next: '@pop'}]],
+			[/\}/, 'type', '@pop'],
+			{include: '@root'}
+		],
+
+		// $(...)
+		quote: [
+			[/\$\(/, 'key', '@paste'],
+			[/\(/, '@brackets', '@paren'],
+			[/\)/, 'metatag', '@pop'],
+			{include: '@root'}
+		],
+
+		// :(...)
+		paste: [
+			[/:\(/, 'metatag', '@quote'],
+			[/\(/, '@brackets', '@paren'],
+			[/\)/, 'key', '@pop'],
+			{include: '@root'}
+		],
+
+		// (...)
+		paren: [
+			[/\$\(/, 'key', '@paste'],
+			[/:\(/, 'metatag', '@quote'],
+			[/\(/, '@brackets', '@push'],
+			[/\)/, '@brackets', '@pop'],
+			{include: '@root'}
+		],
+
+		// r"egex string"
+		sregexp: [
+			[/^.*/, 'invalid'],
+			[/[^\\"()\[\]{}]/, 'regexp'],
+			[/[()\[\]{}]/, '@brackets'],
+			[/\\./, 'operator.scss'],
+			[/"[imsx]*/, 'regexp.delim', '@pop']
+		],
+		tregexp: [
+			[/[^\\"()\[\]{}]/, 'regexp'],
+			[/[()\[\]{}]/, '@brackets'],
+			[/\\./, 'operator.scss'],
+			[/"(?!"")/, 'string'],
+			[/"""[imsx]*/, 'regexp.delim', '@pop']
+		],
+
+		// raw"string"
+		rsstring: [
+			[/^.*/, 'invalid'],
+			[/[^\\"]/, 'string'],
+			[/\\./, 'string.escape'],
+			[/"/, 'string.delim', '@pop']
+		],
+		rtstring: [
+			[/[^\\"]/, 'string'],
+			[/\\./, 'string.escape'],
+			[/"(?!"")/, 'string'],
+			[/"""/, 'string.delim', '@pop']
+		],
+
+		// "string".
+		dsstring: [
+			[/^.*/, 'invalid'],
+			[/[^\\"\$]/, 'string'],
+			[/\$/, '', '@interpolated'],
+			[/@escapes/, 'string.escape'],
+			[/\\./, 'string.escape.invalid'],
+			[/"/, 'string.delim', '@pop'],
+		],
+		dtstring: [
+			[/[^\\"\$]/, 'string'],
+			[/\$/, '', '@interpolated'],
+			[/@escapes/, 'string.escape'],
+			[/\\./, 'string.escape.invalid'],
+			[/"(?!"")/, 'string'],
+			[/"""/, 'string.delim', '@pop'],
+		],
+
+		// interpolated sequence
+		interpolated: [
+			[/\(/, { token: '', switchTo: '@interpolated_compound' }],
+			[/[a-zA-Z_]\w*/, 'identifier'],
+			['', '', '@pop'] // just a $ is interpreted as a $
+		],
+
+		// any code
+		interpolated_compound: [
+			[/\)/, '', '@pop'],
+			{include: '@root'},
+		],
+
+		// whitespace & comments
+		whitespace: [
+			[/[ \t\r\n]+/, ''],
+			[/#=/, 'comment', '@multi_comment'],
+			[/#.*$/, 'comment'],
+		],
+
+		multi_comment: [
+			[/#=/, 'comment', '@push'],
+			[/=#/, 'comment', '@pop'],
+			[/=(?!#)|#(?!=)/, 'comment'],
+			[/[^#=]+/, 'comment'],
+		]
+	}
+};