110 lines
3.1 KiB
JavaScript
110 lines
3.1 KiB
JavaScript
|
/**
|
||
|
* @param {string} value
|
||
|
* @returns {RegExp}
|
||
|
* */
|
||
|
|
||
|
/**
|
||
|
* @param {RegExp | string } re
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
function source(re) {
|
||
|
if (!re) return null;
|
||
|
if (typeof re === "string") return re;
|
||
|
|
||
|
return re.source;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param {...(RegExp | string) } args
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
function concat(...args) {
|
||
|
const joined = args.map((x) => source(x)).join("");
|
||
|
return joined;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Any of the passed expresssions may match
|
||
|
*
|
||
|
* Creates a huge this | this | that | that match
|
||
|
* @param {(RegExp | string)[] } args
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
function either(...args) {
|
||
|
const joined = '(' + args.map((x) => source(x)).join("|") + ")";
|
||
|
return joined;
|
||
|
}
|
||
|
|
||
|
/*
|
||
|
Language: VBScript
|
||
|
Description: VBScript ("Microsoft Visual Basic Scripting Edition") is an Active Scripting language developed by Microsoft that is modeled on Visual Basic.
|
||
|
Author: Nikita Ledyaev <lenikita@yandex.ru>
|
||
|
Contributors: Michal Gabrukiewicz <mgabru@gmail.com>
|
||
|
Website: https://en.wikipedia.org/wiki/VBScript
|
||
|
Category: scripting
|
||
|
*/
|
||
|
|
||
|
/** @type LanguageFn */
|
||
|
function vbscript(hljs) {
|
||
|
const BUILT_IN_FUNCTIONS = ('lcase month vartype instrrev ubound setlocale getobject rgb getref string ' +
|
||
|
'weekdayname rnd dateadd monthname now day minute isarray cbool round formatcurrency ' +
|
||
|
'conversions csng timevalue second year space abs clng timeserial fixs len asc ' +
|
||
|
'isempty maths dateserial atn timer isobject filter weekday datevalue ccur isdate ' +
|
||
|
'instr datediff formatdatetime replace isnull right sgn array snumeric log cdbl hex ' +
|
||
|
'chr lbound msgbox ucase getlocale cos cdate cbyte rtrim join hour oct typename trim ' +
|
||
|
'strcomp int createobject loadpicture tan formatnumber mid ' +
|
||
|
'split cint sin datepart ltrim sqr ' +
|
||
|
'time derived eval date formatpercent exp inputbox left ascw ' +
|
||
|
'chrw regexp cstr err').split(" ");
|
||
|
const BUILT_IN_OBJECTS = [
|
||
|
"server",
|
||
|
"response",
|
||
|
"request",
|
||
|
// take no arguments so can be called without ()
|
||
|
"scriptengine",
|
||
|
"scriptenginebuildversion",
|
||
|
"scriptengineminorversion",
|
||
|
"scriptenginemajorversion"
|
||
|
];
|
||
|
|
||
|
const BUILT_IN_CALL = {
|
||
|
begin: concat(either(...BUILT_IN_FUNCTIONS), "\\s*\\("),
|
||
|
// relevance 0 because this is acting as a beginKeywords really
|
||
|
relevance:0,
|
||
|
keywords: {
|
||
|
built_in: BUILT_IN_FUNCTIONS
|
||
|
}
|
||
|
};
|
||
|
|
||
|
return {
|
||
|
name: 'VBScript',
|
||
|
aliases: ['vbs'],
|
||
|
case_insensitive: true,
|
||
|
keywords: {
|
||
|
keyword:
|
||
|
'call class const dim do loop erase execute executeglobal exit for each next function ' +
|
||
|
'if then else on error option explicit new private property let get public randomize ' +
|
||
|
'redim rem select case set stop sub while wend with end to elseif is or xor and not ' +
|
||
|
'class_initialize class_terminate default preserve in me byval byref step resume goto',
|
||
|
built_in: BUILT_IN_OBJECTS,
|
||
|
literal:
|
||
|
'true false null nothing empty'
|
||
|
},
|
||
|
illegal: '//',
|
||
|
contains: [
|
||
|
BUILT_IN_CALL,
|
||
|
hljs.inherit(hljs.QUOTE_STRING_MODE, {contains: [{begin: '""'}]}),
|
||
|
hljs.COMMENT(
|
||
|
/'/,
|
||
|
/$/,
|
||
|
{
|
||
|
relevance: 0
|
||
|
}
|
||
|
),
|
||
|
hljs.C_NUMBER_MODE
|
||
|
]
|
||
|
};
|
||
|
}
|
||
|
|
||
|
module.exports = vbscript;
|