objectivec.js 3.1 KB

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