add custom langs + use julia instead of pascal
Some checks are pending
ci/woodpecker/push/publish Pipeline is pending approval
Some checks are pending
ci/woodpecker/push/publish Pipeline is pending approval
This commit is contained in:
parent
024034b342
commit
c6ff926f02
4 changed files with 548 additions and 1 deletions
452
static/js/libs/hljs-languages/julia.js
Normal file
452
static/js/libs/hljs-languages/julia.js
Normal file
|
@ -0,0 +1,452 @@
|
|||
/*! `julia` grammar compiled for Highlight.js 11.9.0 */
|
||||
(function(){
|
||||
var hljsGrammar = (function () {
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
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
|
||||
Category: scientific
|
||||
*/
|
||||
|
||||
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
|
||||
const 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)
|
||||
const 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)
|
||||
const 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)
|
||||
const 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',
|
||||
];
|
||||
|
||||
const KEYWORDS = {
|
||||
$pattern: VARIABLE_NAME_RE,
|
||||
keyword: KEYWORD_LIST,
|
||||
literal: LITERAL_LIST,
|
||||
built_in: BUILT_IN_LIST,
|
||||
};
|
||||
|
||||
// placeholder for recursive self-reference
|
||||
const DEFAULT = {
|
||||
keywords: KEYWORDS,
|
||||
illegal: /<\//
|
||||
};
|
||||
|
||||
// ref: https://docs.julialang.org/en/v1/manual/integers-and-floating-point-numbers/
|
||||
const 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
|
||||
};
|
||||
|
||||
const CHAR = {
|
||||
className: 'string',
|
||||
begin: /'(.|\\[xXuU][a-zA-Z0-9]+)'/
|
||||
};
|
||||
|
||||
const INTERPOLATION = {
|
||||
className: 'subst',
|
||||
begin: /\$\(/,
|
||||
end: /\)/,
|
||||
keywords: KEYWORDS
|
||||
};
|
||||
|
||||
const INTERPOLATED_VARIABLE = {
|
||||
className: 'variable',
|
||||
begin: '\\$' + VARIABLE_NAME_RE
|
||||
};
|
||||
|
||||
// TODO: neatly escape normal code in string literal
|
||||
const STRING = {
|
||||
className: 'string',
|
||||
contains: [
|
||||
hljs.BACKSLASH_ESCAPE,
|
||||
INTERPOLATION,
|
||||
INTERPOLATED_VARIABLE
|
||||
],
|
||||
variants: [
|
||||
{
|
||||
begin: /\w*"""/,
|
||||
end: /"""\w*/,
|
||||
relevance: 10
|
||||
},
|
||||
{
|
||||
begin: /\w*"/,
|
||||
end: /"\w*/
|
||||
}
|
||||
]
|
||||
};
|
||||
|
||||
const COMMAND = {
|
||||
className: 'string',
|
||||
contains: [
|
||||
hljs.BACKSLASH_ESCAPE,
|
||||
INTERPOLATION,
|
||||
INTERPOLATED_VARIABLE
|
||||
],
|
||||
begin: '`',
|
||||
end: '`'
|
||||
};
|
||||
|
||||
const MACROCALL = {
|
||||
className: 'meta',
|
||||
begin: '@' + VARIABLE_NAME_RE
|
||||
};
|
||||
|
||||
const 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;
|
||||
}
|
||||
|
||||
return julia;
|
||||
|
||||
})();
|
||||
|
||||
hljs.registerLanguage('julia', hljsGrammar);
|
||||
})();
|
93
static/js/libs/hljs-languages/ocaml.js
Normal file
93
static/js/libs/hljs-languages/ocaml.js
Normal file
|
@ -0,0 +1,93 @@
|
|||
/*! `ocaml` grammar compiled for Highlight.js 11.9.0 */
|
||||
(function(){
|
||||
var hljsGrammar = (function () {
|
||||
'use strict';
|
||||
|
||||
/*
|
||||
Language: OCaml
|
||||
Author: Mehdi Dogguy <mehdi@dogguy.org>
|
||||
Contributors: Nicolas Braud-Santoni <nicolas.braud-santoni@ens-cachan.fr>, Mickael Delahaye <mickael.delahaye@gmail.com>
|
||||
Description: OCaml language definition.
|
||||
Website: https://ocaml.org
|
||||
Category: functional
|
||||
*/
|
||||
|
||||
function ocaml(hljs) {
|
||||
/* missing support for heredoc-like string (OCaml 4.0.2+) */
|
||||
return {
|
||||
name: 'OCaml',
|
||||
aliases: [ 'ml' ],
|
||||
keywords: {
|
||||
$pattern: '[a-z_]\\w*!?',
|
||||
keyword:
|
||||
'and as assert asr begin class constraint do done downto else end '
|
||||
+ 'exception external for fun function functor if in include '
|
||||
+ 'inherit! inherit initializer land lazy let lor lsl lsr lxor match method!|10 method '
|
||||
+ 'mod module mutable new object of open! open or private rec sig struct '
|
||||
+ 'then to try type val! val virtual when while with '
|
||||
/* camlp4 */
|
||||
+ 'parser value',
|
||||
built_in:
|
||||
/* built-in types */
|
||||
'array bool bytes char exn|5 float int int32 int64 list lazy_t|5 nativeint|5 string unit '
|
||||
/* (some) types in Pervasives */
|
||||
+ 'in_channel out_channel ref',
|
||||
literal:
|
||||
'true false'
|
||||
},
|
||||
illegal: /\/\/|>>/,
|
||||
contains: [
|
||||
{
|
||||
className: 'literal',
|
||||
begin: '\\[(\\|\\|)?\\]|\\(\\)',
|
||||
relevance: 0
|
||||
},
|
||||
hljs.COMMENT(
|
||||
'\\(\\*',
|
||||
'\\*\\)',
|
||||
{ contains: [ 'self' ] }
|
||||
),
|
||||
{ /* type variable */
|
||||
className: 'symbol',
|
||||
begin: '\'[A-Za-z_](?!\')[\\w\']*'
|
||||
/* the grammar is ambiguous on how 'a'b should be interpreted but not the compiler */
|
||||
},
|
||||
{ /* polymorphic variant */
|
||||
className: 'type',
|
||||
begin: '`[A-Z][\\w\']*'
|
||||
},
|
||||
{ /* module or constructor */
|
||||
className: 'type',
|
||||
begin: '\\b[A-Z][\\w\']*',
|
||||
relevance: 0
|
||||
},
|
||||
{ /* don't color identifiers, but safely catch all identifiers with ' */
|
||||
begin: '[a-z_]\\w*\'[\\w\']*',
|
||||
relevance: 0
|
||||
},
|
||||
hljs.inherit(hljs.APOS_STRING_MODE, {
|
||||
className: 'string',
|
||||
relevance: 0
|
||||
}),
|
||||
hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }),
|
||||
{
|
||||
className: 'number',
|
||||
begin:
|
||||
'\\b(0[xX][a-fA-F0-9_]+[Lln]?|'
|
||||
+ '0[oO][0-7_]+[Lln]?|'
|
||||
+ '0[bB][01_]+[Lln]?|'
|
||||
+ '[0-9][0-9_]*([Lln]|(\\.[0-9_]*)?([eE][-+]?[0-9_]+)?)?)',
|
||||
relevance: 0
|
||||
},
|
||||
{ begin: /->/ // relevance booster
|
||||
}
|
||||
]
|
||||
};
|
||||
}
|
||||
|
||||
return ocaml;
|
||||
|
||||
})();
|
||||
|
||||
hljs.registerLanguage('ocaml', hljsGrammar);
|
||||
})();
|
|
@ -9,7 +9,7 @@ window.addEventListener("load", () => {
|
|||
/* Aliases of langs */
|
||||
const aliases = {
|
||||
bash: ["fish"],
|
||||
pascal: ["pseudocode"],
|
||||
julia: ["pseudocode"],
|
||||
};
|
||||
for (const lang in aliases) {
|
||||
hljs.registerAliases(aliases[lang], { languageName: lang });
|
||||
|
|
|
@ -1,4 +1,6 @@
|
|||
<script src="//cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
|
||||
<script src="//unpkg.com/highlightjs-copy/dist/highlightjs-copy.min.js"></script>
|
||||
<script src="//cdnjs.cloudflare.com/ajax/libs/highlightjs-line-numbers.js/2.8.0/highlightjs-line-numbers.min.js"></script>
|
||||
<script src="/js/libs/hljs-languages/julia.js"></script>
|
||||
<script src="/js/libs/hljs-languages/ocaml.js"></script>
|
||||
<script src="/js/libs/hljs.js"></script>
|
||||
|
|
Loading…
Reference in a new issue