hexo/node_modules/highlight.js/lib/languages/applescript.js

150 lines
4.1 KiB
JavaScript
Raw Normal View History

2023-10-03 11:14:36 +08:00
/*
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 regex = hljs.regex;
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|0 paragraph paragraphs rest reverse running time version '
+ 'weekday word words year'
},
contains: [
STRING,
hljs.C_NUMBER_MODE,
{
className: 'built_in',
begin: regex.concat(
/\b/,
regex.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: regex.concat(
/\b/,
regex.either(...KEYWORD_PATTERNS),
/\b/
)
},
{
beginKeywords: 'on',
illegal: /[${=;\n]/,
contains: [
hljs.UNDERSCORE_TITLE_MODE,
PARAMS
]
},
...COMMENTS
],
illegal: /\/\/|->|=>|\[\[/
};
}
module.exports = applescript;