]> luflow.net public git repositories - flow-web.git/blob - static/highlight/languages/objectivec.js
Initial commit.
[flow-web.git] / static / highlight / languages / objectivec.js
1 /*! `objectivec` grammar compiled for Highlight.js 11.11.1 */
2 (function(){
3 var hljsGrammar = (function () {
4 'use strict';
5
6 /*
7 Language: Objective-C
8 Author: Valerii Hiora <valerii.hiora@gmail.com>
9 Contributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguyễn <mxn@1ec5.org>
10 Website: https://developer.apple.com/documentation/objectivec
11 Category: common
12 */
13
14 function objectivec(hljs) {
15 const API_CLASS = {
16 className: 'built_in',
17 begin: '\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+'
18 };
19 const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;
20 const TYPES = [
21 "int",
22 "float",
23 "char",
24 "unsigned",
25 "signed",
26 "short",
27 "long",
28 "double",
29 "wchar_t",
30 "unichar",
31 "void",
32 "bool",
33 "BOOL",
34 "id|0",
35 "_Bool"
36 ];
37 const KWS = [
38 "while",
39 "export",
40 "sizeof",
41 "typedef",
42 "const",
43 "struct",
44 "for",
45 "union",
46 "volatile",
47 "static",
48 "mutable",
49 "if",
50 "do",
51 "return",
52 "goto",
53 "enum",
54 "else",
55 "break",
56 "extern",
57 "asm",
58 "case",
59 "default",
60 "register",
61 "explicit",
62 "typename",
63 "switch",
64 "continue",
65 "inline",
66 "readonly",
67 "assign",
68 "readwrite",
69 "self",
70 "@synchronized",
71 "id",
72 "typeof",
73 "nonatomic",
74 "IBOutlet",
75 "IBAction",
76 "strong",
77 "weak",
78 "copy",
79 "in",
80 "out",
81 "inout",
82 "bycopy",
83 "byref",
84 "oneway",
85 "__strong",
86 "__weak",
87 "__block",
88 "__autoreleasing",
89 "@private",
90 "@protected",
91 "@public",
92 "@try",
93 "@property",
94 "@end",
95 "@throw",
96 "@catch",
97 "@finally",
98 "@autoreleasepool",
99 "@synthesize",
100 "@dynamic",
101 "@selector",
102 "@optional",
103 "@required",
104 "@encode",
105 "@package",
106 "@import",
107 "@defs",
108 "@compatibility_alias",
109 "__bridge",
110 "__bridge_transfer",
111 "__bridge_retained",
112 "__bridge_retain",
113 "__covariant",
114 "__contravariant",
115 "__kindof",
116 "_Nonnull",
117 "_Nullable",
118 "_Null_unspecified",
119 "__FUNCTION__",
120 "__PRETTY_FUNCTION__",
121 "__attribute__",
122 "getter",
123 "setter",
124 "retain",
125 "unsafe_unretained",
126 "nonnull",
127 "nullable",
128 "null_unspecified",
129 "null_resettable",
130 "class",
131 "instancetype",
132 "NS_DESIGNATED_INITIALIZER",
133 "NS_UNAVAILABLE",
134 "NS_REQUIRES_SUPER",
135 "NS_RETURNS_INNER_POINTER",
136 "NS_INLINE",
137 "NS_AVAILABLE",
138 "NS_DEPRECATED",
139 "NS_ENUM",
140 "NS_OPTIONS",
141 "NS_SWIFT_UNAVAILABLE",
142 "NS_ASSUME_NONNULL_BEGIN",
143 "NS_ASSUME_NONNULL_END",
144 "NS_REFINED_FOR_SWIFT",
145 "NS_SWIFT_NAME",
146 "NS_SWIFT_NOTHROW",
147 "NS_DURING",
148 "NS_HANDLER",
149 "NS_ENDHANDLER",
150 "NS_VALUERETURN",
151 "NS_VOIDRETURN"
152 ];
153 const LITERALS = [
154 "false",
155 "true",
156 "FALSE",
157 "TRUE",
158 "nil",
159 "YES",
160 "NO",
161 "NULL"
162 ];
163 const BUILT_INS = [
164 "dispatch_once_t",
165 "dispatch_queue_t",
166 "dispatch_sync",
167 "dispatch_async",
168 "dispatch_once"
169 ];
170 const KEYWORDS = {
171 "variable.language": [
172 "this",
173 "super"
174 ],
175 $pattern: IDENTIFIER_RE,
176 keyword: KWS,
177 literal: LITERALS,
178 built_in: BUILT_INS,
179 type: TYPES
180 };
181 const CLASS_KEYWORDS = {
182 $pattern: IDENTIFIER_RE,
183 keyword: [
184 "@interface",
185 "@class",
186 "@protocol",
187 "@implementation"
188 ]
189 };
190 return {
191 name: 'Objective-C',
192 aliases: [
193 'mm',
194 'objc',
195 'obj-c',
196 'obj-c++',
197 'objective-c++'
198 ],
199 keywords: KEYWORDS,
200 illegal: '</',
201 contains: [
202 API_CLASS,
203 hljs.C_LINE_COMMENT_MODE,
204 hljs.C_BLOCK_COMMENT_MODE,
205 hljs.C_NUMBER_MODE,
206 hljs.QUOTE_STRING_MODE,
207 hljs.APOS_STRING_MODE,
208 {
209 className: 'string',
210 variants: [
211 {
212 begin: '@"',
213 end: '"',
214 illegal: '\\n',
215 contains: [ hljs.BACKSLASH_ESCAPE ]
216 }
217 ]
218 },
219 {
220 className: 'meta',
221 begin: /#\s*[a-z]+\b/,
222 end: /$/,
223 keywords: { keyword:
224 'if else elif endif define undef warning error line '
225 + 'pragma ifdef ifndef include' },
226 contains: [
227 {
228 begin: /\\\n/,
229 relevance: 0
230 },
231 hljs.inherit(hljs.QUOTE_STRING_MODE, { className: 'string' }),
232 {
233 className: 'string',
234 begin: /<.*?>/,
235 end: /$/,
236 illegal: '\\n'
237 },
238 hljs.C_LINE_COMMENT_MODE,
239 hljs.C_BLOCK_COMMENT_MODE
240 ]
241 },
242 {
243 className: 'class',
244 begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\b',
245 end: /(\{|$)/,
246 excludeEnd: true,
247 keywords: CLASS_KEYWORDS,
248 contains: [ hljs.UNDERSCORE_TITLE_MODE ]
249 },
250 {
251 begin: '\\.' + hljs.UNDERSCORE_IDENT_RE,
252 relevance: 0
253 }
254 ]
255 };
256 }
257
258 return objectivec;
259
260 })();
261
262 hljs.registerLanguage('objectivec', hljsGrammar);
263 })();