]> luflow.net public git repositories - flow-web.git/blob - static/highlight/languages/groovy.js
Initial commit.
[flow-web.git] / static / highlight / languages / groovy.js
1 /*! `groovy` grammar compiled for Highlight.js 11.11.1 */
2 (function(){
3 var hljsGrammar = (function () {
4 'use strict';
5
6 /*
7 Language: Groovy
8 Author: Guillaume Laforge <glaforge@gmail.com>
9 Description: Groovy programming language implementation inspired from Vsevolod's Java mode
10 Website: https://groovy-lang.org
11 Category: system
12 */
13
14 function variants(variants, obj = {}) {
15 obj.variants = variants;
16 return obj;
17 }
18
19 function groovy(hljs) {
20 const regex = hljs.regex;
21 const IDENT_RE = '[A-Za-z0-9_$]+';
22 const COMMENT = variants([
23 hljs.C_LINE_COMMENT_MODE,
24 hljs.C_BLOCK_COMMENT_MODE,
25 hljs.COMMENT(
26 '/\\*\\*',
27 '\\*/',
28 {
29 relevance: 0,
30 contains: [
31 {
32 // eat up @'s in emails to prevent them to be recognized as doctags
33 begin: /\w+@/,
34 relevance: 0
35 },
36 {
37 className: 'doctag',
38 begin: '@[A-Za-z]+'
39 }
40 ]
41 }
42 )
43 ]);
44 const REGEXP = {
45 className: 'regexp',
46 begin: /~?\/[^\/\n]+\//,
47 contains: [ hljs.BACKSLASH_ESCAPE ]
48 };
49 const NUMBER = variants([
50 hljs.BINARY_NUMBER_MODE,
51 hljs.C_NUMBER_MODE
52 ]);
53 const STRING = variants([
54 {
55 begin: /"""/,
56 end: /"""/
57 },
58 {
59 begin: /'''/,
60 end: /'''/
61 },
62 {
63 begin: "\\$/",
64 end: "/\\$",
65 relevance: 10
66 },
67 hljs.APOS_STRING_MODE,
68 hljs.QUOTE_STRING_MODE
69 ],
70 { className: "string" }
71 );
72
73 const CLASS_DEFINITION = {
74 match: [
75 /(class|interface|trait|enum|record|extends|implements)/,
76 /\s+/,
77 hljs.UNDERSCORE_IDENT_RE
78 ],
79 scope: {
80 1: "keyword",
81 3: "title.class",
82 }
83 };
84 const TYPES = [
85 "byte",
86 "short",
87 "char",
88 "int",
89 "long",
90 "boolean",
91 "float",
92 "double",
93 "void"
94 ];
95 const KEYWORDS = [
96 // groovy specific keywords
97 "def",
98 "as",
99 "in",
100 "assert",
101 "trait",
102 // common keywords with Java
103 "abstract",
104 "static",
105 "volatile",
106 "transient",
107 "public",
108 "private",
109 "protected",
110 "synchronized",
111 "final",
112 "class",
113 "interface",
114 "enum",
115 "if",
116 "else",
117 "for",
118 "while",
119 "switch",
120 "case",
121 "break",
122 "default",
123 "continue",
124 "throw",
125 "throws",
126 "try",
127 "catch",
128 "finally",
129 "implements",
130 "extends",
131 "new",
132 "import",
133 "package",
134 "return",
135 "instanceof",
136 "var"
137 ];
138
139 return {
140 name: 'Groovy',
141 keywords: {
142 "variable.language": 'this super',
143 literal: 'true false null',
144 type: TYPES,
145 keyword: KEYWORDS
146 },
147 contains: [
148 hljs.SHEBANG({
149 binary: "groovy",
150 relevance: 10
151 }),
152 COMMENT,
153 STRING,
154 REGEXP,
155 NUMBER,
156 CLASS_DEFINITION,
157 {
158 className: 'meta',
159 begin: '@[A-Za-z]+',
160 relevance: 0
161 },
162 {
163 // highlight map keys and named parameters as attrs
164 className: 'attr',
165 begin: IDENT_RE + '[ \t]*:',
166 relevance: 0
167 },
168 {
169 // catch middle element of the ternary operator
170 // to avoid highlight it as a label, named parameter, or map key
171 begin: /\?/,
172 end: /:/,
173 relevance: 0,
174 contains: [
175 COMMENT,
176 STRING,
177 REGEXP,
178 NUMBER,
179 'self'
180 ]
181 },
182 {
183 // highlight labeled statements
184 className: 'symbol',
185 begin: '^[ \t]*' + regex.lookahead(IDENT_RE + ':'),
186 excludeBegin: true,
187 end: IDENT_RE + ':',
188 relevance: 0
189 }
190 ],
191 illegal: /#|<\//
192 };
193 }
194
195 return groovy;
196
197 })();
198
199 hljs.registerLanguage('groovy', hljsGrammar);
200 })();