0
This repository has been archived on 2024-08-27. You can view files and clone it, but cannot push or open issues or pull requests.
highlight_js-rails/vendor/assets/javascripts/highlight_js/languages/swift.js
2015-01-25 16:00:01 +01:00

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)'
}
]
};
}