|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
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', |
|
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; |
|
|