123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- /*
- Language: Julia
- Description: Julia is a high-level, high-performance, dynamic programming language.
- Author: Kenta Sato <bicycle1885@gmail.com>
- Contributors: Alex Arslan <ararslan@comcast.net>, Fredrik Ekre <ekrefredrik@gmail.com>
- Website: https://julialang.org
- */
- function julia(hljs) {
- // Since there are numerous special names in Julia, it is too much trouble
- // to maintain them by hand. Hence these names (i.e. keywords, literals and
- // built-ins) are automatically generated from Julia 1.5.2 itself through
- // the following scripts for each.
- // ref: https://docs.julialang.org/en/v1/manual/variables/#Allowed-Variable-Names
- var VARIABLE_NAME_RE = '[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*';
- // # keyword generator, multi-word keywords handled manually below (Julia 1.5.2)
- // import REPL.REPLCompletions
- // res = String["in", "isa", "where"]
- // for kw in collect(x.keyword for x in REPLCompletions.complete_keyword(""))
- // if !(contains(kw, " ") || kw == "struct")
- // push!(res, kw)
- // end
- // end
- // sort!(unique!(res))
- // foreach(x -> println("\'", x, "\',"), res)
- var KEYWORD_LIST = [
- 'baremodule',
- 'begin',
- 'break',
- 'catch',
- 'ccall',
- 'const',
- 'continue',
- 'do',
- 'else',
- 'elseif',
- 'end',
- 'export',
- 'false',
- 'finally',
- 'for',
- 'function',
- 'global',
- 'if',
- 'import',
- 'in',
- 'isa',
- 'let',
- 'local',
- 'macro',
- 'module',
- 'quote',
- 'return',
- 'true',
- 'try',
- 'using',
- 'where',
- 'while',
- ];
- // # literal generator (Julia 1.5.2)
- // import REPL.REPLCompletions
- // res = String["true", "false"]
- // for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),
- // REPLCompletions.completions("", 0)[1])
- // try
- // v = eval(Symbol(compl.mod))
- // if !(v isa Function || v isa Type || v isa TypeVar || v isa Module || v isa Colon)
- // push!(res, compl.mod)
- // end
- // catch e
- // end
- // end
- // sort!(unique!(res))
- // foreach(x -> println("\'", x, "\',"), res)
- var LITERAL_LIST = [
- 'ARGS',
- 'C_NULL',
- 'DEPOT_PATH',
- 'ENDIAN_BOM',
- 'ENV',
- 'Inf',
- 'Inf16',
- 'Inf32',
- 'Inf64',
- 'InsertionSort',
- 'LOAD_PATH',
- 'MergeSort',
- 'NaN',
- 'NaN16',
- 'NaN32',
- 'NaN64',
- 'PROGRAM_FILE',
- 'QuickSort',
- 'RoundDown',
- 'RoundFromZero',
- 'RoundNearest',
- 'RoundNearestTiesAway',
- 'RoundNearestTiesUp',
- 'RoundToZero',
- 'RoundUp',
- 'VERSION|0',
- 'devnull',
- 'false',
- 'im',
- 'missing',
- 'nothing',
- 'pi',
- 'stderr',
- 'stdin',
- 'stdout',
- 'true',
- 'undef',
- 'π',
- 'ℯ',
- ];
- // # built_in generator (Julia 1.5.2)
- // import REPL.REPLCompletions
- // res = String[]
- // for compl in filter!(x -> isa(x, REPLCompletions.ModuleCompletion) && (x.parent === Base || x.parent === Core),
- // REPLCompletions.completions("", 0)[1])
- // try
- // v = eval(Symbol(compl.mod))
- // if (v isa Type || v isa TypeVar) && (compl.mod != "=>")
- // push!(res, compl.mod)
- // end
- // catch e
- // end
- // end
- // sort!(unique!(res))
- // foreach(x -> println("\'", x, "\',"), res)
- var BUILT_IN_LIST = [
- 'AbstractArray',
- 'AbstractChannel',
- 'AbstractChar',
- 'AbstractDict',
- 'AbstractDisplay',
- 'AbstractFloat',
- 'AbstractIrrational',
- 'AbstractMatrix',
- 'AbstractRange',
- 'AbstractSet',
- 'AbstractString',
- 'AbstractUnitRange',
- 'AbstractVecOrMat',
- 'AbstractVector',
- 'Any',
- 'ArgumentError',
- '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',
- 'LinRange',
- 'LineNumberNode',
- 'LinearIndices',
- 'LoadError',
- 'MIME',
- 'Matrix',
- 'Method',
- 'MethodError',
- 'Missing',
- 'MissingException',
- 'Module',
- 'NTuple',
- 'NamedTuple',
- 'Nothing',
- 'Number',
- 'OrdinalRange',
- 'OutOfMemoryError',
- 'OverflowError',
- 'Pair',
- 'PartialQuickSort',
- 'PermutedDimsArray',
- 'Pipe',
- 'ProcessFailedException',
- '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',
- 'TaskFailedException',
- 'Text',
- 'TextDisplay',
- 'Timer',
- 'Tuple',
- 'Type',
- 'TypeError',
- 'TypeVar',
- 'UInt',
- 'UInt128',
- 'UInt16',
- 'UInt32',
- 'UInt64',
- 'UInt8',
- 'UndefInitializer',
- 'UndefKeywordError',
- 'UndefRefError',
- 'UndefVarError',
- 'Union',
- 'UnionAll',
- 'UnitRange',
- 'Unsigned',
- 'Val',
- 'Vararg',
- 'VecElement',
- 'VecOrMat',
- 'Vector',
- 'VersionNumber',
- 'WeakKeyDict',
- 'WeakRef',
- ];
- var KEYWORDS = {
- $pattern: VARIABLE_NAME_RE,
- keyword: KEYWORD_LIST,
- literal: LITERAL_LIST,
- built_in: BUILT_IN_LIST,
- };
- // placeholder for recursive self-reference
- var DEFAULT = {
- keywords: KEYWORDS, illegal: /<\//
- };
- // ref: https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/
- var NUMBER = {
- className: 'number',
- // supported numeric literals:
- // * binary literal (e.g. 0x10)
- // * octal literal (e.g. 0o76543210)
- // * hexadecimal literal (e.g. 0xfedcba876543210)
- // * hexadecimal floating point literal (e.g. 0x1p0, 0x1.2p2)
- // * decimal literal (e.g. 9876543210, 100_000_000)
- // * floating pointe literal (e.g. 1.2, 1.2f, .2, 1., 1.2e10, 1.2e-10)
- begin: /(\b0x[\d_]*(\.[\d_]*)?|0x\.\d[\d_]*)p[-+]?\d+|\b0[box][a-fA-F0-9][a-fA-F0-9_]*|(\b\d[\d_]*(\.[\d_]*)?|\.\d[\d_]*)([eEfF][-+]?\d+)?/,
- relevance: 0
- };
- var CHAR = {
- className: 'string',
- begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
- };
- var INTERPOLATION = {
- className: 'subst',
- begin: /\$\(/, end: /\)/,
- keywords: KEYWORDS
- };
- var INTERPOLATED_VARIABLE = {
- className: 'variable',
- begin: '\\$' + VARIABLE_NAME_RE
- };
- // TODO: neatly escape normal code in string literal
- var STRING = {
- className: 'string',
- contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
- variants: [
- { begin: /\w*"""/, end: /"""\w*/, relevance: 10 },
- { begin: /\w*"/, end: /"\w*/ }
- ]
- };
- var COMMAND = {
- className: 'string',
- contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
- begin: '`', end: '`'
- };
- var MACROCALL = {
- className: 'meta',
- begin: '@' + VARIABLE_NAME_RE
- };
- var COMMENT = {
- className: 'comment',
- variants: [
- { begin: '#=', end: '=#', relevance: 10 },
- { begin: '#', end: '$' }
- ]
- };
- DEFAULT.name = 'Julia';
- DEFAULT.contains = [
- NUMBER,
- CHAR,
- STRING,
- COMMAND,
- MACROCALL,
- COMMENT,
- hljs.HASH_COMMENT_MODE,
- {
- className: 'keyword',
- begin:
- '\\b(((abstract|primitive)\\s+)type|(mutable\\s+)?struct)\\b'
- },
- {begin: /<:/} // relevance booster
- ];
- INTERPOLATION.contains = DEFAULT.contains;
- return DEFAULT;
- }
- module.exports = julia;
|