123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167 |
- /*
- 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
- Category: system
- */
- 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
- beginKeywords: '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 };
|