You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
123 lines
3.1 KiB
123 lines
3.1 KiB
/* |
|
Language: AngelScript |
|
Author: Melissa Geels <melissa@nimble.tools> |
|
Category: scripting |
|
Website: https://www.angelcode.com/angelscript/ |
|
*/ |
|
|
|
/** @type LanguageFn */ |
|
function angelscript(hljs) { |
|
var builtInTypeMode = { |
|
className: 'built_in', |
|
begin: '\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)' |
|
}; |
|
|
|
var objectHandleMode = { |
|
className: 'symbol', |
|
begin: '[a-zA-Z0-9_]+@' |
|
}; |
|
|
|
var genericMode = { |
|
className: 'keyword', |
|
begin: '<', end: '>', |
|
contains: [ builtInTypeMode, objectHandleMode ] |
|
}; |
|
|
|
builtInTypeMode.contains = [ genericMode ]; |
|
objectHandleMode.contains = [ genericMode ]; |
|
|
|
return { |
|
name: 'AngelScript', |
|
aliases: ['asc'], |
|
|
|
keywords: |
|
'for in|0 break continue while do|0 return if else case switch namespace is cast ' + |
|
'or and xor not get|0 in inout|10 out override set|0 private public const default|0 ' + |
|
'final shared external mixin|10 enum typedef funcdef this super import from interface ' + |
|
'abstract|0 try catch protected explicit property', |
|
|
|
// avoid close detection with C# and JS |
|
illegal: '(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])', |
|
|
|
contains: [ |
|
{ // 'strings' |
|
className: 'string', |
|
begin: '\'', end: '\'', |
|
illegal: '\\n', |
|
contains: [ hljs.BACKSLASH_ESCAPE ], |
|
relevance: 0 |
|
}, |
|
|
|
// """heredoc strings""" |
|
{ |
|
className: 'string', |
|
begin: '"""', end: '"""' |
|
}, |
|
|
|
{ // "strings" |
|
className: 'string', |
|
begin: '"', end: '"', |
|
illegal: '\\n', |
|
contains: [ hljs.BACKSLASH_ESCAPE ], |
|
relevance: 0 |
|
}, |
|
|
|
hljs.C_LINE_COMMENT_MODE, // single-line comments |
|
hljs.C_BLOCK_COMMENT_MODE, // comment blocks |
|
|
|
{ // metadata |
|
className: 'string', |
|
begin: '^\\s*\\[', end: '\\]', |
|
}, |
|
|
|
{ // interface or namespace declaration |
|
beginKeywords: 'interface namespace', end: /\{/, |
|
illegal: '[;.\\-]', |
|
contains: [ |
|
{ // interface or namespace name |
|
className: 'symbol', |
|
begin: '[a-zA-Z0-9_]+' |
|
} |
|
] |
|
}, |
|
|
|
{ // class declaration |
|
beginKeywords: 'class', end: /\{/, |
|
illegal: '[;.\\-]', |
|
contains: [ |
|
{ // class name |
|
className: 'symbol', |
|
begin: '[a-zA-Z0-9_]+', |
|
contains: [ |
|
{ |
|
begin: '[:,]\\s*', |
|
contains: [ |
|
{ |
|
className: 'symbol', |
|
begin: '[a-zA-Z0-9_]+' |
|
} |
|
] |
|
} |
|
] |
|
} |
|
] |
|
}, |
|
|
|
builtInTypeMode, // built-in types |
|
objectHandleMode, // object handles |
|
|
|
{ // literals |
|
className: 'literal', |
|
begin: '\\b(null|true|false)' |
|
}, |
|
|
|
{ // numbers |
|
className: 'number', |
|
relevance: 0, |
|
begin: '(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)' |
|
} |
|
] |
|
}; |
|
} |
|
|
|
module.exports = angelscript;
|
|
|