| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 | /*Language: Caché Object ScriptAuthor: Nikita Savchenko <zitros.lab@gmail.com>Category: enterprise, scriptingWebsite: 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;
 |