123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- module.exports = function(hljs) {
- var SWIFT_KEYWORDS = {
- keyword: '#available #colorLiteral #column #else #elseif #endif #file ' +
- '#fileLiteral #function #if #imageLiteral #line #selector #sourceLocation ' +
- '_ __COLUMN__ __FILE__ __FUNCTION__ __LINE__ Any as as! as? associatedtype ' +
- 'associativity break case catch class continue convenience default defer deinit didSet do ' +
- 'dynamic dynamicType else enum extension fallthrough false fileprivate final for func ' +
- 'get guard if import in indirect infix init inout internal is lazy left let ' +
- 'mutating nil none nonmutating open operator optional override postfix precedence ' +
- 'prefix private protocol Protocol public repeat required rethrows return ' +
- 'right self Self set static struct subscript super switch throw throws true ' +
- 'try try! try? Type typealias unowned var weak where while willSet',
- literal: 'true false nil',
- built_in: 'abs advance alignof alignofValue anyGenerator assert assertionFailure ' +
- 'bridgeFromObjectiveC bridgeFromObjectiveCUnconditional bridgeToObjectiveC ' +
- 'bridgeToObjectiveCUnconditional c contains count countElements countLeadingZeros ' +
- 'debugPrint debugPrintln distance dropFirst dropLast dump encodeBitsAsWords ' +
- 'enumerate equal fatalError filter find getBridgedObjectiveCType getVaList ' +
- 'indices insertionSort isBridgedToObjectiveC isBridgedVerbatimToObjectiveC ' +
- 'isUniquelyReferenced isUniquelyReferencedNonObjC join lazy lexicographicalCompare ' +
- 'map max maxElement min minElement numericCast overlaps partition posix ' +
- 'precondition preconditionFailure print println quickSort readLine reduce reflect ' +
- 'reinterpretCast reverse roundUpToAlignment sizeof sizeofValue sort split ' +
- 'startsWith stride strideof strideofValue swap toString transcode ' +
- 'underestimateCount unsafeAddressOf unsafeBitCast unsafeDowncast unsafeUnwrap ' +
- 'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' +
- 'withUnsafePointerToObject withUnsafeMutablePointer withUnsafeMutablePointers ' +
- 'withUnsafePointer withUnsafePointers withVaList zip'
- };
- var TYPE = {
- className: 'type',
- begin: '\\b[A-Z][\\w\u00C0-\u02B8\']*',
- relevance: 0
- };
- // slightly more special to swift
- var OPTIONAL_USING_TYPE = {
- className: 'type',
- begin: '\\b[A-Z][\\w\u00C0-\u02B8\']*[!?]'
- }
- var BLOCK_COMMENT = hljs.COMMENT(
- '/\\*',
- '\\*/',
- {
- contains: ['self']
- }
- );
- var SUBST = {
- className: 'subst',
- begin: /\\\(/, end: '\\)',
- keywords: SWIFT_KEYWORDS,
- contains: [] // assigned later
- };
- var STRING = {
- className: 'string',
- contains: [hljs.BACKSLASH_ESCAPE, SUBST],
- variants: [
- {begin: /"""/, end: /"""/},
- {begin: /"/, end: /"/},
- ]
- };
- 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
- };
- SUBST.contains = [NUMBERS];
- return {
- keywords: SWIFT_KEYWORDS,
- contains: [
- STRING,
- hljs.C_LINE_COMMENT_MODE,
- BLOCK_COMMENT,
- OPTIONAL_USING_TYPE,
- TYPE,
- NUMBERS,
- {
- className: 'function',
- beginKeywords: 'func', end: '{', excludeEnd: true,
- contains: [
- hljs.inherit(hljs.TITLE_MODE, {
- begin: /[A-Za-z$_][0-9A-Za-z$_]*/
- }),
- {
- begin: /</, end: />/
- },
- {
- className: 'params',
- begin: /\(/, end: /\)/, endsParent: true,
- keywords: SWIFT_KEYWORDS,
- contains: [
- 'self',
- NUMBERS,
- STRING,
- 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$_][\u00C0-\u02B80-9A-Za-z$_]*/})
- ]
- },
- {
- className: 'meta', // @attributes
- begin: '(@discardableResult|@warn_unused_result|@exported|@lazy|@noescape|' +
- '@NSCopying|@NSManaged|@objc|@objcMembers|@convention|@required|' +
- '@noreturn|@IBAction|@IBDesignable|@IBInspectable|@IBOutlet|' +
- '@infix|@prefix|@postfix|@autoclosure|@testable|@available|' +
- '@nonobjc|@NSApplicationMain|@UIApplicationMain|@dynamicMemberLookup|' +
- '@propertyWrapper)'
- },
- {
- beginKeywords: 'import', end: /$/,
- contains: [hljs.C_LINE_COMMENT_MODE, BLOCK_COMMENT]
- }
- ]
- };
- };
|