/*
Language: Objective C
Author: Valerii Hiora <valerii.hiora@gmail.com>
Contributors: Angel G. Olloqui <angelgarcia.mail@gmail.com>
*/

function(hljs) {
  var OBJC_KEYWORDS = {
    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',
    literal:
    	'false true FALSE TRUE nil YES NO NULL',
    built_in:
      'NSString NSDictionary CGRect CGPoint UIButton UILabel UITextView UIWebView MKMapView ' +
      'NSView NSViewController NSWindow NSWindowController NSSet NSUUID NSIndexSet ' +
      'UISegmentedControl NSObject UITableViewDelegate UITableViewDataSource NSThread ' +
      'UIActivityIndicator UITabbar UIToolBar UIBarButtonItem UIImageView NSAutoreleasePool ' +
      'UITableView BOOL NSInteger CGFloat NSException NSLog NSMutableString NSMutableArray ' +
      'NSMutableDictionary NSURL NSIndexPath CGSize UITableViewCell UIView UIViewController ' +
      'UINavigationBar UINavigationController UITabBarController UIPopoverController ' +
      'UIPopoverControllerDelegate UIImage NSNumber UISearchBar NSFetchedResultsController ' +
      'NSFetchedResultsChangeType UIScrollView UIScrollViewDelegate UIEdgeInsets UIColor ' +
      'UIFont UIApplication NSNotFound NSNotificationCenter NSNotification ' +
      'UILocalNotification NSBundle NSFileManager NSTimeInterval NSDate NSCalendar ' +
      'NSUserDefaults UIWindow NSRange NSArray NSError NSURLRequest NSURLConnection ' +
      'UIInterfaceOrientation MPMoviePlayerController dispatch_once_t ' +
      'dispatch_queue_t dispatch_sync dispatch_async dispatch_once'
  };
  var LEXEMES = /[a-zA-Z@][a-zA-Z0-9_]*/;
  var CLASS_KEYWORDS = '@interface @class @protocol @implementation';
  return {
    aliases: ['m', 'mm', 'objc', 'obj-c'],
    keywords: OBJC_KEYWORDS, lexemes: LEXEMES,
    illegal: '</',
    contains: [
      hljs.C_LINE_COMMENT_MODE,
      hljs.C_BLOCK_COMMENT_MODE,
      hljs.C_NUMBER_MODE,
      hljs.QUOTE_STRING_MODE,
      {
        className: 'string',
        begin: '@"',
        end: '"',
        illegal: '\\n',
        contains: [hljs.BACKSLASH_ESCAPE]
      },
      {
        className: 'string',
        begin: '\'',
        end: '[^\\\\]\'',
        illegal: '[^\\\\][^\']'
      },

      {
        className: 'preprocessor',
        begin: '#import',
        end: '$',
        contains: [
        {
          className: 'title',
          begin: '\"',
          end: '\"'
        },
        {
          className: 'title',
          begin: '<',
          end: '>'
        }
        ]
      },
      {
        className: 'preprocessor',
        begin: '#',
        end: '$'
      },
      {
        className: 'class',
        begin: '(' + CLASS_KEYWORDS.split(' ').join('|') + ')\\b', end: '({|$)', excludeEnd: true,
        keywords: CLASS_KEYWORDS, lexemes: LEXEMES,
        contains: [
          hljs.UNDERSCORE_TITLE_MODE
        ]
      },
      {
        className: 'variable',
        begin: '\\.'+hljs.UNDERSCORE_IDENT_RE,
        relevance: 0
      }
    ]
  };
}

@@ -2579,32 +2579,68 @@
 tring',%0A        
+variants: %5B%0A          %7B%0A            
 begin: '@%22',%0A   
@@ -2635,24 +2635,16 @@
 n: '@%22',
-%0A       
  end: '%22
@@ -2646,32 +2646,36 @@
 d: '%22',%0A        
+    
 illegal: '%5C%5Cn',%0A
@@ -2674,16 +2674,20 @@
  '%5C%5Cn',%0A
+    
         
@@ -2718,32 +2718,36 @@
 H_ESCAPE%5D%0A      
+    
 %7D,%0A      %7B%0A     
@@ -2743,39 +2743,18 @@
     
-%7B%0A
     
+%7B%0A
     
-className: 'string',%0A
     
@@ -2769,24 +2769,16 @@
 n: '%5C'',
-%0A       
  end: '%5B
@@ -2788,16 +2788,20 @@
 %5C%5C%5D%5C'',%0A
+    
         
@@ -2824,16 +2824,38 @@
 %5D%5B%5E%5C'%5D'%0A
+          %7D%0A        %5D%0A
       %7D,
@@ -2855,17 +2855,16 @@
      %7D,%0A
-%0A
       %7B%0A
@@ -2962,34 +2962,38 @@
 ains: %5B%0A        
-%7B%0A
+  %7B%0A  
           classN
@@ -3020,48 +3020,60 @@
     
-begin: '%5C%22',%0A          end: '%5C%22'%0A       
+  variants: %5B%0A              %7B begin: '%5C%22', end: '%5C%22'
  %7D,%0A
@@ -3078,28 +3078,24 @@
 ,%0A      
-  %7B%0A
         
   classN
@@ -3090,51 +3090,32 @@
     
-  className: 'title',%0A          begin: '%3C',
+%7B begin: '%3C', end: '%3E' %7D
 %0A   
@@ -3125,17 +3125,14 @@
     
-end: '%3E'%0A
+  %5D%0A  
     

Use variants for repeat classNames