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.
189 lines
4.6 KiB
189 lines
4.6 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: AppleScript |
|
Authors: Nathan Grigg <nathan@nathanamy.org>, Dr. Drang <drdrang@gmail.com> |
|
Category: scripting |
|
Website: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html |
|
Audit: 2020 |
|
*/ |
|
|
|
/** @type LanguageFn */ |
|
function applescript(hljs) { |
|
const STRING = hljs.inherit( |
|
hljs.QUOTE_STRING_MODE, { |
|
illegal: null |
|
}); |
|
const PARAMS = { |
|
className: 'params', |
|
begin: /\(/, |
|
end: /\)/, |
|
contains: [ |
|
'self', |
|
hljs.C_NUMBER_MODE, |
|
STRING |
|
] |
|
}; |
|
const COMMENT_MODE_1 = hljs.COMMENT(/--/, /$/); |
|
const COMMENT_MODE_2 = hljs.COMMENT( |
|
/\(\*/, |
|
/\*\)/, |
|
{ |
|
contains: [ |
|
'self', // allow nesting |
|
COMMENT_MODE_1 |
|
] |
|
} |
|
); |
|
const COMMENTS = [ |
|
COMMENT_MODE_1, |
|
COMMENT_MODE_2, |
|
hljs.HASH_COMMENT_MODE |
|
]; |
|
|
|
const KEYWORD_PATTERNS = [ |
|
/apart from/, |
|
/aside from/, |
|
/instead of/, |
|
/out of/, |
|
/greater than/, |
|
/isn't|(doesn't|does not) (equal|come before|come after|contain)/, |
|
/(greater|less) than( or equal)?/, |
|
/(starts?|ends|begins?) with/, |
|
/contained by/, |
|
/comes (before|after)/, |
|
/a (ref|reference)/, |
|
/POSIX (file|path)/, |
|
/(date|time) string/, |
|
/quoted form/ |
|
]; |
|
|
|
const BUILT_IN_PATTERNS = [ |
|
/clipboard info/, |
|
/the clipboard/, |
|
/info for/, |
|
/list (disks|folder)/, |
|
/mount volume/, |
|
/path to/, |
|
/(close|open for) access/, |
|
/(get|set) eof/, |
|
/current date/, |
|
/do shell script/, |
|
/get volume settings/, |
|
/random number/, |
|
/set volume/, |
|
/system attribute/, |
|
/system info/, |
|
/time to GMT/, |
|
/(load|run|store) script/, |
|
/scripting components/, |
|
/ASCII (character|number)/, |
|
/localized string/, |
|
/choose (application|color|file|file name|folder|from list|remote application|URL)/, |
|
/display (alert|dialog)/ |
|
]; |
|
|
|
return { |
|
name: 'AppleScript', |
|
aliases: [ 'osascript' ], |
|
keywords: { |
|
keyword: |
|
'about above after against and around as at back before beginning ' + |
|
'behind below beneath beside between but by considering ' + |
|
'contain contains continue copy div does eighth else end equal ' + |
|
'equals error every exit fifth first for fourth from front ' + |
|
'get given global if ignoring in into is it its last local me ' + |
|
'middle mod my ninth not of on onto or over prop property put ref ' + |
|
'reference repeat returning script second set seventh since ' + |
|
'sixth some tell tenth that the|0 then third through thru ' + |
|
'timeout times to transaction try until where while whose with ' + |
|
'without', |
|
literal: |
|
'AppleScript false linefeed return pi quote result space tab true', |
|
built_in: |
|
'alias application boolean class constant date file integer list ' + |
|
'number real record string text ' + |
|
'activate beep count delay launch log offset read round ' + |
|
'run say summarize write ' + |
|
'character characters contents day frontmost id item length ' + |
|
'month name paragraph paragraphs rest reverse running time version ' + |
|
'weekday word words year' |
|
}, |
|
contains: [ |
|
STRING, |
|
hljs.C_NUMBER_MODE, |
|
{ |
|
className: 'built_in', |
|
begin: concat( |
|
/\b/, |
|
either(...BUILT_IN_PATTERNS), |
|
/\b/ |
|
) |
|
}, |
|
{ |
|
className: 'built_in', |
|
begin: /^\s*return\b/ |
|
}, |
|
{ |
|
className: 'literal', |
|
begin: |
|
/\b(text item delimiters|current application|missing value)\b/ |
|
}, |
|
{ |
|
className: 'keyword', |
|
begin: concat( |
|
/\b/, |
|
either(...KEYWORD_PATTERNS), |
|
/\b/ |
|
) |
|
}, |
|
{ |
|
beginKeywords: 'on', |
|
illegal: /[${=;\n]/, |
|
contains: [ |
|
hljs.UNDERSCORE_TITLE_MODE, |
|
PARAMS |
|
] |
|
}, |
|
...COMMENTS |
|
], |
|
illegal: /\/\/|->|=>|\[\[/ |
|
}; |
|
} |
|
|
|
module.exports = applescript;
|
|
|