167 lines
4.3 KiB
JavaScript
167 lines
4.3 KiB
JavaScript
/*
|
|
Language: Haxe
|
|
Description: Haxe is an open source toolkit based on a modern, high level, strictly typed programming language.
|
|
Author: Christopher Kaster <ikasoki@gmail.com> (Based on the actionscript.js language file by Alexander Myadzel)
|
|
Contributors: Kenton Hamaluik <kentonh@gmail.com>
|
|
Website: https://haxe.org
|
|
*/
|
|
|
|
function haxe(hljs) {
|
|
const IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
|
|
|
|
// C_NUMBER_RE with underscores and literal suffixes
|
|
const HAXE_NUMBER_RE = /(-?)(\b0[xX][a-fA-F0-9_]+|(\b\d+(\.[\d_]*)?|\.[\d_]+)(([eE][-+]?\d+)|i32|u32|i64|f64)?)/;
|
|
|
|
const HAXE_BASIC_TYPES = 'Int Float String Bool Dynamic Void Array ';
|
|
|
|
return {
|
|
name: 'Haxe',
|
|
aliases: [ 'hx' ],
|
|
keywords: {
|
|
keyword: 'abstract break case cast catch continue default do dynamic else enum extern '
|
|
+ 'final for function here if import in inline is macro never new override package private get set '
|
|
+ 'public return static super switch this throw trace try typedef untyped using var while '
|
|
+ HAXE_BASIC_TYPES,
|
|
built_in:
|
|
'trace this',
|
|
literal:
|
|
'true false null _'
|
|
},
|
|
contains: [
|
|
{
|
|
className: 'string', // interpolate-able strings
|
|
begin: '\'',
|
|
end: '\'',
|
|
contains: [
|
|
hljs.BACKSLASH_ESCAPE,
|
|
{
|
|
className: 'subst', // interpolation
|
|
begin: /\$\{/,
|
|
end: /\}/
|
|
},
|
|
{
|
|
className: 'subst', // interpolation
|
|
begin: /\$/,
|
|
end: /\W\}/
|
|
}
|
|
]
|
|
},
|
|
hljs.QUOTE_STRING_MODE,
|
|
hljs.C_LINE_COMMENT_MODE,
|
|
hljs.C_BLOCK_COMMENT_MODE,
|
|
{
|
|
className: 'number',
|
|
begin: HAXE_NUMBER_RE,
|
|
relevance: 0
|
|
},
|
|
{
|
|
className: 'variable',
|
|
begin: "\\$" + IDENT_RE,
|
|
},
|
|
{
|
|
className: 'meta', // compiler meta
|
|
begin: /@:?/,
|
|
end: /\(|$/,
|
|
excludeEnd: true,
|
|
},
|
|
{
|
|
className: 'meta', // compiler conditionals
|
|
begin: '#',
|
|
end: '$',
|
|
keywords: { keyword: 'if else elseif end error' }
|
|
},
|
|
{
|
|
className: 'type', // function types
|
|
begin: /:[ \t]*/,
|
|
end: /[^A-Za-z0-9_ \t\->]/,
|
|
excludeBegin: true,
|
|
excludeEnd: true,
|
|
relevance: 0
|
|
},
|
|
{
|
|
className: 'type', // types
|
|
begin: /:[ \t]*/,
|
|
end: /\W/,
|
|
excludeBegin: true,
|
|
excludeEnd: true
|
|
},
|
|
{
|
|
className: 'type', // instantiation
|
|
begin: /new */,
|
|
end: /\W/,
|
|
excludeBegin: true,
|
|
excludeEnd: true
|
|
},
|
|
{
|
|
className: 'title.class', // enums
|
|
beginKeywords: 'enum',
|
|
end: /\{/,
|
|
contains: [ hljs.TITLE_MODE ]
|
|
},
|
|
{
|
|
className: 'title.class', // abstracts
|
|
begin: '\\babstract\\b(?=\\s*' + hljs.IDENT_RE + '\\s*\\()',
|
|
end: /[\{$]/,
|
|
contains: [
|
|
{
|
|
className: 'type',
|
|
begin: /\(/,
|
|
end: /\)/,
|
|
excludeBegin: true,
|
|
excludeEnd: true
|
|
},
|
|
{
|
|
className: 'type',
|
|
begin: /from +/,
|
|
end: /\W/,
|
|
excludeBegin: true,
|
|
excludeEnd: true
|
|
},
|
|
{
|
|
className: 'type',
|
|
begin: /to +/,
|
|
end: /\W/,
|
|
excludeBegin: true,
|
|
excludeEnd: true
|
|
},
|
|
hljs.TITLE_MODE
|
|
],
|
|
keywords: { keyword: 'abstract from to' }
|
|
},
|
|
{
|
|
className: 'title.class', // classes
|
|
begin: /\b(class|interface) +/,
|
|
end: /[\{$]/,
|
|
excludeEnd: true,
|
|
keywords: 'class interface',
|
|
contains: [
|
|
{
|
|
className: 'keyword',
|
|
begin: /\b(extends|implements) +/,
|
|
keywords: 'extends implements',
|
|
contains: [
|
|
{
|
|
className: 'type',
|
|
begin: hljs.IDENT_RE,
|
|
relevance: 0
|
|
}
|
|
]
|
|
},
|
|
hljs.TITLE_MODE
|
|
]
|
|
},
|
|
{
|
|
className: 'title.function',
|
|
beginKeywords: 'function',
|
|
end: /\(/,
|
|
excludeEnd: true,
|
|
illegal: /\S/,
|
|
contains: [ hljs.TITLE_MODE ]
|
|
}
|
|
],
|
|
illegal: /<\//
|
|
};
|
|
}
|
|
|
|
export { haxe as default };
|