117 lines
4.0 KiB
JavaScript
117 lines
4.0 KiB
JavaScript
/*
|
|
Language: Swift
|
|
Author: Chris Eidhof <chris@eidhof.nl>
|
|
Contributors: Nate Cook <natecook@gmail.com>
|
|
Category: system
|
|
*/
|
|
|
|
|
|
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 false filter find getBridgedObjectiveCType ' +
|
|
'getVaList indices insertionSort isBridgedToObjectiveC ' +
|
|
'isBridgedVerbatimToObjectiveC isUniquelyReferenced join ' +
|
|
'lexicographicalCompare map max maxElement min minElement nil numericCast ' +
|
|
'partition posix print println quickSort reduce reflect reinterpretCast ' +
|
|
'reverse roundUpToAlignment sizeof sizeofValue sort split startsWith strideof ' +
|
|
'strideofValue swap swift toString transcode true underestimateCount ' +
|
|
'unsafeReflect withExtendedLifetime withObjectAtPlusZero withUnsafePointer ' +
|
|
'withUnsafePointerToObject withUnsafePointers withVaList'
|
|
};
|
|
|
|
var TYPE = {
|
|
className: 'type',
|
|
begin: '\\b[A-Z][\\w\']*',
|
|
relevance: 0
|
|
};
|
|
var BLOCK_COMMENT = {
|
|
className: 'comment',
|
|
begin: '/\\*', end: '\\*/',
|
|
contains: [hljs.PHRASAL_WORDS_MODE, '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: /</, end: />/,
|
|
illegal: />/
|
|
},
|
|
{
|
|
className: 'params',
|
|
begin: /\(/, end: /\)/,
|
|
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)'
|
|
}
|
|
]
|
|
};
|
|
}
|