2023-10-03 11:14:36 +08:00
|
|
|
/*
|
|
|
|
Language: Tcl
|
|
|
|
Description: Tcl is a very simple programming language.
|
|
|
|
Author: Radek Liska <radekliska@gmail.com>
|
|
|
|
Website: https://www.tcl.tk/about/language.html
|
|
|
|
*/
|
|
|
|
|
|
|
|
function tcl(hljs) {
|
|
|
|
const regex = hljs.regex;
|
|
|
|
const TCL_IDENT = /[a-zA-Z_][a-zA-Z0-9_]*/;
|
|
|
|
|
|
|
|
const NUMBER = {
|
|
|
|
className: 'number',
|
|
|
|
variants: [
|
|
|
|
hljs.BINARY_NUMBER_MODE,
|
|
|
|
hljs.C_NUMBER_MODE
|
|
|
|
]
|
|
|
|
};
|
|
|
|
|
|
|
|
const KEYWORDS = [
|
|
|
|
"after",
|
|
|
|
"append",
|
|
|
|
"apply",
|
|
|
|
"array",
|
|
|
|
"auto_execok",
|
|
|
|
"auto_import",
|
|
|
|
"auto_load",
|
|
|
|
"auto_mkindex",
|
|
|
|
"auto_mkindex_old",
|
|
|
|
"auto_qualify",
|
|
|
|
"auto_reset",
|
|
|
|
"bgerror",
|
|
|
|
"binary",
|
|
|
|
"break",
|
|
|
|
"catch",
|
|
|
|
"cd",
|
|
|
|
"chan",
|
|
|
|
"clock",
|
|
|
|
"close",
|
|
|
|
"concat",
|
|
|
|
"continue",
|
|
|
|
"dde",
|
|
|
|
"dict",
|
|
|
|
"encoding",
|
|
|
|
"eof",
|
|
|
|
"error",
|
|
|
|
"eval",
|
|
|
|
"exec",
|
|
|
|
"exit",
|
|
|
|
"expr",
|
|
|
|
"fblocked",
|
|
|
|
"fconfigure",
|
|
|
|
"fcopy",
|
|
|
|
"file",
|
|
|
|
"fileevent",
|
|
|
|
"filename",
|
|
|
|
"flush",
|
|
|
|
"for",
|
|
|
|
"foreach",
|
|
|
|
"format",
|
|
|
|
"gets",
|
|
|
|
"glob",
|
|
|
|
"global",
|
|
|
|
"history",
|
|
|
|
"http",
|
|
|
|
"if",
|
|
|
|
"incr",
|
|
|
|
"info",
|
|
|
|
"interp",
|
|
|
|
"join",
|
|
|
|
"lappend|10",
|
|
|
|
"lassign|10",
|
|
|
|
"lindex|10",
|
|
|
|
"linsert|10",
|
|
|
|
"list",
|
|
|
|
"llength|10",
|
|
|
|
"load",
|
|
|
|
"lrange|10",
|
|
|
|
"lrepeat|10",
|
|
|
|
"lreplace|10",
|
|
|
|
"lreverse|10",
|
|
|
|
"lsearch|10",
|
|
|
|
"lset|10",
|
|
|
|
"lsort|10",
|
|
|
|
"mathfunc",
|
|
|
|
"mathop",
|
|
|
|
"memory",
|
|
|
|
"msgcat",
|
|
|
|
"namespace",
|
|
|
|
"open",
|
|
|
|
"package",
|
|
|
|
"parray",
|
|
|
|
"pid",
|
|
|
|
"pkg::create",
|
|
|
|
"pkg_mkIndex",
|
|
|
|
"platform",
|
|
|
|
"platform::shell",
|
|
|
|
"proc",
|
|
|
|
"puts",
|
|
|
|
"pwd",
|
|
|
|
"read",
|
|
|
|
"refchan",
|
|
|
|
"regexp",
|
|
|
|
"registry",
|
|
|
|
"regsub|10",
|
|
|
|
"rename",
|
|
|
|
"return",
|
|
|
|
"safe",
|
|
|
|
"scan",
|
|
|
|
"seek",
|
|
|
|
"set",
|
|
|
|
"socket",
|
|
|
|
"source",
|
|
|
|
"split",
|
|
|
|
"string",
|
|
|
|
"subst",
|
|
|
|
"switch",
|
|
|
|
"tcl_endOfWord",
|
|
|
|
"tcl_findLibrary",
|
|
|
|
"tcl_startOfNextWord",
|
|
|
|
"tcl_startOfPreviousWord",
|
|
|
|
"tcl_wordBreakAfter",
|
|
|
|
"tcl_wordBreakBefore",
|
|
|
|
"tcltest",
|
|
|
|
"tclvars",
|
|
|
|
"tell",
|
|
|
|
"time",
|
|
|
|
"tm",
|
|
|
|
"trace",
|
|
|
|
"unknown",
|
|
|
|
"unload",
|
|
|
|
"unset",
|
|
|
|
"update",
|
|
|
|
"uplevel",
|
|
|
|
"upvar",
|
|
|
|
"variable",
|
|
|
|
"vwait",
|
|
|
|
"while"
|
|
|
|
];
|
|
|
|
|
|
|
|
return {
|
|
|
|
name: 'Tcl',
|
|
|
|
aliases: [ 'tk' ],
|
|
|
|
keywords: KEYWORDS,
|
|
|
|
contains: [
|
|
|
|
hljs.COMMENT(';[ \\t]*#', '$'),
|
|
|
|
hljs.COMMENT('^[ \\t]*#', '$'),
|
|
|
|
{
|
|
|
|
beginKeywords: 'proc',
|
|
|
|
end: '[\\{]',
|
|
|
|
excludeEnd: true,
|
|
|
|
contains: [
|
|
|
|
{
|
|
|
|
className: 'title',
|
|
|
|
begin: '[ \\t\\n\\r]+(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
|
|
|
|
end: '[ \\t\\n\\r]',
|
|
|
|
endsWithParent: true,
|
|
|
|
excludeEnd: true
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
className: "variable",
|
|
|
|
variants: [
|
|
|
|
{ begin: regex.concat(
|
|
|
|
/\$/,
|
|
|
|
regex.optional(/::/),
|
|
|
|
TCL_IDENT,
|
|
|
|
'(::',
|
|
|
|
TCL_IDENT,
|
|
|
|
')*'
|
|
|
|
) },
|
|
|
|
{
|
|
|
|
begin: '\\$\\{(::)?[a-zA-Z_]((::)?[a-zA-Z0-9_])*',
|
|
|
|
end: '\\}',
|
|
|
|
contains: [ NUMBER ]
|
|
|
|
}
|
|
|
|
]
|
|
|
|
},
|
|
|
|
{
|
|
|
|
className: 'string',
|
|
|
|
contains: [ hljs.BACKSLASH_ESCAPE ],
|
|
|
|
variants: [ hljs.inherit(hljs.QUOTE_STRING_MODE, { illegal: null }) ]
|
|
|
|
},
|
|
|
|
NUMBER
|
|
|
|
]
|
|
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
export { tcl as default };
|