123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121 |
- /*
- Language: Objective-C
- Author: Valerii Hiora <valerii.hiora@gmail.com>
- Contributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>, Matt Diephouse <matt@diephouse.com>, Andrew Farmer <ahfarmer@gmail.com>, Minh Nguyễn <mxn@1ec5.org>
- Website: https://developer.apple.com/documentation/objectivec
- Category: common
- */
- function objectivec(hljs) {
- const API_CLASS = {
- className: 'built_in',
- begin: '\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+'
- };
- const IDENTIFIER_RE = /[a-zA-Z@][a-zA-Z0-9_]*/;
- const OBJC_KEYWORDS = {
- $pattern: IDENTIFIER_RE,
- keyword:
- 'int float while char export sizeof typedef const struct for union ' +
- 'unsigned long volatile static bool mutable if do return goto void ' +
- 'enum else break extern asm case short default double register explicit ' +
- 'signed typename this switch continue wchar_t inline readonly assign ' +
- 'readwrite self @synchronized id typeof ' +
- 'nonatomic super unichar IBOutlet IBAction strong weak copy ' +
- 'in out inout bycopy byref oneway __strong __weak __block __autoreleasing ' +
- '@private @protected @public @try @property @end @throw @catch @finally ' +
- '@autoreleasepool @synthesize @dynamic @selector @optional @required ' +
- '@encode @package @import @defs @compatibility_alias ' +
- '__bridge __bridge_transfer __bridge_retained __bridge_retain ' +
- '__covariant __contravariant __kindof ' +
- '_Nonnull _Nullable _Null_unspecified ' +
- '__FUNCTION__ __PRETTY_FUNCTION__ __attribute__ ' +
- 'getter setter retain unsafe_unretained ' +
- 'nonnull nullable null_unspecified null_resettable class instancetype ' +
- 'NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER ' +
- 'NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED ' +
- 'NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE ' +
- 'NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END ' +
- 'NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW ' +
- 'NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN',
- literal:
- 'false true FALSE TRUE nil YES NO NULL',
- built_in:
- 'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once'
- };
- const CLASS_KEYWORDS = {
- $pattern: IDENTIFIER_RE,
- keyword: '@interface @class @protocol @implementation'
- };
- return {
- name: 'Objective-C',
- aliases: [
- 'mm',
- 'objc',
- 'obj-c',
- 'obj-c++',
- 'objective-c++'
- ],
- keywords: OBJC_KEYWORDS,
- illegal: '</',
- contains: [
- API_CLASS,
- hljs.C_LINE_COMMENT_MODE,
- hljs.C_BLOCK_COMMENT_MODE,
- hljs.C_NUMBER_MODE,
- hljs.QUOTE_STRING_MODE,
- hljs.APOS_STRING_MODE,
- {
- className: 'string',
- variants: [
- {
- begin: '@"',
- end: '"',
- illegal: '\\n',
- contains: [ hljs.BACKSLASH_ESCAPE ]
- }
- ]
- },
- {
- className: 'meta',
- begin: /#\s*[a-z]+\b/,
- end: /$/,
- keywords: {
- 'meta-keyword':
- 'if else elif endif define undef warning error line ' +
- 'pragma ifdef ifndef include'
- },
- contains: [
- {
- begin: /\\\n/,
- relevance: 0
- },
- hljs.inherit(hljs.QUOTE_STRING_MODE, {
- className: 'meta-string'
- }),
- {
- className: 'meta-string',
- begin: /<.*?>/,
- end: /$/,
- illegal: '\\n'
- },
- hljs.C_LINE_COMMENT_MODE,
- hljs.C_BLOCK_COMMENT_MODE
- ]
- },
- {
- className: 'class',
- begin: '(' + CLASS_KEYWORDS.keyword.split(' ').join('|') + ')\\b',
- end: /(\{|$)/,
- excludeEnd: true,
- keywords: CLASS_KEYWORDS,
- contains: [ hljs.UNDERSCORE_TITLE_MODE ]
- },
- {
- begin: '\\.' + hljs.UNDERSCORE_IDENT_RE,
- relevance: 0
- }
- ]
- };
- }
- module.exports = objectivec;
|