61 lines
7.3 KiB
JavaScript
61 lines
7.3 KiB
JavaScript
hljs.registerLanguage("swift",(()=>{"use strict";function e(e){
|
|
return e?"string"==typeof e?e:e.source:null}function n(e){return a("(?=",e,")")}
|
|
function a(...n){return n.map((n=>e(n))).join("")}function t(...n){
|
|
return"("+n.map((n=>e(n))).join("|")+")"}
|
|
const i=e=>a(/\b/,e,/\w$/.test(e)?/\b/:/\B/),s=["Protocol","Type"].map(i),u=["init","self"].map(i),c=["Any","Self"],r=["associatedtype","async","await",/as\?/,/as!/,"as","break","case","catch","class","continue","convenience","default","defer","deinit","didSet","do","dynamic","else","enum","extension","fallthrough",/fileprivate\(set\)/,"fileprivate","final","for","func","get","guard","if","import","indirect","infix",/init\?/,/init!/,"inout",/internal\(set\)/,"internal","in","is","lazy","let","mutating","nonmutating",/open\(set\)/,"open","operator","optional","override","postfix","precedencegroup","prefix",/private\(set\)/,"private","protocol",/public\(set\)/,"public","repeat","required","rethrows","return","set","some","static","struct","subscript","super","switch","throws","throw",/try\?/,/try!/,"try","typealias",/unowned\(safe\)/,/unowned\(unsafe\)/,"unowned","var","weak","where","while","willSet"],o=["false","nil","true"],l=["assignment","associativity","higherThan","left","lowerThan","none","right"],m=["#colorLiteral","#column","#dsohandle","#else","#elseif","#endif","#error","#file","#fileID","#fileLiteral","#filePath","#function","#if","#imageLiteral","#keyPath","#line","#selector","#sourceLocation","#warn_unqualified_access","#warning"],d=["abs","all","any","assert","assertionFailure","debugPrint","dump","fatalError","getVaList","isKnownUniquelyReferenced","max","min","numericCast","pointwiseMax","pointwiseMin","precondition","preconditionFailure","print","readLine","repeatElement","sequence","stride","swap","swift_unboxFromSwiftValueWithType","transcode","type","unsafeBitCast","unsafeDowncast","withExtendedLifetime","withUnsafeMutablePointer","withUnsafePointer","withVaList","withoutActuallyEscaping","zip"],p=t(/[/=\-+!*%<>&|^~?]/,/[\u00A1-\u00A7]/,/[\u00A9\u00AB]/,/[\u00AC\u00AE]/,/[\u00B0\u00B1]/,/[\u00B6\u00BB\u00BF\u00D7\u00F7]/,/[\u2016-\u2017]/,/[\u2020-\u2027]/,/[\u2030-\u203E]/,/[\u2041-\u2053]/,/[\u2055-\u205E]/,/[\u2190-\u23FF]/,/[\u2500-\u2775]/,/[\u2794-\u2BFF]/,/[\u2E00-\u2E7F]/,/[\u3001-\u3003]/,/[\u3008-\u3020]/,/[\u3030]/),F=t(p,/[\u0300-\u036F]/,/[\u1DC0-\u1DFF]/,/[\u20D0-\u20FF]/,/[\uFE00-\uFE0F]/,/[\uFE20-\uFE2F]/),b=a(p,F,"*"),h=t(/[a-zA-Z_]/,/[\u00A8\u00AA\u00AD\u00AF\u00B2-\u00B5\u00B7-\u00BA]/,/[\u00BC-\u00BE\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u00FF]/,/[\u0100-\u02FF\u0370-\u167F\u1681-\u180D\u180F-\u1DBF]/,/[\u1E00-\u1FFF]/,/[\u200B-\u200D\u202A-\u202E\u203F-\u2040\u2054\u2060-\u206F]/,/[\u2070-\u20CF\u2100-\u218F\u2460-\u24FF\u2776-\u2793]/,/[\u2C00-\u2DFF\u2E80-\u2FFF]/,/[\u3004-\u3007\u3021-\u302F\u3031-\u303F\u3040-\uD7FF]/,/[\uF900-\uFD3D\uFD40-\uFDCF\uFDF0-\uFE1F\uFE30-\uFE44]/,/[\uFE47-\uFEFE\uFF00-\uFFFD]/),f=t(h,/\d/,/[\u0300-\u036F\u1DC0-\u1DFF\u20D0-\u20FF\uFE20-\uFE2F]/),w=a(h,f,"*"),y=a(/[A-Z]/,f,"*"),g=["autoclosure",a(/convention\(/,t("swift","block","c"),/\)/),"discardableResult","dynamicCallable","dynamicMemberLookup","escaping","frozen","GKInspectable","IBAction","IBDesignable","IBInspectable","IBOutlet","IBSegueAction","inlinable","main","nonobjc","NSApplicationMain","NSCopying","NSManaged",a(/objc\(/,w,/\)/),"objc","objcMembers","propertyWrapper","requires_stored_property_inits","testable","UIApplicationMain","unknown","usableFromInline"],E=["iOS","iOSApplicationExtension","macOS","macOSApplicationExtension","macCatalyst","macCatalystApplicationExtension","watchOS","watchOSApplicationExtension","tvOS","tvOSApplicationExtension","swift"]
|
|
;return e=>{const p={match:/\s+/,relevance:0},h=e.COMMENT("/\\*","\\*/",{
|
|
contains:["self"]}),v=[e.C_LINE_COMMENT_MODE,h],N={className:"keyword",
|
|
begin:a(/\./,n(t(...s,...u))),end:t(...s,...u),excludeBegin:!0},A={
|
|
match:a(/\./,t(...r)),relevance:0
|
|
},C=r.filter((e=>"string"==typeof e)).concat(["_|0"]),_={variants:[{
|
|
className:"keyword",
|
|
match:t(...r.filter((e=>"string"!=typeof e)).concat(c).map(i),...u)}]},D={
|
|
$pattern:t(/\b\w+/,/#\w+/),keyword:C.concat(m),literal:o},B=[N,A,_],k=[{
|
|
match:a(/\./,t(...d)),relevance:0},{className:"built_in",
|
|
match:a(/\b/,t(...d),/(?=\()/)}],M={match:/->/,relevance:0},S=[M,{
|
|
className:"operator",relevance:0,variants:[{match:b},{match:`\\.(\\.|${F})+`}]
|
|
}],x="([0-9a-fA-F]_*)+",I={className:"number",relevance:0,variants:[{
|
|
match:"\\b(([0-9]_*)+)(\\.(([0-9]_*)+))?([eE][+-]?(([0-9]_*)+))?\\b"},{
|
|
match:`\\b0x(${x})(\\.(${x}))?([pP][+-]?(([0-9]_*)+))?\\b`},{
|
|
match:/\b0o([0-7]_*)+\b/},{match:/\b0b([01]_*)+\b/}]},O=(e="")=>({
|
|
className:"subst",variants:[{match:a(/\\/,e,/[0\\tnr"']/)},{
|
|
match:a(/\\/,e,/u\{[0-9a-fA-F]{1,8}\}/)}]}),T=(e="")=>({className:"subst",
|
|
match:a(/\\/,e,/[\t ]*(?:[\r\n]|\r\n)/)}),L=(e="")=>({className:"subst",
|
|
label:"interpol",begin:a(/\\/,e,/\(/),end:/\)/}),P=(e="")=>({begin:a(e,/"""/),
|
|
end:a(/"""/,e),contains:[O(e),T(e),L(e)]}),$=(e="")=>({begin:a(e,/"/),
|
|
end:a(/"/,e),contains:[O(e),L(e)]}),K={className:"string",
|
|
variants:[P(),P("#"),P("##"),P("###"),$(),$("#"),$("##"),$("###")]},j={
|
|
match:a(/`/,w,/`/)},z=[j,{className:"variable",match:/\$\d+/},{
|
|
className:"variable",match:`\\$${f}+`}],q=[{match:/(@|#)available/,
|
|
className:"keyword",starts:{contains:[{begin:/\(/,end:/\)/,keywords:E,
|
|
contains:[...S,I,K]}]}},{className:"keyword",match:a(/@/,t(...g))},{
|
|
className:"meta",match:a(/@/,w)}],U={match:n(/\b[A-Z]/),relevance:0,contains:[{
|
|
className:"type",
|
|
match:a(/(AV|CA|CF|CG|CI|CL|CM|CN|CT|MK|MP|MTK|MTL|NS|SCN|SK|UI|WK|XC)/,f,"+")
|
|
},{className:"type",match:y,relevance:0},{match:/[?!]+/,relevance:0},{
|
|
match:/\.\.\./,relevance:0},{match:a(/\s+&\s+/,n(y)),relevance:0}]},Z={
|
|
begin:/</,end:/>/,keywords:D,contains:[...v,...B,...q,M,U]};U.contains.push(Z)
|
|
;const G={begin:/\(/,end:/\)/,relevance:0,keywords:D,contains:["self",{
|
|
match:a(w,/\s*:/),keywords:"_|0",relevance:0
|
|
},...v,...B,...k,...S,I,K,...z,...q,U]},H={beginKeywords:"func",contains:[{
|
|
className:"title",match:t(j.match,w,b),endsParent:!0,relevance:0},p]},R={
|
|
begin:/</,end:/>/,contains:[...v,U]},V={begin:/\(/,end:/\)/,keywords:D,
|
|
contains:[{begin:t(n(a(w,/\s*:/)),n(a(w,/\s+/,w,/\s*:/))),end:/:/,relevance:0,
|
|
contains:[{className:"keyword",match:/\b_\b/},{className:"params",match:w}]
|
|
},...v,...B,...S,I,K,...q,U,G],endsParent:!0,illegal:/["']/},W={
|
|
className:"function",match:n(/\bfunc\b/),contains:[H,R,V,p],illegal:[/\[/,/%/]
|
|
},X={className:"function",match:/\b(subscript|init[?!]?)\s*(?=[<(])/,keywords:{
|
|
keyword:"subscript init init? init!",$pattern:/\w+[?!]?/},contains:[R,V,p],
|
|
illegal:/\[|%/},J={beginKeywords:"operator",end:e.MATCH_NOTHING_RE,contains:[{
|
|
className:"title",match:b,endsParent:!0,relevance:0}]},Q={
|
|
beginKeywords:"precedencegroup",end:e.MATCH_NOTHING_RE,contains:[{
|
|
className:"title",match:y,relevance:0},{begin:/{/,end:/}/,relevance:0,
|
|
endsParent:!0,keywords:[...l,...o],contains:[U]}]};for(const e of K.variants){
|
|
const n=e.contains.find((e=>"interpol"===e.label));n.keywords=D
|
|
;const a=[...B,...k,...S,I,K,...z];n.contains=[...a,{begin:/\(/,end:/\)/,
|
|
contains:["self",...a]}]}return{name:"Swift",keywords:D,contains:[...v,W,X,{
|
|
className:"class",beginKeywords:"struct protocol class extension enum",
|
|
end:"\\{",excludeEnd:!0,keywords:D,contains:[e.inherit(e.TITLE_MODE,{
|
|
begin:/[A-Za-z$_][\u00C0-\u02B80-9A-Za-z$_]*/}),...B]},J,Q,{
|
|
beginKeywords:"import",end:/$/,contains:[...v],relevance:0
|
|
},...B,...k,...S,I,K,...z,...q,U,G]}}})()); |