/* Language: Objective-C Author: Valerii Hiora Contributors: Angel G. Olloqui , Matt Diephouse , Andrew Farmer , Minh Nguyễn 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 TYPES = [ "int", "float", "char", "unsigned", "signed", "short", "long", "double", "wchar_t", "unichar", "void", "bool", "BOOL", "id|0", "_Bool" ]; const KWS = [ "while", "export", "sizeof", "typedef", "const", "struct", "for", "union", "volatile", "static", "mutable", "if", "do", "return", "goto", "enum", "else", "break", "extern", "asm", "case", "default", "register", "explicit", "typename", "switch", "continue", "inline", "readonly", "assign", "readwrite", "self", "@synchronized", "id", "typeof", "nonatomic", "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" ]; const LITERALS = [ "false", "true", "FALSE", "TRUE", "nil", "YES", "NO", "NULL" ]; const BUILT_INS = [ "dispatch_once_t", "dispatch_queue_t", "dispatch_sync", "dispatch_async", "dispatch_once" ]; const KEYWORDS = { "variable.language": [ "this", "super" ], $pattern: IDENTIFIER_RE, keyword: KWS, literal: LITERALS, built_in: BUILT_INS, type: TYPES }; 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: KEYWORDS, illegal: '/, end: /$/, illegal: '\\n' }, hljs.C_LINE_COMMENT_MODE, hljs.C_BLOCK_COMMENT_MODE ] }, { className: 'class', begin: '(' + CLASS_KEYWORDS.keyword.join('|') + ')\\b', end: /(\{|$)/, excludeEnd: true, keywords: CLASS_KEYWORDS, contains: [ hljs.UNDERSCORE_TITLE_MODE ] }, { begin: '\\.' + hljs.UNDERSCORE_IDENT_RE, relevance: 0 } ] }; } module.exports = objectivec;