You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
138 lines
5.1 KiB
138 lines
5.1 KiB
/* |
|
Language: Caché Object Script |
|
Author: Nikita Savchenko <zitros.lab@gmail.com> |
|
Category: enterprise, scripting |
|
Website: https://cedocs.intersystems.com/latest/csp/docbook/DocBook.UI.Page.cls |
|
*/ |
|
|
|
/** @type LanguageFn */ |
|
function cos(hljs) { |
|
const STRINGS = { |
|
className: 'string', |
|
variants: [{ |
|
begin: '"', |
|
end: '"', |
|
contains: [{ // escaped |
|
begin: "\"\"", |
|
relevance: 0 |
|
}] |
|
}] |
|
}; |
|
|
|
const NUMBERS = { |
|
className: "number", |
|
begin: "\\b(\\d+(\\.\\d*)?|\\.\\d+)", |
|
relevance: 0 |
|
}; |
|
|
|
const COS_KEYWORDS = |
|
'property parameter class classmethod clientmethod extends as break ' + |
|
'catch close continue do d|0 else elseif for goto halt hang h|0 if job ' + |
|
'j|0 kill k|0 lock l|0 merge new open quit q|0 read r|0 return set s|0 ' + |
|
'tcommit throw trollback try tstart use view while write w|0 xecute x|0 ' + |
|
'zkill znspace zn ztrap zwrite zw zzdump zzwrite print zbreak zinsert ' + |
|
'zload zprint zremove zsave zzprint mv mvcall mvcrt mvdim mvprint zquit ' + |
|
'zsync ascii'; |
|
|
|
// registered function - no need in them due to all functions are highlighted, |
|
// but I'll just leave this here. |
|
|
|
// "$bit", "$bitcount", |
|
// "$bitfind", "$bitlogic", "$case", "$char", "$classmethod", "$classname", |
|
// "$compile", "$data", "$decimal", "$double", "$extract", "$factor", |
|
// "$find", "$fnumber", "$get", "$increment", "$inumber", "$isobject", |
|
// "$isvaliddouble", "$isvalidnum", "$justify", "$length", "$list", |
|
// "$listbuild", "$listdata", "$listfind", "$listfromstring", "$listget", |
|
// "$listlength", "$listnext", "$listsame", "$listtostring", "$listvalid", |
|
// "$locate", "$match", "$method", "$name", "$nconvert", "$next", |
|
// "$normalize", "$now", "$number", "$order", "$parameter", "$piece", |
|
// "$prefetchoff", "$prefetchon", "$property", "$qlength", "$qsubscript", |
|
// "$query", "$random", "$replace", "$reverse", "$sconvert", "$select", |
|
// "$sortbegin", "$sortend", "$stack", "$text", "$translate", "$view", |
|
// "$wascii", "$wchar", "$wextract", "$wfind", "$wiswide", "$wlength", |
|
// "$wreverse", "$xecute", "$zabs", "$zarccos", "$zarcsin", "$zarctan", |
|
// "$zcos", "$zcot", "$zcsc", "$zdate", "$zdateh", "$zdatetime", |
|
// "$zdatetimeh", "$zexp", "$zhex", "$zln", "$zlog", "$zpower", "$zsec", |
|
// "$zsin", "$zsqr", "$ztan", "$ztime", "$ztimeh", "$zboolean", |
|
// "$zconvert", "$zcrc", "$zcyc", "$zdascii", "$zdchar", "$zf", |
|
// "$ziswide", "$zlascii", "$zlchar", "$zname", "$zposition", "$zqascii", |
|
// "$zqchar", "$zsearch", "$zseek", "$zstrip", "$zwascii", "$zwchar", |
|
// "$zwidth", "$zwpack", "$zwbpack", "$zwunpack", "$zwbunpack", "$zzenkaku", |
|
// "$change", "$mv", "$mvat", "$mvfmt", "$mvfmts", "$mviconv", |
|
// "$mviconvs", "$mvinmat", "$mvlover", "$mvoconv", "$mvoconvs", "$mvraise", |
|
// "$mvtrans", "$mvv", "$mvname", "$zbitand", "$zbitcount", "$zbitfind", |
|
// "$zbitget", "$zbitlen", "$zbitnot", "$zbitor", "$zbitset", "$zbitstr", |
|
// "$zbitxor", "$zincrement", "$znext", "$zorder", "$zprevious", "$zsort", |
|
// "device", "$ecode", "$estack", "$etrap", "$halt", "$horolog", |
|
// "$io", "$job", "$key", "$namespace", "$principal", "$quit", "$roles", |
|
// "$storage", "$system", "$test", "$this", "$tlevel", "$username", |
|
// "$x", "$y", "$za", "$zb", "$zchild", "$zeof", "$zeos", "$zerror", |
|
// "$zhorolog", "$zio", "$zjob", "$zmode", "$znspace", "$zparent", "$zpi", |
|
// "$zpos", "$zreference", "$zstorage", "$ztimestamp", "$ztimezone", |
|
// "$ztrap", "$zversion" |
|
|
|
return { |
|
name: 'Caché Object Script', |
|
case_insensitive: true, |
|
aliases: [ |
|
"cls" |
|
], |
|
keywords: COS_KEYWORDS, |
|
contains: [ |
|
NUMBERS, |
|
STRINGS, |
|
hljs.C_LINE_COMMENT_MODE, |
|
hljs.C_BLOCK_COMMENT_MODE, |
|
{ |
|
className: "comment", |
|
begin: /;/, |
|
end: "$", |
|
relevance: 0 |
|
}, |
|
{ // Functions and user-defined functions: write $ztime(60*60*3), $$myFunc(10), $$^Val(1) |
|
className: "built_in", |
|
begin: /(?:\$\$?|\.\.)\^?[a-zA-Z]+/ |
|
}, |
|
{ // Macro command: quit $$$OK |
|
className: "built_in", |
|
begin: /\$\$\$[a-zA-Z]+/ |
|
}, |
|
{ // Special (global) variables: write %request.Content; Built-in classes: %Library.Integer |
|
className: "built_in", |
|
begin: /%[a-z]+(?:\.[a-z]+)*/ |
|
}, |
|
{ // Global variable: set ^globalName = 12 write ^globalName |
|
className: "symbol", |
|
begin: /\^%?[a-zA-Z][\w]*/ |
|
}, |
|
{ // Some control constructions: do ##class(Package.ClassName).Method(), ##super() |
|
className: "keyword", |
|
begin: /##class|##super|#define|#dim/ |
|
}, |
|
// sub-languages: are not fully supported by hljs by 11/15/2015 |
|
// left for the future implementation. |
|
{ |
|
begin: /&sql\(/, |
|
end: /\)/, |
|
excludeBegin: true, |
|
excludeEnd: true, |
|
subLanguage: "sql" |
|
}, |
|
{ |
|
begin: /&(js|jscript|javascript)</, |
|
end: />/, |
|
excludeBegin: true, |
|
excludeEnd: true, |
|
subLanguage: "javascript" |
|
}, |
|
{ |
|
// this brakes first and last tag, but this is the only way to embed a valid html |
|
begin: /&html<\s*</, |
|
end: />\s*>/, |
|
subLanguage: "xml" |
|
} |
|
] |
|
}; |
|
} |
|
|
|
module.exports = cos;
|
|
|