190 lines
		
	
	
		
			4.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			190 lines
		
	
	
		
			4.6 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: 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;
 |