mindoc/static/highlight/languages/haxe.js

118 lines
3.5 KiB
Go
Raw Normal View History

2017-04-21 18:20:35 +08:00
/*
Language: Haxe
Author: Christopher Kaster <ikasoki@gmail.com> (Based on the actionscript.js language file by Alexander Myadzel)
Contributors: Kenton Hamaluik <kentonh@gmail.com>
*/
function(hljs) {
var IDENT_RE = '[a-zA-Z_$][a-zA-Z0-9_$]*';
var IDENT_FUNC_RETURN_TYPE_RE = '([*]|[a-zA-Z_$][a-zA-Z0-9_$]*)';
var HAXE_BASIC_TYPES = 'Int Float String Bool Dynamic Void Array ';
return {
aliases: ['hx'],
keywords: {
keyword: 'break callback case cast catch continue default do dynamic else enum extern ' +
'for function here if import in inline 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,
hljs.C_NUMBER_MODE,
{ className: 'meta', // compiler meta
begin: '@:', end: '$'
},
{ className: 'meta', // compiler conditionals
begin: '#', end: '$',
keywords: {'meta-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: 'class', // enums
beginKeywords: 'enum', end: '\\{',
contains: [
hljs.TITLE_MODE
]
},
{ className: 'class', // abstracts
beginKeywords: 'abstract', 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: '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: 'function',
beginKeywords: 'function', end: '\\(', excludeEnd: true,
illegal: '\\S',
contains: [
hljs.TITLE_MODE
]
}
],
illegal: /<\//
};
}