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