objectivec.js 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. /*
  2. Language: Objective-C
  3. Author: Valerii Hiora <[email protected]>
  4. Contributors: Angel G. Olloqui <[email protected]>, Matt Diephouse <[email protected]>, Andrew Farmer <[email protected]>, Minh Nguyễn <[email protected]>
  5. Category: common
  6. */
  7. function(hljs) {
  8. var API_CLASS = {
  9. className: 'built_in',
  10. begin: '\\b(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)\\w+',
  11. };
  12. var OBJC_KEYWORDS = {
  13. keyword:
  14. 'int float while char export sizeof typedef const struct for union ' +
  15. 'unsigned long volatile static bool mutable if do return goto void ' +
  16. 'enum else break extern asm case short default double register explicit ' +
  17. 'signed typename this switch continue wchar_t inline readonly assign ' +
  18. 'readwrite self @synchronized id typeof ' +
  19. 'nonatomic super unichar IBOutlet IBAction strong weak copy ' +
  20. 'in out inout bycopy byref oneway __strong __weak __block __autoreleasing ' +
  21. '@private @protected @public @try @property @end @throw @catch @finally ' +
  22. '@autoreleasepool @synthesize @dynamic @selector @optional @required ' +
  23. '@encode @package @import @defs @compatibility_alias ' +
  24. '__bridge __bridge_transfer __bridge_retained __bridge_retain ' +
  25. '__covariant __contravariant __kindof ' +
  26. '_Nonnull _Nullable _Null_unspecified ' +
  27. '__FUNCTION__ __PRETTY_FUNCTION__ __attribute__ ' +
  28. 'getter setter retain unsafe_unretained ' +
  29. 'nonnull nullable null_unspecified null_resettable class instancetype ' +
  30. 'NS_DESIGNATED_INITIALIZER NS_UNAVAILABLE NS_REQUIRES_SUPER ' +
  31. 'NS_RETURNS_INNER_POINTER NS_INLINE NS_AVAILABLE NS_DEPRECATED ' +
  32. 'NS_ENUM NS_OPTIONS NS_SWIFT_UNAVAILABLE ' +
  33. 'NS_ASSUME_NONNULL_BEGIN NS_ASSUME_NONNULL_END ' +
  34. 'NS_REFINED_FOR_SWIFT NS_SWIFT_NAME NS_SWIFT_NOTHROW ' +
  35. 'NS_DURING NS_HANDLER NS_ENDHANDLER NS_VALUERETURN NS_VOIDRETURN',
  36. literal:
  37. 'false true FALSE TRUE nil YES NO NULL',
  38. built_in:
  39. 'BOOL dispatch_once_t dispatch_queue_t dispatch_sync dispatch_async dispatch_once'
  40. };
  41. var LEXEMES = /[a-zA-Z@][a-zA-Z0-9_]*/;
  42. var CLASS_KEYWORDS = '@interface @class @protocol @implementation';
  43. return {
  44. aliases: ['mm', 'objc', 'obj-c'],
  45. keywords: OBJC_KEYWORDS,
  46. lexemes: LEXEMES,
  47. illegal: '</',
  48. contains: [
  49. API_CLASS,
  50. hljs.C_LINE_COMMENT_MODE,
  51. hljs.C_BLOCK_COMMENT_MODE,
  52. hljs.C_NUMBER_MODE,
  53. hljs.QUOTE_STRING_MODE,
  54. {
  55. className: 'string',
  56. variants: [
  57. {
  58. begin: '@"', end: '"',
  59. illegal: '\\n',
  60. contains: [hljs.BACKSLASH_ESCAPE]
  61. },
  62. {
  63. begin: '\'', end: '[^\\\\]\'',
  64. illegal: '[^\\\\][^\']'
  65. }
  66. ]
  67. },
  68. {
  69. className: 'meta',
  70. begin: '#',
  71. end: '$',
  72. contains: [
  73. {
  74. className: 'meta-string',
  75. variants: [
  76. { begin: '\"', end: '\"' },
  77. { begin: '<', end: '>' }
  78. ]
  79. }
  80. ]
  81. },
  82. {
  83. className: 'class',
  84. begin: '(' + CLASS_KEYWORDS.split(' ').join('|') + ')\\b', end: '({|$)', excludeEnd: true,
  85. keywords: CLASS_KEYWORDS, lexemes: LEXEMES,
  86. contains: [
  87. hljs.UNDERSCORE_TITLE_MODE
  88. ]
  89. },
  90. {
  91. begin: '\\.'+hljs.UNDERSCORE_IDENT_RE,
  92. relevance: 0
  93. }
  94. ]
  95. };
  96. }