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.
109 lines
3.1 KiB
109 lines
3.1 KiB
/** |
|
* @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;
|
|
|