1 | /*
|
---|
2 | Language: AngelScript
|
---|
3 | Author: Melissa Geels <melissa@nimble.tools>
|
---|
4 | Category: scripting
|
---|
5 | Website: https://www.angelcode.com/angelscript/
|
---|
6 | */
|
---|
7 |
|
---|
8 | /** @type LanguageFn */
|
---|
9 | function angelscript(hljs) {
|
---|
10 | var builtInTypeMode = {
|
---|
11 | className: 'built_in',
|
---|
12 | begin: '\\b(void|bool|int|int8|int16|int32|int64|uint|uint8|uint16|uint32|uint64|string|ref|array|double|float|auto|dictionary)'
|
---|
13 | };
|
---|
14 |
|
---|
15 | var objectHandleMode = {
|
---|
16 | className: 'symbol',
|
---|
17 | begin: '[a-zA-Z0-9_]+@'
|
---|
18 | };
|
---|
19 |
|
---|
20 | var genericMode = {
|
---|
21 | className: 'keyword',
|
---|
22 | begin: '<', end: '>',
|
---|
23 | contains: [ builtInTypeMode, objectHandleMode ]
|
---|
24 | };
|
---|
25 |
|
---|
26 | builtInTypeMode.contains = [ genericMode ];
|
---|
27 | objectHandleMode.contains = [ genericMode ];
|
---|
28 |
|
---|
29 | return {
|
---|
30 | name: 'AngelScript',
|
---|
31 | aliases: ['asc'],
|
---|
32 |
|
---|
33 | keywords:
|
---|
34 | 'for in|0 break continue while do|0 return if else case switch namespace is cast ' +
|
---|
35 | 'or and xor not get|0 in inout|10 out override set|0 private public const default|0 ' +
|
---|
36 | 'final shared external mixin|10 enum typedef funcdef this super import from interface ' +
|
---|
37 | 'abstract|0 try catch protected explicit property',
|
---|
38 |
|
---|
39 | // avoid close detection with C# and JS
|
---|
40 | illegal: '(^using\\s+[A-Za-z0-9_\\.]+;$|\\bfunction\\s*[^\\(])',
|
---|
41 |
|
---|
42 | contains: [
|
---|
43 | { // 'strings'
|
---|
44 | className: 'string',
|
---|
45 | begin: '\'', end: '\'',
|
---|
46 | illegal: '\\n',
|
---|
47 | contains: [ hljs.BACKSLASH_ESCAPE ],
|
---|
48 | relevance: 0
|
---|
49 | },
|
---|
50 |
|
---|
51 | // """heredoc strings"""
|
---|
52 | {
|
---|
53 | className: 'string',
|
---|
54 | begin: '"""', end: '"""'
|
---|
55 | },
|
---|
56 |
|
---|
57 | { // "strings"
|
---|
58 | className: 'string',
|
---|
59 | begin: '"', end: '"',
|
---|
60 | illegal: '\\n',
|
---|
61 | contains: [ hljs.BACKSLASH_ESCAPE ],
|
---|
62 | relevance: 0
|
---|
63 | },
|
---|
64 |
|
---|
65 | hljs.C_LINE_COMMENT_MODE, // single-line comments
|
---|
66 | hljs.C_BLOCK_COMMENT_MODE, // comment blocks
|
---|
67 |
|
---|
68 | { // metadata
|
---|
69 | className: 'string',
|
---|
70 | begin: '^\\s*\\[', end: '\\]',
|
---|
71 | },
|
---|
72 |
|
---|
73 | { // interface or namespace declaration
|
---|
74 | beginKeywords: 'interface namespace', end: /\{/,
|
---|
75 | illegal: '[;.\\-]',
|
---|
76 | contains: [
|
---|
77 | { // interface or namespace name
|
---|
78 | className: 'symbol',
|
---|
79 | begin: '[a-zA-Z0-9_]+'
|
---|
80 | }
|
---|
81 | ]
|
---|
82 | },
|
---|
83 |
|
---|
84 | { // class declaration
|
---|
85 | beginKeywords: 'class', end: /\{/,
|
---|
86 | illegal: '[;.\\-]',
|
---|
87 | contains: [
|
---|
88 | { // class name
|
---|
89 | className: 'symbol',
|
---|
90 | begin: '[a-zA-Z0-9_]+',
|
---|
91 | contains: [
|
---|
92 | {
|
---|
93 | begin: '[:,]\\s*',
|
---|
94 | contains: [
|
---|
95 | {
|
---|
96 | className: 'symbol',
|
---|
97 | begin: '[a-zA-Z0-9_]+'
|
---|
98 | }
|
---|
99 | ]
|
---|
100 | }
|
---|
101 | ]
|
---|
102 | }
|
---|
103 | ]
|
---|
104 | },
|
---|
105 |
|
---|
106 | builtInTypeMode, // built-in types
|
---|
107 | objectHandleMode, // object handles
|
---|
108 |
|
---|
109 | { // literals
|
---|
110 | className: 'literal',
|
---|
111 | begin: '\\b(null|true|false)'
|
---|
112 | },
|
---|
113 |
|
---|
114 | { // numbers
|
---|
115 | className: 'number',
|
---|
116 | relevance: 0,
|
---|
117 | begin: '(-?)(\\b0[xXbBoOdD][a-fA-F0-9]+|(\\b\\d+(\\.\\d*)?f?|\\.\\d+f?)([eE][-+]?\\d+f?)?)'
|
---|
118 | }
|
---|
119 | ]
|
---|
120 | };
|
---|
121 | }
|
---|
122 |
|
---|
123 | module.exports = angelscript;
|
---|