123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- /**
- * @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;
|