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