objectivec.js 3.8 KB

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