160 lines
6.2 KiB
JavaScript
160 lines
6.2 KiB
JavaScript
|
module.exports = function(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 (v0.3.0) itself through
|
|||
|
// following scripts for each.
|
|||
|
|
|||
|
var KEYWORDS = {
|
|||
|
// # keyword generator
|
|||
|
// println("\"in\",")
|
|||
|
// for kw in Base.REPLCompletions.complete_keyword("")
|
|||
|
// println("\"$kw\",")
|
|||
|
// end
|
|||
|
keyword:
|
|||
|
'in abstract baremodule begin bitstype break catch ccall const continue do else elseif end export ' +
|
|||
|
'finally for function global if immutable import importall let local macro module quote return try type ' +
|
|||
|
'typealias using while',
|
|||
|
|
|||
|
// # literal generator
|
|||
|
// println("\"true\",\n\"false\"")
|
|||
|
// for name in Base.REPLCompletions.completions("", 0)[1]
|
|||
|
// try
|
|||
|
// s = symbol(name)
|
|||
|
// v = eval(s)
|
|||
|
// if !isa(v, Function) &&
|
|||
|
// !isa(v, DataType) &&
|
|||
|
// !issubtype(typeof(v), Tuple) &&
|
|||
|
// !isa(v, UnionType) &&
|
|||
|
// !isa(v, Module) &&
|
|||
|
// !isa(v, TypeConstructor) &&
|
|||
|
// !isa(v, Colon)
|
|||
|
// println("\"$name\",")
|
|||
|
// end
|
|||
|
// end
|
|||
|
// end
|
|||
|
literal:
|
|||
|
'true false ANY ARGS CPU_CORES C_NULL DL_LOAD_PATH DevNull ENDIAN_BOM ENV I|0 Inf Inf16 Inf32 ' +
|
|||
|
'InsertionSort JULIA_HOME LOAD_PATH MS_ASYNC MS_INVALIDATE MS_SYNC MergeSort NaN NaN16 NaN32 OS_NAME QuickSort ' +
|
|||
|
'RTLD_DEEPBIND RTLD_FIRST RTLD_GLOBAL RTLD_LAZY RTLD_LOCAL RTLD_NODELETE RTLD_NOLOAD RTLD_NOW RoundDown ' +
|
|||
|
'RoundFromZero RoundNearest RoundToZero RoundUp STDERR STDIN STDOUT VERSION WORD_SIZE catalan cglobal e|0 eu|0 ' +
|
|||
|
'eulergamma golden im nothing pi γ π φ',
|
|||
|
|
|||
|
// # built_in generator:
|
|||
|
// for name in Base.REPLCompletions.completions("", 0)[1]
|
|||
|
// try
|
|||
|
// v = eval(symbol(name))
|
|||
|
// if isa(v, DataType)
|
|||
|
// println("\"$name\",")
|
|||
|
// end
|
|||
|
// end
|
|||
|
// end
|
|||
|
built_in:
|
|||
|
'ASCIIString AbstractArray AbstractRNG AbstractSparseArray Any ArgumentError Array Associative Base64Pipe ' +
|
|||
|
'Bidiagonal BigFloat BigInt BitArray BitMatrix BitVector Bool BoundsError Box CFILE Cchar Cdouble Cfloat Char ' +
|
|||
|
'CharString Cint Clong Clonglong ClusterManager Cmd Coff_t Colon Complex Complex128 Complex32 Complex64 ' +
|
|||
|
'Condition Cptrdiff_t Cshort Csize_t Cssize_t Cuchar Cuint Culong Culonglong Cushort Cwchar_t DArray DataType ' +
|
|||
|
'DenseArray Diagonal Dict DimensionMismatch DirectIndexString Display DivideError DomainError EOFError ' +
|
|||
|
'EachLine Enumerate ErrorException Exception Expr Factorization FileMonitor FileOffset Filter Float16 Float32 ' +
|
|||
|
'Float64 FloatRange FloatingPoint Function GetfieldNode GotoNode Hermitian IO IOBuffer IOStream IPv4 IPv6 ' +
|
|||
|
'InexactError Int Int128 Int16 Int32 Int64 Int8 IntSet Integer InterruptException IntrinsicFunction KeyError ' +
|
|||
|
'LabelNode LambdaStaticData LineNumberNode LoadError LocalProcess MIME MathConst MemoryError MersenneTwister ' +
|
|||
|
'Method MethodError MethodTable Module NTuple NewvarNode Nothing Number ObjectIdDict OrdinalRange ' +
|
|||
|
'OverflowError ParseError PollingFileWatcher ProcessExitedException ProcessGroup Ptr QuoteNode Range Range1 ' +
|
|||
|
'Ranges Rational RawFD Real Regex RegexMatch RemoteRef RepString RevString RopeString RoundingMode Set ' +
|
|||
|
'SharedArray Signed SparseMatrixCSC StackOverflowError Stat StatStruct StepRange String SubArray SubString ' +
|
|||
|
'SymTridiagonal Symbol SymbolNode Symmetric SystemError Task TextDisplay Timer TmStruct TopNode Triangular ' +
|
|||
|
'Tridiagonal Type TypeConstructor TypeError TypeName TypeVar UTF16String UTF32String UTF8String UdpSocket ' +
|
|||
|
'Uint Uint128 Uint16 Uint32 Uint64 Uint8 UndefRefError UndefVarError UniformScaling UnionType UnitRange ' +
|
|||
|
'Unsigned Vararg VersionNumber WString WeakKeyDict WeakRef Woodbury Zip'
|
|||
|
};
|
|||
|
|
|||
|
// ref: http://julia.readthedocs.org/en/latest/manual/variables/#allowed-variable-names
|
|||
|
var VARIABLE_NAME_RE = "[A-Za-z_\\u00A1-\\uFFFF][A-Za-z_0-9\\u00A1-\\uFFFF]*";
|
|||
|
|
|||
|
// placeholder for recursive self-reference
|
|||
|
var DEFAULT = { lexemes: VARIABLE_NAME_RE, keywords: KEYWORDS };
|
|||
|
|
|||
|
var TYPE_ANNOTATION = {
|
|||
|
className: "type-annotation",
|
|||
|
begin: /::/
|
|||
|
};
|
|||
|
|
|||
|
var SUBTYPE = {
|
|||
|
className: "subtype",
|
|||
|
begin: /<:/
|
|||
|
};
|
|||
|
|
|||
|
// ref: http://julia.readthedocs.org/en/latest/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: "char",
|
|||
|
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*/ },
|
|||
|
{ begin: /\w*"""/, end: /"""\w*/ }
|
|||
|
]
|
|||
|
};
|
|||
|
|
|||
|
var COMMAND = {
|
|||
|
className: "string",
|
|||
|
contains: [hljs.BACKSLASH_ESCAPE, INTERPOLATION, INTERPOLATED_VARIABLE],
|
|||
|
begin: '`', end: '`'
|
|||
|
};
|
|||
|
|
|||
|
var MACROCALL = {
|
|||
|
className: "macrocall",
|
|||
|
begin: "@" + VARIABLE_NAME_RE
|
|||
|
};
|
|||
|
|
|||
|
var COMMENT = {
|
|||
|
className: "comment",
|
|||
|
variants: [
|
|||
|
{ begin: "#=", end: "=#", relevance: 10 },
|
|||
|
{ begin: '#', end: '$' }
|
|||
|
]
|
|||
|
};
|
|||
|
|
|||
|
DEFAULT.contains = [
|
|||
|
NUMBER,
|
|||
|
CHAR,
|
|||
|
TYPE_ANNOTATION,
|
|||
|
SUBTYPE,
|
|||
|
STRING,
|
|||
|
COMMAND,
|
|||
|
MACROCALL,
|
|||
|
COMMENT,
|
|||
|
hljs.HASH_COMMENT_MODE
|
|||
|
];
|
|||
|
INTERPOLATION.contains = DEFAULT.contains;
|
|||
|
|
|||
|
return DEFAULT;
|
|||
|
};
|