forked from highlightjs/highlight.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathapplescript.js
147 lines (143 loc) · 3.94 KB
/
applescript.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
/*
Language: AppleScript
Authors: Nathan Grigg <[email protected]>, Dr. Drang <[email protected]>
Category: scripting
Website: https://developer.apple.com/library/archive/documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html
Audit: 2020
*/
/** @type LanguageFn */
export default function(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: /\/\/|->|=>|\[\[/
};
}