codigo0/node_modules/highlight.js/lib/languages/groovy.js
planetazuzu 5d7a6500fe refactor: Fase 1 - Clean Architecture, refactorización modular y eliminación de duplicidades
-  Ticket 1.1: Estructura Clean Architecture en backend
-  Ticket 1.2: Schemas Zod compartidos
-  Ticket 1.3: Refactorización drugs.ts (1362 → 8 archivos modulares)
-  Ticket 1.4: Refactorización procedures.ts (3583 → 6 archivos modulares)
-  Ticket 1.5: Eliminación de duplicidades (~50 líneas)

Cambios principales:
- Creada estructura Clean Architecture en backend/src/
- Schemas Zod compartidos en backend/src/shared/schemas/
- Refactorización modular de drugs y procedures
- Utilidades genéricas en src/utils/ (filter, validation)
- Eliminados scripts obsoletos y documentación antigua
- Corregidos errores: QueryClient, import test-error-handling
- Build verificado y funcionando correctamente
2026-01-25 21:09:47 +01:00

191 lines
3.5 KiB
JavaScript

/*
Language: Groovy
Author: Guillaume Laforge <glaforge@gmail.com>
Description: Groovy programming language implementation inspired from Vsevolod's Java mode
Website: https://groovy-lang.org
Category: system
*/
function variants(variants, obj = {}) {
obj.variants = variants;
return obj;
}
function groovy(hljs) {
const regex = hljs.regex;
const IDENT_RE = '[A-Za-z0-9_$]+';
const COMMENT = variants([
hljs.C_LINE_COMMENT_MODE,
hljs.C_BLOCK_COMMENT_MODE,
hljs.COMMENT(
'/\\*\\*',
'\\*/',
{
relevance: 0,
contains: [
{
// eat up @'s in emails to prevent them to be recognized as doctags
begin: /\w+@/,
relevance: 0
},
{
className: 'doctag',
begin: '@[A-Za-z]+'
}
]
}
)
]);
const REGEXP = {
className: 'regexp',
begin: /~?\/[^\/\n]+\//,
contains: [ hljs.BACKSLASH_ESCAPE ]
};
const NUMBER = variants([
hljs.BINARY_NUMBER_MODE,
hljs.C_NUMBER_MODE
]);
const STRING = variants([
{
begin: /"""/,
end: /"""/
},
{
begin: /'''/,
end: /'''/
},
{
begin: "\\$/",
end: "/\\$",
relevance: 10
},
hljs.APOS_STRING_MODE,
hljs.QUOTE_STRING_MODE
],
{ className: "string" }
);
const CLASS_DEFINITION = {
match: [
/(class|interface|trait|enum|record|extends|implements)/,
/\s+/,
hljs.UNDERSCORE_IDENT_RE
],
scope: {
1: "keyword",
3: "title.class",
}
};
const TYPES = [
"byte",
"short",
"char",
"int",
"long",
"boolean",
"float",
"double",
"void"
];
const KEYWORDS = [
// groovy specific keywords
"def",
"as",
"in",
"assert",
"trait",
// common keywords with Java
"abstract",
"static",
"volatile",
"transient",
"public",
"private",
"protected",
"synchronized",
"final",
"class",
"interface",
"enum",
"if",
"else",
"for",
"while",
"switch",
"case",
"break",
"default",
"continue",
"throw",
"throws",
"try",
"catch",
"finally",
"implements",
"extends",
"new",
"import",
"package",
"return",
"instanceof",
"var"
];
return {
name: 'Groovy',
keywords: {
"variable.language": 'this super',
literal: 'true false null',
type: TYPES,
keyword: KEYWORDS
},
contains: [
hljs.SHEBANG({
binary: "groovy",
relevance: 10
}),
COMMENT,
STRING,
REGEXP,
NUMBER,
CLASS_DEFINITION,
{
className: 'meta',
begin: '@[A-Za-z]+',
relevance: 0
},
{
// highlight map keys and named parameters as attrs
className: 'attr',
begin: IDENT_RE + '[ \t]*:',
relevance: 0
},
{
// catch middle element of the ternary operator
// to avoid highlight it as a label, named parameter, or map key
begin: /\?/,
end: /:/,
relevance: 0,
contains: [
COMMENT,
STRING,
REGEXP,
NUMBER,
'self'
]
},
{
// highlight labeled statements
className: 'symbol',
begin: '^[ \t]*' + regex.lookahead(IDENT_RE + ':'),
excludeBegin: true,
end: IDENT_RE + ':',
relevance: 0
}
],
illegal: /#|<\//
};
}
module.exports = groovy;