module.exports = function(hljs) { var SWIFT_KEYWORDS = { keyword: 'class deinit enum extension func import init let protocol static ' + 'struct subscript typealias var break case continue default do ' + 'else fallthrough if in for return switch where while as dynamicType ' + 'is new super self Self Type __COLUMN__ __FILE__ __FUNCTION__ ' + '__LINE__ associativity didSet get infix inout left mutating none ' + 'nonmutating operator override postfix precedence prefix right set '+ 'unowned unowned safe unsafe weak willSet', literal: 'true false nil', built_in: 'abs advance alignof alignofValue assert bridgeFromObjectiveC ' + 'bridgeFromObjectiveCUnconditional bridgeToObjectiveC ' + 'bridgeToObjectiveCUnconditional c contains count countElements ' + 'countLeadingZeros debugPrint debugPrintln distance dropFirst dropLast dump ' + 'encodeBitsAsWords enumerate equal filter find getBridgedObjectiveCType ' + 'getVaList indices insertionSort isBridgedToObjectiveC ' + 'isBridgedVerbatimToObjectiveC isUniquelyReferenced join ' + 'lexicographicalCompare map max maxElement min minElement numericCast ' + 'partition posix print println quickSort reduce reflect reinterpretCast ' + 'reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof ' + 'strideofValue swap swift toString transcode underestimateCount ' + 'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' + 'withUnsafePointerToObject withUnsafePointers withVaList' }; var TYPE = { className: 'type', begin: '\\b[A-Z][\\w\']*', relevance: 0 }; var BLOCK_COMMENT = hljs.COMMENT( '/\\*', '\\*/', { contains: ['self'] } ); var SUBST = { className: 'subst', begin: /\\\(/, end: '\\)', keywords: SWIFT_KEYWORDS, contains: [] // assigned later }; var NUMBERS = { className: 'number', begin: '\\b([\\d_]+(\\.[\\deE_]+)?|0x[a-fA-F0-9_]+(\\.[a-fA-F0-9p_]+)?|0b[01_]+|0o[0-7_]+)\\b', relevance: 0 }; var QUOTE_STRING_MODE = hljs.inherit(hljs.QUOTE_STRING_MODE, { contains: [SUBST, hljs.BACKSLASH_ESCAPE] }); SUBST.contains = [NUMBERS]; return { keywords: SWIFT_KEYWORDS, contains: [ QUOTE_STRING_MODE, hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT, TYPE, NUMBERS, { className: 'func', beginKeywords: 'func', end: '{', excludeEnd: true, contains: [ hljs.inherit(hljs.TITLE_MODE, { begin: /[A-Za-z$_][0-9A-Za-z$_]*/, illegal: /\(/ }), { className: 'generics', begin: //, illegal: />/ }, { className: 'params', begin: /\(/, end: /\)/, endsParent: true, keywords: SWIFT_KEYWORDS, contains: [ 'self', NUMBERS, QUOTE_STRING_MODE, hljs.C_BLOCK_COMMENT_MODE, {begin: ':'} // relevance booster ], illegal: /["']/ } ], illegal: /\[|%/ }, { className: 'class', beginKeywords: 'struct protocol class extension enum', keywords: SWIFT_KEYWORDS, end: '\\{', excludeEnd: true, contains: [ hljs.inherit(hljs.TITLE_MODE, {begin: /[A-Za-z$_][0-9A-Za-z$_]*/}) ] }, { className: 'preprocessor', // @attributes begin: '(@assignment|@class_protocol|@exported|@final|@lazy|@noreturn|' + '@NSCopying|@NSManaged|@objc|@optional|@required|@auto_closure|' + '@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|' + '@infix|@prefix|@postfix)' } ] }; };