1871 lines
90 KiB
JavaScript
1871 lines
90 KiB
JavaScript
|
/**
|
|||
|
*
|
|||
|
* @authors yutent (yutent@doui.cc)
|
|||
|
* @date 2017-08-02 21:50:34
|
|||
|
* @version $Id$
|
|||
|
*/
|
|||
|
|
|||
|
import './base'
|
|||
|
|
|||
|
Prism.languages.actionscript = Prism.languages.extend('javascript', {
|
|||
|
keyword: /\b(?:as|break|case|catch|class|const|default|delete|do|else|extends|finally|for|function|if|implements|import|in|instanceof|interface|internal|is|native|new|null|package|private|protected|public|return|super|switch|this|throw|try|typeof|use|var|void|while|with|dynamic|each|final|get|include|namespace|native|override|set|static)\b/,
|
|||
|
operator: /\+\+|--|(?:[+\-*\/%^]|&&?|\|\|?|<<?|>>?>?|[!=]=?)=?|[~?@]/
|
|||
|
})
|
|||
|
Prism.languages.actionscript['class-name'].alias = 'function'
|
|||
|
|
|||
|
if (Prism.languages.markup) {
|
|||
|
Prism.languages.insertBefore('actionscript', 'string', {
|
|||
|
xml: {
|
|||
|
pattern: /(^|[^.])<\/?\w+(?:\s+[^\s>\/=]+=("|')(?:\\\1|\\?(?!\1)[\s\S])*\2)*\s*\/?>/,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.markup
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
/*--------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.apacheconf = {
|
|||
|
comment: /#.*/,
|
|||
|
'directive-inline': {
|
|||
|
pattern: /^(\s*)\b(AcceptFilter|AcceptPathInfo|AccessFileName|Action|AddAlt|AddAltByEncoding|AddAltByType|AddCharset|AddDefaultCharset|AddDescription|AddEncoding|AddHandler|AddIcon|AddIconByEncoding|AddIconByType|AddInputFilter|AddLanguage|AddModuleInfo|AddOutputFilter|AddOutputFilterByType|AddType|Alias|AliasMatch|Allow|AllowCONNECT|AllowEncodedSlashes|AllowMethods|AllowOverride|AllowOverrideList|Anonymous|Anonymous_LogEmail|Anonymous_MustGiveEmail|Anonymous_NoUserID|Anonymous_VerifyEmail|AsyncRequestWorkerFactor|AuthBasicAuthoritative|AuthBasicFake|AuthBasicProvider|AuthBasicUseDigestAlgorithm|AuthDBDUserPWQuery|AuthDBDUserRealmQuery|AuthDBMGroupFile|AuthDBMType|AuthDBMUserFile|AuthDigestAlgorithm|AuthDigestDomain|AuthDigestNonceLifetime|AuthDigestProvider|AuthDigestQop|AuthDigestShmemSize|AuthFormAuthoritative|AuthFormBody|AuthFormDisableNoStore|AuthFormFakeBasicAuth|AuthFormLocation|AuthFormLoginRequiredLocation|AuthFormLoginSuccessLocation|AuthFormLogoutLocation|AuthFormMethod|AuthFormMimetype|AuthFormPassword|AuthFormProvider|AuthFormSitePassphrase|AuthFormSize|AuthFormUsername|AuthGroupFile|AuthLDAPAuthorizePrefix|AuthLDAPBindAuthoritative|AuthLDAPBindDN|AuthLDAPBindPassword|AuthLDAPCharsetConfig|AuthLDAPCompareAsUser|AuthLDAPCompareDNOnServer|AuthLDAPDereferenceAliases|AuthLDAPGroupAttribute|AuthLDAPGroupAttributeIsDN|AuthLDAPInitialBindAsUser|AuthLDAPInitialBindPattern|AuthLDAPMaxSubGroupDepth|AuthLDAPRemoteUserAttribute|AuthLDAPRemoteUserIsDN|AuthLDAPSearchAsUser|AuthLDAPSubGroupAttribute|AuthLDAPSubGroupClass|AuthLDAPUrl|AuthMerging|AuthName|AuthnCacheContext|AuthnCacheEnable|AuthnCacheProvideFor|AuthnCacheSOCache|AuthnCacheTimeout|AuthnzFcgiCheckAuthnProvider|AuthnzFcgiDefineProvider|AuthType|AuthUserFile|AuthzDBDLoginToReferer|AuthzDBDQuery|AuthzDBDRedirectQuery|AuthzDBMType|AuthzSendForbiddenOnFailure|BalancerGrowth|BalancerInherit|BalancerMember|BalancerPersist|BrowserMatch|BrowserMatchNoCase|BufferedLogs|BufferSize|CacheDefaultExpire|CacheDetailHeader|CacheDirLength|CacheDirLevels|CacheDisable|CacheEnable|CacheFile|CacheHeader|CacheIgnoreCacheControl|CacheIgnoreHeaders|CacheIgnoreNoLastMod|CacheIgnoreQueryString|CacheIgnoreURLSessionIdentifiers|CacheKeyBaseURL|CacheLastModifiedFactor|CacheLock|CacheLockMaxAge|CacheLockPath|CacheMaxExpire|CacheMaxFileSize|CacheMinExpire|CacheMinFileSize|CacheNegotiatedDocs|CacheQuickHandler|CacheReadSize|CacheReadTime|CacheRoot|CacheSocache|CacheSocacheMaxSize|CacheSocacheMaxTime|CacheSocacheMinTime|CacheSocacheReadSize|CacheSocacheReadTime|CacheStaleOnError|CacheStoreExpired|CacheStoreNoStore|CacheStorePrivate|CGIDScriptTimeout|CGIMapExtension|CharsetDefault|CharsetOptions|CharsetSourceEnc|CheckCaseOnly|CheckSpelling|ChrootDir|ContentDigest|CookieDomain|CookieExpires|CookieName|CookieStyle|CookieTracking|CoreDumpDirectory|CustomLog|Dav|DavDepthInfinity|DavGenericLockDB|DavLockDB|DavMinTimeout|DBDExptime|DBDInitSQL|DBDKeep|DBDMax|DBDMin|DBDParams|DBDPersist|DBDPrepareSQL|DBDriver|DefaultIcon|DefaultLanguage|DefaultRuntimeDir|DefaultType|Define|DeflateBufferSize|DeflateCompressionLevel|DeflateFilterNote|DeflateInflateLimitRequestBody|DeflateInflateRatioBurst|DeflateInflateRatioLimit|DeflateMemLevel|DeflateWindowSize|Deny|DirectoryCheckHandler|DirectoryIndex|DirectoryIndexRedirect|DirectorySlash|DocumentRoot|DTracePrivileges|DumpIOInput|DumpIOOutput|EnableExceptionHook|EnableMMAP|EnableSendfile|Error|ErrorDocument|ErrorLog|ErrorLogFormat|Example|ExpiresActive|ExpiresByType|ExpiresDefault|ExtendedStatus|ExtFilterDefine|ExtFilterOptions|FallbackResource|FileETag|FilterChain|FilterDeclare|FilterProtocol|FilterProvider|FilterTrace|ForceLanguagePriority|ForceType|ForensicLog|GprofDir|GracefulShutdownTimeout|Group|Header|HeaderName|HeartbeatAddress|HeartbeatListen|HeartbeatMaxServers|HeartbeatStorage|HeartbeatStorage|HostnameLookups|IdentityCheck|IdentityCheckTimeout|ImapBase|ImapDefault|ImapMenu|Include|IncludeOptional|IndexHeadInsert|IndexIgnore|IndexIgnoreReset|IndexOptions|IndexOrderDefault|IndexStyleSheet|InputSed|ISAPIAppendLogToErrors|ISAPIAppendLogToQuery|ISAPICacheFi
|
|||
|
lookbehind: true,
|
|||
|
alias: 'property'
|
|||
|
},
|
|||
|
'directive-block': {
|
|||
|
pattern: /<\/?\b(AuthnProviderAlias|AuthzProviderAlias|Directory|DirectoryMatch|Else|ElseIf|Files|FilesMatch|If|IfDefine|IfModule|IfVersion|Limit|LimitExcept|Location|LocationMatch|Macro|Proxy|RequireAll|RequireAny|RequireNone|VirtualHost)\b *.*>/i,
|
|||
|
inside: {
|
|||
|
'directive-block': {
|
|||
|
pattern: /^<\/?\w+/,
|
|||
|
inside: {
|
|||
|
punctuation: /^<\/?/
|
|||
|
},
|
|||
|
alias: 'tag'
|
|||
|
},
|
|||
|
'directive-block-parameter': {
|
|||
|
pattern: /.*[^>]/,
|
|||
|
inside: {
|
|||
|
punctuation: /:/,
|
|||
|
string: {
|
|||
|
pattern: /("|').*\1/,
|
|||
|
inside: {
|
|||
|
variable: /(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
alias: 'attr-value'
|
|||
|
},
|
|||
|
punctuation: />/
|
|||
|
},
|
|||
|
alias: 'tag'
|
|||
|
},
|
|||
|
'directive-flags': {
|
|||
|
pattern: /\[(\w,?)+\]/,
|
|||
|
alias: 'keyword'
|
|||
|
},
|
|||
|
string: {
|
|||
|
pattern: /("|').*\1/,
|
|||
|
inside: {
|
|||
|
variable: /(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/
|
|||
|
}
|
|||
|
},
|
|||
|
variable: /(\$|%)\{?(\w\.?(\+|\-|:)?)+\}?/,
|
|||
|
regex: /\^?.*\$|\^.*\$?/
|
|||
|
}
|
|||
|
|
|||
|
/*-------------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.aspnet = Prism.languages.extend('markup', {
|
|||
|
'page-directive tag': {
|
|||
|
pattern: /<%\s*@.*%>/i,
|
|||
|
inside: {
|
|||
|
'page-directive tag': /<%\s*@\s*(?:Assembly|Control|Implements|Import|Master(?:Type)?|OutputCache|Page|PreviousPageType|Reference|Register)?|%>/i,
|
|||
|
rest: Prism.languages.markup.tag.inside
|
|||
|
}
|
|||
|
},
|
|||
|
'directive tag': {
|
|||
|
pattern: /<%.*%>/i,
|
|||
|
inside: {
|
|||
|
'directive tag': /<%\s*?[$=%#:]{0,2}|%>/i,
|
|||
|
rest: Prism.languages.csharp
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
// Regexp copied from prism-markup, with a negative look-ahead added
|
|||
|
Prism.languages.aspnet.tag.pattern = /<(?!%)\/?[^\s>\/]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\s\S])*\1|[^\s'">=]+))?)*\s*\/?>/i
|
|||
|
|
|||
|
// match directives of attribute value foo="<% Bar %>"
|
|||
|
Prism.languages.insertBefore(
|
|||
|
'inside',
|
|||
|
'punctuation',
|
|||
|
{
|
|||
|
'directive tag': Prism.languages.aspnet['directive tag']
|
|||
|
},
|
|||
|
Prism.languages.aspnet.tag.inside['attr-value']
|
|||
|
)
|
|||
|
|
|||
|
Prism.languages.insertBefore('aspnet', 'comment', {
|
|||
|
'asp comment': /<%--[\s\S]*?--%>/
|
|||
|
})
|
|||
|
|
|||
|
// script runat="server" contains csharp, not javascript
|
|||
|
Prism.languages.insertBefore(
|
|||
|
'aspnet',
|
|||
|
Prism.languages.javascript ? 'script' : 'tag',
|
|||
|
{
|
|||
|
'asp script': {
|
|||
|
pattern: /(<script(?=.*runat=['"]?server['"]?)[\s\S]*?>)[\s\S]*?(?=<\/script>)/i,
|
|||
|
lookbehind: true,
|
|||
|
inside: Prism.languages.csharp || {}
|
|||
|
}
|
|||
|
}
|
|||
|
)
|
|||
|
|
|||
|
/*-------------------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.basic = {
|
|||
|
string: /"(?:""|[!#$%&'()*,\/:;<=>?^_ +\-.A-Z\d])*"/i,
|
|||
|
comment: {
|
|||
|
pattern: /(?:!|REM\b).+/i,
|
|||
|
inside: {
|
|||
|
keyword: /^REM/i
|
|||
|
}
|
|||
|
},
|
|||
|
number: /(?:\b|\B[.-])(?:\d+\.?\d*)(?:E[+-]?\d+)?/i,
|
|||
|
keyword: /\b(?:AS|BEEP|BLOAD|BSAVE|CALL(?: ABSOLUTE)?|CASE|CHAIN|CHDIR|CLEAR|CLOSE|CLS|COM|COMMON|CONST|DATA|DECLARE|DEF(?: FN| SEG|DBL|INT|LNG|SNG|STR)|DIM|DO|DOUBLE|ELSE|ELSEIF|END|ENVIRON|ERASE|ERROR|EXIT|FIELD|FILES|FOR|FUNCTION|GET|GOSUB|GOTO|IF|INPUT|INTEGER|IOCTL|KEY|KILL|LINE INPUT|LOCATE|LOCK|LONG|LOOP|LSET|MKDIR|NAME|NEXT|OFF|ON(?: COM| ERROR| KEY| TIMER)?|OPEN|OPTION BASE|OUT|POKE|PUT|READ|REDIM|REM|RESTORE|RESUME|RETURN|RMDIR|RSET|RUN|SHARED|SINGLE|SELECT CASE|SHELL|SLEEP|STATIC|STEP|STOP|STRING|SUB|SWAP|SYSTEM|THEN|TIMER|TO|TROFF|TRON|TYPE|UNLOCK|UNTIL|USING|VIEW PRINT|WAIT|WEND|WHILE|WRITE)(?:\$|\b)/i,
|
|||
|
function: /\b(?:ABS|ACCESS|ACOS|ANGLE|AREA|ARITHMETIC|ARRAY|ASIN|ASK|AT|ATN|BASE|BEGIN|BREAK|CAUSE|CEIL|CHR|CLIP|COLLATE|COLOR|CON|COS|COSH|COT|CSC|DATE|DATUM|DEBUG|DECIMAL|DEF|DEG|DEGREES|DELETE|DET|DEVICE|DISPLAY|DOT|ELAPSED|EPS|ERASABLE|EXLINE|EXP|EXTERNAL|EXTYPE|FILETYPE|FIXED|FP|GO|GRAPH|HANDLER|IDN|IMAGE|IN|INT|INTERNAL|IP|IS|KEYED|LBOUND|LCASE|LEFT|LEN|LENGTH|LET|LINE|LINES|LOG|LOG10|LOG2|LTRIM|MARGIN|MAT|MAX|MAXNUM|MID|MIN|MISSING|MOD|NATIVE|NUL|NUMERIC|OF|OPTION|ORD|ORGANIZATION|OUTIN|OUTPUT|PI|POINT|POINTER|POINTS|POS|PRINT|PROGRAM|PROMPT|RAD|RADIANS|RANDOMIZE|RECORD|RECSIZE|RECTYPE|RELATIVE|REMAINDER|REPEAT|REST|RETRY|REWRITE|RIGHT|RND|ROUND|RTRIM|SAME|SEC|SELECT|SEQUENTIAL|SET|SETTER|SGN|SIN|SINH|SIZE|SKIP|SQR|STANDARD|STATUS|STR|STREAM|STYLE|TAB|TAN|TANH|TEMPLATE|TEXT|THERE|TIME|TIMEOUT|TRACE|TRANSFORM|TRUNCATE|UBOUND|UCASE|USE|VAL|VARIABLE|VIEWPORT|WHEN|WINDOW|WITH|ZER|ZONEWIDTH)(?:\$|\b)/i,
|
|||
|
operator: /<[=>]?|>=?|[+\-*\/^=&]|\b(?:AND|EQV|IMP|NOT|OR|XOR)\b/i,
|
|||
|
punctuation: /[,;:()]/
|
|||
|
}
|
|||
|
|
|||
|
/*----------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.c = Prism.languages.extend('clike', {
|
|||
|
keyword: /\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/,
|
|||
|
operator: /\-[>-]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|?\||[~^%?*\/]/,
|
|||
|
number: /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('c', 'string', {
|
|||
|
macro: {
|
|||
|
// allow for multiline macro definitions
|
|||
|
// spaces after the # character compile fine with gcc
|
|||
|
pattern: /(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im,
|
|||
|
lookbehind: true,
|
|||
|
alias: 'property',
|
|||
|
inside: {
|
|||
|
// highlight the path of the include statement as a string
|
|||
|
string: {
|
|||
|
pattern: /(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
// highlight macro directives as keywords
|
|||
|
directive: {
|
|||
|
pattern: /(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/,
|
|||
|
lookbehind: true,
|
|||
|
alias: 'keyword'
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
// highlight predefined macros as constants
|
|||
|
constant: /\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/
|
|||
|
})
|
|||
|
|
|||
|
delete Prism.languages.c['class-name']
|
|||
|
delete Prism.languages.c['boolean']
|
|||
|
|
|||
|
/*---------------------------------------------------*/
|
|||
|
Prism.languages.csharp = Prism.languages.extend('clike', {
|
|||
|
keyword: /\b(abstract|as|async|await|base|bool|break|byte|case|catch|char|checked|class|const|continue|decimal|default|delegate|do|double|else|enum|event|explicit|extern|false|finally|fixed|float|for|foreach|goto|if|implicit|in|int|interface|internal|is|lock|long|namespace|new|null|object|operator|out|override|params|private|protected|public|readonly|ref|return|sbyte|sealed|short|sizeof|stackalloc|static|string|struct|switch|this|throw|true|try|typeof|uint|ulong|unchecked|unsafe|ushort|using|virtual|void|volatile|while|add|alias|ascending|async|await|descending|dynamic|from|get|global|group|into|join|let|orderby|partial|remove|select|set|value|var|where|yield)\b/,
|
|||
|
string: [
|
|||
|
{
|
|||
|
pattern: /@("|')(\1\1|\\\1|\\?(?!\1)[\s\S])*\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /("|')(\\?.)*?\1/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
number: /\b-?(0x[\da-f]+|\d*\.?\d+f?)\b/i
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('csharp', 'keyword', {
|
|||
|
'generic-method': {
|
|||
|
pattern: /[a-z0-9_]+\s*<[^>\r\n]+?>\s*(?=\()/i,
|
|||
|
alias: 'function',
|
|||
|
inside: {
|
|||
|
keyword: Prism.languages.csharp.keyword,
|
|||
|
punctuation: /[<>(),.:]/
|
|||
|
}
|
|||
|
},
|
|||
|
preprocessor: {
|
|||
|
pattern: /(^\s*)#.*/m,
|
|||
|
lookbehind: true,
|
|||
|
alias: 'property',
|
|||
|
inside: {
|
|||
|
// highlight preprocessor directives as keywords
|
|||
|
directive: {
|
|||
|
pattern: /(\s*#)\b(define|elif|else|endif|endregion|error|if|line|pragma|region|undef|warning)\b/,
|
|||
|
lookbehind: true,
|
|||
|
alias: 'keyword'
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.cpp = Prism.languages.extend('c', {
|
|||
|
keyword: /\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/,
|
|||
|
boolean: /\b(true|false)\b/,
|
|||
|
operator: /[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('cpp', 'keyword', {
|
|||
|
'class-name': {
|
|||
|
pattern: /(class\s+)[a-z0-9_]+/i,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
/*-----------------------coffeescript-----------------------*/
|
|||
|
;(function(Prism) {
|
|||
|
// Ignore comments starting with { to privilege string interpolation highlighting
|
|||
|
var comment = /#(?!\{).+/,
|
|||
|
interpolation = {
|
|||
|
pattern: /#\{[^}]+\}/,
|
|||
|
alias: 'variable'
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.coffeescript = Prism.languages.extend('javascript', {
|
|||
|
comment: comment,
|
|||
|
string: [
|
|||
|
// Strings are multiline
|
|||
|
{
|
|||
|
pattern: /'(?:\\?[^\\])*?'/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
{
|
|||
|
// Strings are multiline
|
|||
|
pattern: /"(?:\\?[^\\])*?"/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
}
|
|||
|
],
|
|||
|
keyword: /\b(and|break|by|catch|class|continue|debugger|delete|do|each|else|extend|extends|false|finally|for|if|in|instanceof|is|isnt|let|loop|namespace|new|no|not|null|of|off|on|or|own|return|super|switch|then|this|throw|true|try|typeof|undefined|unless|until|when|while|window|with|yes|yield)\b/,
|
|||
|
'class-member': {
|
|||
|
pattern: /@(?!\d)\w+/,
|
|||
|
alias: 'variable'
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('coffeescript', 'comment', {
|
|||
|
'multiline-comment': {
|
|||
|
pattern: /###[\s\S]+?###/,
|
|||
|
alias: 'comment'
|
|||
|
},
|
|||
|
|
|||
|
// Block regexp can contain comments and interpolation
|
|||
|
'block-regex': {
|
|||
|
pattern: /\/{3}[\s\S]*?\/{3}/,
|
|||
|
alias: 'regex',
|
|||
|
inside: {
|
|||
|
comment: comment,
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('coffeescript', 'string', {
|
|||
|
'inline-javascript': {
|
|||
|
pattern: /`(?:\\?[\s\S])*?`/,
|
|||
|
inside: {
|
|||
|
delimiter: {
|
|||
|
pattern: /^`|`$/,
|
|||
|
alias: 'punctuation'
|
|||
|
},
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// Block strings
|
|||
|
'multiline-string': [
|
|||
|
{
|
|||
|
pattern: /'''[\s\S]*?'''/,
|
|||
|
greedy: true,
|
|||
|
alias: 'string'
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /"""[\s\S]*?"""/,
|
|||
|
greedy: true,
|
|||
|
alias: 'string',
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
}
|
|||
|
]
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('coffeescript', 'keyword', {
|
|||
|
// Object property
|
|||
|
property: /(?!\d)\w+(?=\s*:(?!:))/
|
|||
|
})
|
|||
|
|
|||
|
delete Prism.languages.coffeescript['template-string']
|
|||
|
})(Prism)
|
|||
|
|
|||
|
/*---------------------------ruby---------------------------*/
|
|||
|
;(function(Prism) {
|
|||
|
Prism.languages.ruby = Prism.languages.extend('clike', {
|
|||
|
comment: [
|
|||
|
/#(?!\{[^\r\n]*?\}).*/,
|
|||
|
/^=begin(?:\r?\n|\r)(?:.*(?:\r?\n|\r))*?=end/m
|
|||
|
],
|
|||
|
keyword: /\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/
|
|||
|
})
|
|||
|
|
|||
|
var interpolation = {
|
|||
|
pattern: /#\{[^}]+\}/,
|
|||
|
inside: {
|
|||
|
delimiter: {
|
|||
|
pattern: /^#\{|\}$/,
|
|||
|
alias: 'tag'
|
|||
|
},
|
|||
|
rest: Prism.util.clone(Prism.languages.ruby)
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.insertBefore('ruby', 'keyword', {
|
|||
|
regex: [
|
|||
|
{
|
|||
|
pattern: /%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
// Here we need to specifically allow interpolation
|
|||
|
pattern: /%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
variable: /[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/,
|
|||
|
symbol: /:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('ruby', 'number', {
|
|||
|
builtin: /\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Float|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/,
|
|||
|
constant: /\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.ruby.string = [
|
|||
|
{
|
|||
|
pattern: /%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
// Here we need to specifically allow interpolation
|
|||
|
pattern: /%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
}
|
|||
|
]
|
|||
|
})(Prism)
|
|||
|
|
|||
|
/*-------------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.d = Prism.languages.extend('clike', {
|
|||
|
string: [
|
|||
|
// r"", x""
|
|||
|
/\b[rx]"(\\.|[^\\"])*"[cwd]?/,
|
|||
|
// q"[]", q"()", q"<>", q"{}"
|
|||
|
/\bq"(?:\[[\s\S]*?\]|\([\s\S]*?\)|<[\s\S]*?>|\{[\s\S]*?\})"/,
|
|||
|
// q"IDENT
|
|||
|
// ...
|
|||
|
// IDENT"
|
|||
|
/\bq"([_a-zA-Z][_a-zA-Z\d]*)(?:\r?\n|\r)[\s\S]*?(?:\r?\n|\r)\1"/,
|
|||
|
// q"//", q"||", etc.
|
|||
|
/\bq"(.)[\s\S]*?\1"/,
|
|||
|
// Characters
|
|||
|
/'(?:\\'|\\?[^']+)'/,
|
|||
|
|
|||
|
/(["`])(\\.|(?!\1)[^\\])*\1[cwd]?/
|
|||
|
],
|
|||
|
|
|||
|
number: [
|
|||
|
// The lookbehind and the negative look-ahead try to prevent bad highlighting of the .. operator
|
|||
|
// Hexadecimal numbers must be handled separately to avoid problems with exponent "e"
|
|||
|
/\b0x\.?[a-f\d_]+(?:(?!\.\.)\.[a-f\d_]*)?(?:p[+-]?[a-f\d_]+)?[ulfi]*/i,
|
|||
|
{
|
|||
|
pattern: /((?:\.\.)?)(?:\b0b\.?|\b|\.)\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:e[+-]?\d[\d_]*)?[ulfi]*/i,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
|
|||
|
// In order: $, keywords and special tokens, globally defined symbols
|
|||
|
keyword: /\$|\b(?:abstract|alias|align|asm|assert|auto|body|bool|break|byte|case|cast|catch|cdouble|cent|cfloat|char|class|const|continue|creal|dchar|debug|default|delegate|delete|deprecated|do|double|else|enum|export|extern|false|final|finally|float|for|foreach|foreach_reverse|function|goto|idouble|if|ifloat|immutable|import|inout|int|interface|invariant|ireal|lazy|long|macro|mixin|module|new|nothrow|null|out|override|package|pragma|private|protected|public|pure|real|ref|return|scope|shared|short|static|struct|super|switch|synchronized|template|this|throw|true|try|typedef|typeid|typeof|ubyte|ucent|uint|ulong|union|unittest|ushort|version|void|volatile|wchar|while|with|__(?:(?:FILE|MODULE|LINE|FUNCTION|PRETTY_FUNCTION|DATE|EOF|TIME|TIMESTAMP|VENDOR|VERSION)__|gshared|traits|vector|parameters)|string|wstring|dstring|size_t|ptrdiff_t)\b/,
|
|||
|
operator: /\|[|=]?|&[&=]?|\+[+=]?|-[-=]?|\.?\.\.|=[>=]?|!(?:i[ns]\b|<>?=?|>=?|=)?|\bi[ns]\b|(?:<[<>]?|>>?>?|\^\^|[*\/%^~])=?/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.d.comment = [
|
|||
|
// Shebang
|
|||
|
/^\s*#!.+/,
|
|||
|
// /+ +/
|
|||
|
{
|
|||
|
// Allow one level of nesting
|
|||
|
pattern: /(^|[^\\])\/\+(?:\/\+[\s\S]*?\+\/|[\s\S])*?\+\//,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
].concat(Prism.languages.d.comment)
|
|||
|
|
|||
|
Prism.languages.insertBefore('d', 'comment', {
|
|||
|
'token-string': {
|
|||
|
// Allow one level of nesting
|
|||
|
pattern: /\bq\{(?:|\{[^}]*\}|[^}])*\}/,
|
|||
|
alias: 'string'
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('d', 'keyword', {
|
|||
|
property: /\B@\w*/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('d', 'function', {
|
|||
|
register: {
|
|||
|
// Iasm registers
|
|||
|
pattern: /\b(?:[ABCD][LHX]|E[ABCD]X|E?(?:BP|SP|DI|SI)|[ECSDGF]S|CR[0234]|DR[012367]|TR[3-7]|X?MM[0-7]|R[ABCD]X|[BS]PL|R[BS]P|[DS]IL|R[DS]I|R(?:[89]|1[0-5])[BWD]?|XMM(?:[89]|1[0-5])|YMM(?:1[0-5]|\d))\b|\bST(?:\([0-7]\)|\b)/,
|
|||
|
alias: 'variable'
|
|||
|
}
|
|||
|
})
|
|||
|
Prism.languages.dart = Prism.languages.extend('clike', {
|
|||
|
string: [
|
|||
|
{
|
|||
|
pattern: /r?("""|''')[\s\S]*?\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /r?("|')(\\?.)*?\1/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
keyword: [
|
|||
|
/\b(?:async|sync|yield)\*/,
|
|||
|
/\b(?:abstract|assert|async|await|break|case|catch|class|const|continue|default|deferred|do|dynamic|else|enum|export|external|extends|factory|final|finally|for|get|if|implements|import|in|library|new|null|operator|part|rethrow|return|set|static|super|switch|this|throw|try|typedef|var|void|while|with|yield)\b/
|
|||
|
],
|
|||
|
operator: /\bis!|\b(?:as|is)\b|\+\+|--|&&|\|\||<<=?|>>=?|~(?:\/=?)?|[+\-*\/%&^|=!<>]=?|\?/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('dart', 'function', {
|
|||
|
metadata: {
|
|||
|
pattern: /@\w+/,
|
|||
|
alias: 'symbol'
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.docker = {
|
|||
|
keyword: {
|
|||
|
pattern: /(^\s*)(?:ONBUILD|FROM|MAINTAINER|RUN|EXPOSE|ENV|ADD|COPY|VOLUME|USER|WORKDIR|CMD|LABEL|ENTRYPOINT)(?=\s)/im,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
string: /("|')(?:(?!\1)[^\\\r\n]|\\(?:\r\n|[\s\S]))*?\1/,
|
|||
|
comment: /#.*/,
|
|||
|
punctuation: /---|\.\.\.|[:[\]{}\-,|>?]/
|
|||
|
}
|
|||
|
Prism.languages.erlang = {
|
|||
|
comment: /%.+/,
|
|||
|
string: {
|
|||
|
pattern: /"(?:\\?.)*?"/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
'quoted-function': {
|
|||
|
pattern: /'(?:\\.|[^'\\])+'(?=\()/,
|
|||
|
alias: 'function'
|
|||
|
},
|
|||
|
'quoted-atom': {
|
|||
|
pattern: /'(?:\\.|[^'\\])+'/,
|
|||
|
alias: 'atom'
|
|||
|
},
|
|||
|
boolean: /\b(?:true|false)\b/,
|
|||
|
keyword: /\b(?:fun|when|case|of|end|if|receive|after|try|catch)\b/,
|
|||
|
number: [/\$\\?./, /\d+#[a-z0-9]+/i, /(?:\b|-)\d*\.?\d+([Ee][+-]?\d+)?\b/],
|
|||
|
function: /\b[a-z][\w@]*(?=\()/,
|
|||
|
variable: {
|
|||
|
// Look-behind is used to prevent wrong highlighting of atoms containing "@"
|
|||
|
pattern: /(^|[^@])(?:\b|\?)[A-Z_][\w@]*/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
operator: [
|
|||
|
/[=\/<>:]=|=[:\/]=|\+\+?|--?|[=*\/!]|\b(?:bnot|div|rem|band|bor|bxor|bsl|bsr|not|and|or|xor|orelse|andalso)\b/,
|
|||
|
{
|
|||
|
// We don't want to match <<
|
|||
|
pattern: /(^|[^<])<(?!<)/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
{
|
|||
|
// We don't want to match >>
|
|||
|
pattern: /(^|[^>])>(?!>)/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
atom: /\b[a-z][\w@]*/,
|
|||
|
punctuation: /[()[\]{}:;,.#|]|<<|>>/
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.git = {
|
|||
|
comment: /^#.*/m,
|
|||
|
deleted: /^[-–].*/m,
|
|||
|
inserted: /^\+.*/m,
|
|||
|
string: /("|')(\\?.)*?\1/m,
|
|||
|
command: {
|
|||
|
pattern: /^.*\$ git .*$/m,
|
|||
|
inside: {
|
|||
|
parameter: /\s(--|-)\w+/m
|
|||
|
}
|
|||
|
},
|
|||
|
coord: /^@@.*@@$/m,
|
|||
|
commit_sha1: /^commit \w{40}$/m
|
|||
|
}
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
Prism.languages.go = Prism.languages.extend('clike', {
|
|||
|
keyword: /\b(break|case|chan|const|continue|default|defer|else|fallthrough|for|func|go(to)?|if|import|interface|map|package|range|return|select|struct|switch|type|var)\b/,
|
|||
|
builtin: /\b(bool|byte|complex(64|128)|error|float(32|64)|rune|string|u?int(8|16|32|64|)|uintptr|append|cap|close|complex|copy|delete|imag|len|make|new|panic|print(ln)?|real|recover)\b/,
|
|||
|
boolean: /\b(_|iota|nil|true|false)\b/,
|
|||
|
operator: /[*\/%^!=]=?|\+[=+]?|-[=-]?|\|[=|]?|&(?:=|&|\^=?)?|>(?:>=?|=)?|<(?:<=?|=|-)?|:=|\.\.\./,
|
|||
|
number: /\b(-?(0x[a-f\d]+|(\d+\.?\d*|\.\d+)(e[-+]?\d+)?)i?)\b/i,
|
|||
|
string: {
|
|||
|
pattern: /("|'|`)(\\?.|\r|\n)*?\1/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
})
|
|||
|
delete Prism.languages.go['class-name']
|
|||
|
|
|||
|
Prism.languages.haskell = {
|
|||
|
comment: {
|
|||
|
pattern: /(^|[^-!#$%*+=?&@|~.:<>^\\\/])(--[^-!#$%*+=?&@|~.:<>^\\\/].*|{-[\s\S]*?-})/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
char: /'([^\\']|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+))'/,
|
|||
|
string: {
|
|||
|
pattern: /"([^\\"]|\\([abfnrtv\\"'&]|\^[A-Z@[\]\^_]|NUL|SOH|STX|ETX|EOT|ENQ|ACK|BEL|BS|HT|LF|VT|FF|CR|SO|SI|DLE|DC1|DC2|DC3|DC4|NAK|SYN|ETB|CAN|EM|SUB|ESC|FS|GS|RS|US|SP|DEL|\d+|o[0-7]+|x[0-9a-fA-F]+)|\\\s+\\)*"/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
keyword: /\b(case|class|data|deriving|do|else|if|in|infixl|infixr|instance|let|module|newtype|of|primitive|then|type|where)\b/,
|
|||
|
import_statement: {
|
|||
|
// The imported or hidden names are not included in this import
|
|||
|
// statement. This is because we want to highlight those exactly like
|
|||
|
// we do for the names in the program.
|
|||
|
pattern: /(\r?\n|\r|^)\s*import\s+(qualified\s+)?([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*(\s+as\s+([A-Z][_a-zA-Z0-9']*)(\.[A-Z][_a-zA-Z0-9']*)*)?(\s+hiding\b)?/m,
|
|||
|
inside: {
|
|||
|
keyword: /\b(import|qualified|as|hiding)\b/
|
|||
|
}
|
|||
|
},
|
|||
|
// These are builtin variables only. Constructors are highlighted later as a constant.
|
|||
|
builtin: /\b(abs|acos|acosh|all|and|any|appendFile|approxRational|asTypeOf|asin|asinh|atan|atan2|atanh|basicIORun|break|catch|ceiling|chr|compare|concat|concatMap|const|cos|cosh|curry|cycle|decodeFloat|denominator|digitToInt|div|divMod|drop|dropWhile|either|elem|encodeFloat|enumFrom|enumFromThen|enumFromThenTo|enumFromTo|error|even|exp|exponent|fail|filter|flip|floatDigits|floatRadix|floatRange|floor|fmap|foldl|foldl1|foldr|foldr1|fromDouble|fromEnum|fromInt|fromInteger|fromIntegral|fromRational|fst|gcd|getChar|getContents|getLine|group|head|id|inRange|index|init|intToDigit|interact|ioError|isAlpha|isAlphaNum|isAscii|isControl|isDenormalized|isDigit|isHexDigit|isIEEE|isInfinite|isLower|isNaN|isNegativeZero|isOctDigit|isPrint|isSpace|isUpper|iterate|last|lcm|length|lex|lexDigits|lexLitChar|lines|log|logBase|lookup|map|mapM|mapM_|max|maxBound|maximum|maybe|min|minBound|minimum|mod|negate|not|notElem|null|numerator|odd|or|ord|otherwise|pack|pi|pred|primExitWith|print|product|properFraction|putChar|putStr|putStrLn|quot|quotRem|range|rangeSize|read|readDec|readFile|readFloat|readHex|readIO|readInt|readList|readLitChar|readLn|readOct|readParen|readSigned|reads|readsPrec|realToFrac|recip|rem|repeat|replicate|return|reverse|round|scaleFloat|scanl|scanl1|scanr|scanr1|seq|sequence|sequence_|show|showChar|showInt|showList|showLitChar|showParen|showSigned|showString|shows|showsPrec|significand|signum|sin|sinh|snd|sort|span|splitAt|sqrt|subtract|succ|sum|tail|take|takeWhile|tan|tanh|threadToIOResult|toEnum|toInt|toInteger|toLower|toRational|toUpper|truncate|uncurry|undefined|unlines|until|unwords|unzip|unzip3|userError|words|writeFile|zip|zip3|zipWith|zipWith3)\b/,
|
|||
|
// decimal integers and floating point numbers | octal integers | hexadecimal integers
|
|||
|
number: /\b(\d+(\.\d+)?(e[+-]?\d+)?|0o[0-7]+|0x[0-9a-f]+)\b/i,
|
|||
|
// Most of this is needed because of the meaning of a single '.'.
|
|||
|
// If it stands alone freely, it is the function composition.
|
|||
|
// It may also be a separator between a module name and an identifier => no
|
|||
|
// operator. If it comes together with other special characters it is an
|
|||
|
// operator too.
|
|||
|
operator: /\s\.\s|[-!#$%*+=?&@|~.:<>^\\\/]*\.[-!#$%*+=?&@|~.:<>^\\\/]+|[-!#$%*+=?&@|~.:<>^\\\/]+\.[-!#$%*+=?&@|~.:<>^\\\/]*|[-!#$%*+=?&@|~:<>^\\\/]+|`([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*`/,
|
|||
|
// In Haskell, nearly everything is a variable, do not highlight these.
|
|||
|
hvariable: /\b([A-Z][_a-zA-Z0-9']*\.)*[_a-z][_a-zA-Z0-9']*\b/,
|
|||
|
constant: /\b([A-Z][_a-zA-Z0-9']*\.)*[A-Z][_a-zA-Z0-9']*\b/,
|
|||
|
punctuation: /[{}[\];(),.:]/
|
|||
|
}
|
|||
|
|
|||
|
/*---------------------------jade---------------------------*/
|
|||
|
;(function(Prism) {
|
|||
|
Prism.languages.jade = {
|
|||
|
comment: {
|
|||
|
pattern: /(^([\t ]*))\/\/.*((?:\r?\n|\r)\2[\t ]+.+)*/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
'multiline-script': {
|
|||
|
pattern: /(^([\t ]*)script\b.*\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
},
|
|||
|
filter: {
|
|||
|
pattern: /(^([\t ]*)):.+((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
'filter-name': {
|
|||
|
pattern: /^:[\w-]+/,
|
|||
|
alias: 'variable'
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
'multiline-plain-text': {
|
|||
|
pattern: /(^([\t ]*)[\w\-#.]+\.[\t ]*)((?:\r?\n|\r(?!\n))(?:\2[\t ]+.+|\s*?(?=\r?\n|\r)))+/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
markup: {
|
|||
|
pattern: /(^[\t ]*)<.+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.markup
|
|||
|
}
|
|||
|
},
|
|||
|
doctype: {
|
|||
|
pattern: /((?:^|\n)[\t ]*)doctype(?: .+)?/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
'flow-control': {
|
|||
|
pattern: /(^[\t ]*)(?:if|unless|else|case|when|default|each|while)\b(?: .+)?/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
each: {
|
|||
|
pattern: /^each .+? in\b/,
|
|||
|
inside: {
|
|||
|
keyword: /\b(?:each|in)\b/,
|
|||
|
punctuation: /,/
|
|||
|
}
|
|||
|
},
|
|||
|
branch: {
|
|||
|
pattern: /^(?:if|unless|else|case|when|default|while)\b/,
|
|||
|
alias: 'keyword'
|
|||
|
},
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
},
|
|||
|
keyword: {
|
|||
|
pattern: /(^[\t ]*)(?:block|extends|include|append|prepend)\b.+/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
mixin: [
|
|||
|
{
|
|||
|
pattern: /(^[\t ]*)mixin .+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
keyword: /^mixin/,
|
|||
|
function: /\w+(?=\s*\(|\s*$)/,
|
|||
|
punctuation: /[(),.]/
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /(^[\t ]*)\+.+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
name: {
|
|||
|
pattern: /^\+\w+/,
|
|||
|
alias: 'function'
|
|||
|
},
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
}
|
|||
|
],
|
|||
|
script: {
|
|||
|
pattern: /(^[\t ]*script(?:(?:&[^(]+)?\([^)]+\))*[\t ]+).+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
'plain-text': {
|
|||
|
pattern: /(^[\t ]*(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?[\t ]+).+/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
tag: {
|
|||
|
pattern: /(^[\t ]*)(?!-)[\w\-#.]*[\w\-](?:(?:&[^(]+)?\([^)]+\))*\/?:?/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
attributes: [
|
|||
|
{
|
|||
|
pattern: /&[^(]+\([^)]+\)/,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /\([^)]+\)/,
|
|||
|
inside: {
|
|||
|
'attr-value': {
|
|||
|
pattern: /(=\s*)(?:\{[^}]*\}|[^,)\r\n]+)/,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
},
|
|||
|
'attr-name': /[\w-]+(?=\s*!?=|\s*[,)])/,
|
|||
|
punctuation: /[!=(),]+/
|
|||
|
}
|
|||
|
}
|
|||
|
],
|
|||
|
punctuation: /:/
|
|||
|
}
|
|||
|
},
|
|||
|
code: [
|
|||
|
{
|
|||
|
pattern: /(^[\t ]*(?:-|!?=)).+/m,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
rest: Prism.languages.javascript
|
|||
|
}
|
|||
|
}
|
|||
|
],
|
|||
|
punctuation: /[.\-!=|]+/
|
|||
|
}
|
|||
|
|
|||
|
var filter_pattern =
|
|||
|
'(^([\\t ]*)):{{filter_name}}((?:\\r?\\n|\\r(?!\\n))(?:\\2[\\t ]+.+|\\s*?(?=\\r?\\n|\\r)))+'
|
|||
|
|
|||
|
var filters = [
|
|||
|
{ filter: 'atpl', language: 'twig' },
|
|||
|
{ filter: 'coffee', language: 'coffeescript' },
|
|||
|
'ejs',
|
|||
|
'handlebars',
|
|||
|
'hogan',
|
|||
|
'less',
|
|||
|
'livescript',
|
|||
|
'markdown',
|
|||
|
'mustache',
|
|||
|
'plates',
|
|||
|
{ filter: 'sass', language: 'scss' },
|
|||
|
'stylus',
|
|||
|
'swig'
|
|||
|
]
|
|||
|
var all_filters = {}
|
|||
|
for (var i = 0, l = filters.length; i < l; i++) {
|
|||
|
var filter = filters[i]
|
|||
|
filter =
|
|||
|
typeof filter === 'string' ? { filter: filter, language: filter } : filter
|
|||
|
if (Prism.languages[filter.language]) {
|
|||
|
all_filters['filter-' + filter.filter] = {
|
|||
|
pattern: RegExp(
|
|||
|
filter_pattern.replace('{{filter_name}}', filter.filter),
|
|||
|
'm'
|
|||
|
),
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
'filter-name': {
|
|||
|
pattern: /^:[\w-]+/,
|
|||
|
alias: 'variable'
|
|||
|
},
|
|||
|
rest: Prism.languages[filter.language]
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.insertBefore('jade', 'filter', all_filters)
|
|||
|
})(Prism)
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.java = Prism.languages.extend('clike', {
|
|||
|
keyword: /\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/,
|
|||
|
number: /\b0b[01]+\b|\b0x[\da-f]*\.?[\da-fp\-]+\b|\b\d*\.?\d+(?:e[+-]?\d+)?[df]?\b/i,
|
|||
|
operator: {
|
|||
|
pattern: /(^|[^.])(?:\+[+=]?|-[-=]?|!=?|<<?=?|>>?>?=?|==?|&[&=]?|\|[|=]?|\*=?|\/=?|%=?|\^=?|[?:~])/m,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('java', 'function', {
|
|||
|
annotation: {
|
|||
|
alias: 'punctuation',
|
|||
|
pattern: /(^|[^.])@\w+/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.json = {
|
|||
|
property: /"(?:\\.|[^\\"])*"(?=\s*:)/gi,
|
|||
|
string: /"(?!:)(?:\\.|[^\\"])*"(?!:)/g,
|
|||
|
number: /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?)\b/g,
|
|||
|
punctuation: /[{}[\]);,]/g,
|
|||
|
operator: /:/g,
|
|||
|
boolean: /\b(true|false)\b/gi,
|
|||
|
null: /\bnull\b/gi
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.jsonp = Prism.languages.json
|
|||
|
|
|||
|
/*--------------------------kotlin----------------------------*/
|
|||
|
;(function(Prism) {
|
|||
|
Prism.languages.kotlin = Prism.languages.extend('clike', {
|
|||
|
keyword: {
|
|||
|
// The lookbehind prevents wrong highlighting of e.g. kotlin.properties.get
|
|||
|
pattern: /(^|[^.])\b(?:abstract|annotation|as|break|by|catch|class|companion|const|constructor|continue|crossinline|data|do|else|enum|final|finally|for|fun|get|if|import|in|init|inline|inner|interface|internal|is|lateinit|noinline|null|object|open|out|override|package|private|protected|public|reified|return|sealed|set|super|tailrec|this|throw|to|try|val|var|when|where|while)\b/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
function: [
|
|||
|
/\w+(?=\s*\()/,
|
|||
|
{
|
|||
|
pattern: /(\.)\w+(?=\s*\{)/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
number: /\b(?:0[bx][\da-fA-F]+|\d+(?:\.\d+)?(?:e[+-]?\d+)?[fFL]?)\b/,
|
|||
|
operator: /\+[+=]?|-[-=>]?|==?=?|!(?:!|==?)?|[\/*%<>]=?|[?:]:?|\.\.|&&|\|\||\b(?:and|inv|or|shl|shr|ushr|xor)\b/
|
|||
|
})
|
|||
|
|
|||
|
delete Prism.languages.kotlin['class-name']
|
|||
|
|
|||
|
Prism.languages.insertBefore('kotlin', 'string', {
|
|||
|
'raw-string': {
|
|||
|
pattern: /(["'])\1\1[\s\S]*?\1{3}/,
|
|||
|
alias: 'string'
|
|||
|
// See interpolation below
|
|||
|
}
|
|||
|
})
|
|||
|
Prism.languages.insertBefore('kotlin', 'keyword', {
|
|||
|
annotation: {
|
|||
|
pattern: /\B@(?:\w+:)?(?:[A-Z]\w*|\[[^\]]+\])/,
|
|||
|
alias: 'builtin'
|
|||
|
}
|
|||
|
})
|
|||
|
Prism.languages.insertBefore('kotlin', 'function', {
|
|||
|
label: {
|
|||
|
pattern: /\w+@|@\w+/,
|
|||
|
alias: 'symbol'
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
var interpolation = [
|
|||
|
{
|
|||
|
pattern: /\$\{[^}]+\}/,
|
|||
|
inside: {
|
|||
|
delimiter: {
|
|||
|
pattern: /^\$\{|\}$/,
|
|||
|
alias: 'variable'
|
|||
|
},
|
|||
|
rest: Prism.util.clone(Prism.languages.kotlin)
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /\$\w+/,
|
|||
|
alias: 'variable'
|
|||
|
}
|
|||
|
]
|
|||
|
|
|||
|
Prism.languages.kotlin['string'].inside = Prism.languages.kotlin[
|
|||
|
'raw-string'
|
|||
|
].inside = {
|
|||
|
interpolation: interpolation
|
|||
|
}
|
|||
|
})(Prism)
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.less = Prism.languages.extend('css', {
|
|||
|
comment: [
|
|||
|
/\/\*[\s\S]*?\*\//,
|
|||
|
{
|
|||
|
pattern: /(^|[^\\])\/\/.*/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
atrule: {
|
|||
|
pattern: /@[\w-]+?(?:\([^{}]+\)|[^(){};])*?(?=\s*\{)/i,
|
|||
|
inside: {
|
|||
|
punctuation: /[:()]/
|
|||
|
}
|
|||
|
},
|
|||
|
// selectors and mixins are considered the same
|
|||
|
selector: {
|
|||
|
pattern: /(?:@\{[\w-]+\}|[^{};\s@])(?:@\{[\w-]+\}|\([^{}]*\)|[^{};@])*?(?=\s*\{)/,
|
|||
|
inside: {
|
|||
|
// mixin parameters
|
|||
|
variable: /@+[\w-]+/
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
property: /(?:@\{[\w-]+\}|[\w-])+(?:\+_?)?(?=\s*:)/i,
|
|||
|
punctuation: /[{}();:,]/,
|
|||
|
operator: /[+\-*\/]/
|
|||
|
})
|
|||
|
|
|||
|
// Invert function and punctuation positions
|
|||
|
Prism.languages.insertBefore('less', 'punctuation', {
|
|||
|
function: Prism.languages.less.function
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('less', 'property', {
|
|||
|
variable: [
|
|||
|
// Variable declaration (the colon must be consumed!)
|
|||
|
{
|
|||
|
pattern: /@[\w-]+\s*:/,
|
|||
|
inside: {
|
|||
|
punctuation: /:/
|
|||
|
}
|
|||
|
},
|
|||
|
|
|||
|
// Variable usage
|
|||
|
/@@?[\w-]+/
|
|||
|
],
|
|||
|
'mixin-usage': {
|
|||
|
pattern: /([{;]\s*)[.#](?!\d)[\w-]+.*?(?=[(;])/,
|
|||
|
lookbehind: true,
|
|||
|
alias: 'function'
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.lua = {
|
|||
|
comment: /^#!.+|--(?:\[(=*)\[[\s\S]*?\]\1\]|.*)/m,
|
|||
|
// \z may be used to skip the following space
|
|||
|
string: {
|
|||
|
pattern: /(["'])(?:(?!\1)[^\\\r\n]|\\z(?:\r\n|\s)|\\(?:\r\n|[\s\S]))*\1|\[(=*)\[[\s\S]*?\]\2\]/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
number: /\b0x[a-f\d]+\.?[a-f\d]*(?:p[+-]?\d+)?\b|\b\d+(?:\.\B|\.?\d*(?:e[+-]?\d+)?\b)|\B\.\d+(?:e[+-]?\d+)?\b/i,
|
|||
|
keyword: /\b(?:and|break|do|else|elseif|end|false|for|function|goto|if|in|local|nil|not|or|repeat|return|then|true|until|while)\b/,
|
|||
|
function: /(?!\d)\w+(?=\s*(?:[({]))/,
|
|||
|
operator: [
|
|||
|
/[-+*%^&|#]|\/\/?|<[<=]?|>[>=]?|[=~]=?/,
|
|||
|
{
|
|||
|
// Match ".." but don't break "..."
|
|||
|
pattern: /(^|[^.])\.\.(?!\.)/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
punctuation: /[\[\](){},;]|\.+|:+/
|
|||
|
}
|
|||
|
Prism.languages.matlab = {
|
|||
|
// We put string before comment, because of printf() patterns that contain "%"
|
|||
|
string: /\B'(?:''|[^'\n])*'/,
|
|||
|
comment: [/%\{[\s\S]*?\}%/, /%.+/],
|
|||
|
// FIXME We could handle imaginary numbers as a whole
|
|||
|
number: /\b-?(?:\d*\.?\d+(?:[eE][+-]?\d+)?(?:[ij])?|[ij])\b/,
|
|||
|
keyword: /\b(?:break|case|catch|continue|else|elseif|end|for|function|if|inf|NaN|otherwise|parfor|pause|pi|return|switch|try|while)\b/,
|
|||
|
function: /(?!\d)\w+(?=\s*\()/,
|
|||
|
operator: /\.?[*^\/\\']|[+\-:@]|[<>=~]=?|&&?|\|\|?/,
|
|||
|
punctuation: /\.{3}|[.,;\[\](){}!]/
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.nim = {
|
|||
|
comment: /#.*/,
|
|||
|
// Double-quoted strings can be prefixed by an identifier (Generalized raw string literals)
|
|||
|
// Character literals are handled specifically to prevent issues with numeric type suffixes
|
|||
|
string: {
|
|||
|
pattern: /(?:(?:\b(?!\d)(?:\w|\\x[8-9a-fA-F][0-9a-fA-F])+)?(?:"""[\s\S]*?"""(?!")|"(?:\\[\s\S]|""|[^"\\])*")|'(?:\\(?:\d+|x[\da-fA-F]{2}|.)|[^'])')/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
// The negative look ahead prevents wrong highlighting of the .. operator
|
|||
|
number: /\b(?:0[xXoObB][\da-fA-F_]+|\d[\d_]*(?:(?!\.\.)\.[\d_]*)?(?:[eE][+-]?\d[\d_]*)?)(?:'?[iuf]\d*)?/,
|
|||
|
keyword: /\b(?:addr|as|asm|atomic|bind|block|break|case|cast|concept|const|continue|converter|defer|discard|distinct|do|elif|else|end|enum|except|export|finally|for|from|func|generic|if|import|include|interface|iterator|let|macro|method|mixin|nil|object|out|proc|ptr|raise|ref|return|static|template|try|tuple|type|using|var|when|while|with|without|yield)\b/,
|
|||
|
function: {
|
|||
|
pattern: /(?:(?!\d)(?:\w|\\x[8-9a-fA-F][0-9a-fA-F])+|`[^`\r\n]+`)\*?(?:\[[^\]]+\])?(?=\s*\()/,
|
|||
|
inside: {
|
|||
|
operator: /\*$/
|
|||
|
}
|
|||
|
},
|
|||
|
// We don't want to highlight operators inside backticks
|
|||
|
ignore: {
|
|||
|
pattern: /`[^`\r\n]+`/,
|
|||
|
inside: {
|
|||
|
punctuation: /`/
|
|||
|
}
|
|||
|
},
|
|||
|
operator: {
|
|||
|
// Look behind and look ahead prevent wrong highlighting of punctuations [. .] {. .} (. .)
|
|||
|
// but allow the slice operator .. to take precedence over them
|
|||
|
// One can define his own operators in Nim so all combination of operators might be an operator.
|
|||
|
pattern: /(^|[({\[](?=\.\.)|(?![({\[]\.).)(?:(?:[=+\-*\/<>@$~&%|!?^:\\]|\.\.|\.(?![)}\]]))+|\b(?:and|div|of|or|in|is|isnot|mod|not|notin|shl|shr|xor)\b)/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
punctuation: /[({\[]\.|\.[)}\]]|[`(){}\[\],:]/
|
|||
|
}
|
|||
|
Prism.languages.objectivec = Prism.languages.extend('c', {
|
|||
|
keyword: /\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while|in|self|super)\b|(@interface|@end|@implementation|@protocol|@class|@public|@protected|@private|@property|@try|@catch|@finally|@throw|@synthesize|@dynamic|@selector)\b/,
|
|||
|
string: /("|')(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1|@"(\\(?:\r\n|[\s\S])|[^"\\\r\n])*"/,
|
|||
|
operator: /-[->]?|\+\+?|!=?|<<?=?|>>?=?|==?|&&?|\|\|?|[~^%?*\/@]/
|
|||
|
})
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.perl = {
|
|||
|
comment: [
|
|||
|
{
|
|||
|
// POD
|
|||
|
pattern: /(^\s*)=\w+[\s\S]*?=cut.*/m,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /(^|[^\\$])#.*/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
// TODO Could be nice to handle Heredoc too.
|
|||
|
string: [
|
|||
|
// q/.../
|
|||
|
{
|
|||
|
pattern: /\b(?:q|qq|qx|qw)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// q a...a
|
|||
|
{
|
|||
|
pattern: /\b(?:q|qq|qx|qw)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// q(...)
|
|||
|
{
|
|||
|
pattern: /\b(?:q|qq|qx|qw)\s*\((?:[^()\\]|\\[\s\S])*\)/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// q{...}
|
|||
|
{
|
|||
|
pattern: /\b(?:q|qq|qx|qw)\s*\{(?:[^{}\\]|\\[\s\S])*\}/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// q[...]
|
|||
|
{
|
|||
|
pattern: /\b(?:q|qq|qx|qw)\s*\[(?:[^[\]\\]|\\[\s\S])*\]/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// q<...>
|
|||
|
{
|
|||
|
pattern: /\b(?:q|qq|qx|qw)\s*<(?:[^<>\\]|\\[\s\S])*>/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// "...", `...`
|
|||
|
{
|
|||
|
pattern: /("|`)(?:[^\\]|\\[\s\S])*?\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// '...'
|
|||
|
// FIXME Multi-line single-quoted strings are not supported as they would break variables containing '
|
|||
|
{
|
|||
|
pattern: /'(?:[^'\\\r\n]|\\.)*'/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
regex: [
|
|||
|
// m/.../
|
|||
|
{
|
|||
|
pattern: /\b(?:m|qr)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[msixpodualngc]*/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// m a...a
|
|||
|
{
|
|||
|
pattern: /\b(?:m|qr)\s+([a-zA-Z0-9])(?:[^\\]|\\.)*?\1[msixpodualngc]*/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// m(...)
|
|||
|
{
|
|||
|
pattern: /\b(?:m|qr)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngc]*/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// m{...}
|
|||
|
{
|
|||
|
pattern: /\b(?:m|qr)\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngc]*/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// m[...]
|
|||
|
{
|
|||
|
pattern: /\b(?:m|qr)\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngc]*/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// m<...>
|
|||
|
{
|
|||
|
pattern: /\b(?:m|qr)\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngc]*/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// The lookbehinds prevent -s from breaking
|
|||
|
// FIXME We don't handle change of separator like s(...)[...]
|
|||
|
// s/.../.../
|
|||
|
{
|
|||
|
pattern: /(^|[^-]\b)(?:s|tr|y)\s*([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// s a...a...a
|
|||
|
{
|
|||
|
pattern: /(^|[^-]\b)(?:s|tr|y)\s+([a-zA-Z0-9])(?:[^\\]|\\[\s\S])*?\2(?:[^\\]|\\[\s\S])*?\2[msixpodualngcer]*/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// s(...)(...)
|
|||
|
{
|
|||
|
pattern: /(^|[^-]\b)(?:s|tr|y)\s*\((?:[^()\\]|\\[\s\S])*\)\s*\((?:[^()\\]|\\[\s\S])*\)[msixpodualngcer]*/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// s{...}{...}
|
|||
|
{
|
|||
|
pattern: /(^|[^-]\b)(?:s|tr|y)\s*\{(?:[^{}\\]|\\[\s\S])*\}\s*\{(?:[^{}\\]|\\[\s\S])*\}[msixpodualngcer]*/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// s[...][...]
|
|||
|
{
|
|||
|
pattern: /(^|[^-]\b)(?:s|tr|y)\s*\[(?:[^[\]\\]|\\[\s\S])*\]\s*\[(?:[^[\]\\]|\\[\s\S])*\][msixpodualngcer]*/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// s<...><...>
|
|||
|
{
|
|||
|
pattern: /(^|[^-]\b)(?:s|tr|y)\s*<(?:[^<>\\]|\\[\s\S])*>\s*<(?:[^<>\\]|\\[\s\S])*>[msixpodualngcer]*/,
|
|||
|
lookbehind: true,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
|
|||
|
// /.../
|
|||
|
// The look-ahead tries to prevent two divisions on
|
|||
|
// the same line from being highlighted as regex.
|
|||
|
// This does not support multi-line regex.
|
|||
|
{
|
|||
|
pattern: /\/(?:[^\/\\\r\n]|\\.)*\/[msixpodualngc]*(?=\s*(?:$|[\r\n,.;})&|\-+*~<>!?^]|(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor|x)\b))/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
|
|||
|
// FIXME Not sure about the handling of ::, ', and #
|
|||
|
variable: [
|
|||
|
// ${^POSTMATCH}
|
|||
|
/[&*$@%]\{\^[A-Z]+\}/,
|
|||
|
// $^V
|
|||
|
/[&*$@%]\^[A-Z_]/,
|
|||
|
// ${...}
|
|||
|
/[&*$@%]#?(?=\{)/,
|
|||
|
// $foo
|
|||
|
/[&*$@%]#?((::)*'?(?!\d)[\w$]+)+(::)*/i,
|
|||
|
// $1
|
|||
|
/[&*$@%]\d+/,
|
|||
|
// $_, @_, %!
|
|||
|
// The negative lookahead prevents from breaking the %= operator
|
|||
|
/(?!%=)[$@%][!"#$%&'()*+,\-.\/:;<=>?@[\\\]^_`{|}~]/
|
|||
|
],
|
|||
|
filehandle: {
|
|||
|
// <>, <FOO>, _
|
|||
|
pattern: /<(?![<=])\S*>|\b_\b/,
|
|||
|
alias: 'symbol'
|
|||
|
},
|
|||
|
vstring: {
|
|||
|
// v1.2, 1.2.3
|
|||
|
pattern: /v\d+(\.\d+)*|\d+(\.\d+){2,}/,
|
|||
|
alias: 'string'
|
|||
|
},
|
|||
|
function: {
|
|||
|
pattern: /sub [a-z0-9_]+/i,
|
|||
|
inside: {
|
|||
|
keyword: /sub/
|
|||
|
}
|
|||
|
},
|
|||
|
keyword: /\b(any|break|continue|default|delete|die|do|else|elsif|eval|for|foreach|given|goto|if|last|local|my|next|our|package|print|redo|require|say|state|sub|switch|undef|unless|until|use|when|while)\b/,
|
|||
|
number: /\b-?(0x[\dA-Fa-f](_?[\dA-Fa-f])*|0b[01](_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)\b/,
|
|||
|
operator: /-[rwxoRWXOezsfdlpSbctugkTBMAC]\b|\+[+=]?|-[-=>]?|\*\*?=?|\/\/?=?|=[=~>]?|~[~=]?|\|\|?=?|&&?=?|<(?:=>?|<=?)?|>>?=?|![~=]?|[%^]=?|\.(?:=|\.\.?)?|[\\?]|\bx(?:=|\b)|\b(lt|gt|le|ge|eq|ne|cmp|not|and|or|xor)\b/,
|
|||
|
punctuation: /[{}[\];(),:]/
|
|||
|
}
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.php = Prism.languages.extend('clike', {
|
|||
|
keyword: /\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i,
|
|||
|
constant: /\b[A-Z0-9_]{2,}\b/,
|
|||
|
comment: {
|
|||
|
pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Shell-like comments are matched after strings, because they are less
|
|||
|
// common than strings containing hashes...
|
|||
|
Prism.languages.insertBefore('php', 'class-name', {
|
|||
|
'shell-comment': {
|
|||
|
pattern: /(^|[^\\])#.*/,
|
|||
|
lookbehind: true,
|
|||
|
alias: 'comment'
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('php', 'keyword', {
|
|||
|
delimiter: {
|
|||
|
pattern: /\?>|<\?(?:php|=)?/i,
|
|||
|
alias: 'important'
|
|||
|
},
|
|||
|
variable: /\$\w+\b/i,
|
|||
|
package: {
|
|||
|
pattern: /(\\|namespace\s+|use\s+)[\w\\]+/,
|
|||
|
lookbehind: true,
|
|||
|
inside: {
|
|||
|
punctuation: /\\/
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Must be defined after the function pattern
|
|||
|
Prism.languages.insertBefore('php', 'operator', {
|
|||
|
property: {
|
|||
|
pattern: /(->)[\w]+/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Add HTML support if the markup language exists
|
|||
|
if (Prism.languages.markup) {
|
|||
|
// Tokenize all inline PHP blocks that are wrapped in <?php ?>
|
|||
|
// This allows for easy PHP + markup highlighting
|
|||
|
Prism.hooks.add('before-highlight', function(env) {
|
|||
|
if (env.language !== 'php' || !/(?:<\?php|<\?)/gi.test(env.code)) {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
env.tokenStack = []
|
|||
|
|
|||
|
env.backupCode = env.code
|
|||
|
env.code = env.code.replace(/(?:<\?php|<\?)[\s\S]*?(?:\?>|$)/gi, function(
|
|||
|
match
|
|||
|
) {
|
|||
|
var i = env.tokenStack.length
|
|||
|
// Check for existing strings
|
|||
|
while (env.backupCode.indexOf('___PHP' + i + '___') !== -1) ++i
|
|||
|
|
|||
|
// Create a sparse array
|
|||
|
env.tokenStack[i] = match
|
|||
|
|
|||
|
return '___PHP' + i + '___'
|
|||
|
})
|
|||
|
|
|||
|
// Switch the grammar to markup
|
|||
|
env.grammar = Prism.languages.markup
|
|||
|
})
|
|||
|
|
|||
|
// Restore env.code for other plugins (e.g. line-numbers)
|
|||
|
Prism.hooks.add('before-insert', function(env) {
|
|||
|
if (env.language === 'php' && env.backupCode) {
|
|||
|
env.code = env.backupCode
|
|||
|
delete env.backupCode
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Re-insert the tokens after highlighting
|
|||
|
Prism.hooks.add('after-highlight', function(env) {
|
|||
|
if (env.language !== 'php' || !env.tokenStack) {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// Switch the grammar back
|
|||
|
env.grammar = Prism.languages.php
|
|||
|
|
|||
|
for (var i = 0, keys = Object.keys(env.tokenStack); i < keys.length; ++i) {
|
|||
|
var k = keys[i]
|
|||
|
var t = env.tokenStack[k]
|
|||
|
|
|||
|
// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns
|
|||
|
env.highlightedCode = env.highlightedCode.replace(
|
|||
|
'___PHP' + k + '___',
|
|||
|
'<span class="token php language-php">' +
|
|||
|
Prism.highlight(t, env.grammar, 'php').replace(/\$/g, '$$$$') +
|
|||
|
'</span>'
|
|||
|
)
|
|||
|
}
|
|||
|
|
|||
|
env.element.innerHTML = env.highlightedCode
|
|||
|
})
|
|||
|
}
|
|||
|
|
|||
|
/*------------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.powershell = {
|
|||
|
comment: [
|
|||
|
{
|
|||
|
pattern: /(^|[^`])<#[\s\S]*?#>/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /(^|[^`])#.*/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
string: [
|
|||
|
{
|
|||
|
pattern: /"(`?[\s\S])*?"/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
function: {
|
|||
|
pattern: /[^`]\$\(.*?\)/,
|
|||
|
// Populated at end of file
|
|||
|
inside: {}
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /'([^']|'')*'/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
// Matches name spaces as well as casts, attribute decorators. Force starting with letter to avoid matching array indices
|
|||
|
namespace: /\[[a-z][\s\S]*?\]/i,
|
|||
|
boolean: /\$(true|false)\b/i,
|
|||
|
variable: /\$\w+\b/i,
|
|||
|
// Cmdlets and aliases. Aliases should come last, otherwise "write" gets preferred over "write-host" for example
|
|||
|
// Get-Command | ?{ $_.ModuleName -match "Microsoft.PowerShell.(Util|Core|Management)" }
|
|||
|
// Get-Alias | ?{ $_.ReferencedCommand.Module.Name -match "Microsoft.PowerShell.(Util|Core|Management)" }
|
|||
|
function: [
|
|||
|
/\b(Add-(Computer|Content|History|Member|PSSnapin|Type)|Checkpoint-Computer|Clear-(Content|EventLog|History|Item|ItemProperty|Variable)|Compare-Object|Complete-Transaction|Connect-PSSession|ConvertFrom-(Csv|Json|StringData)|Convert-Path|ConvertTo-(Csv|Html|Json|Xml)|Copy-(Item|ItemProperty)|Debug-Process|Disable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Disconnect-PSSession|Enable-(ComputerRestore|PSBreakpoint|PSRemoting|PSSessionConfiguration)|Enter-PSSession|Exit-PSSession|Export-(Alias|Clixml|Console|Csv|FormatData|ModuleMember|PSSession)|ForEach-Object|Format-(Custom|List|Table|Wide)|Get-(Alias|ChildItem|Command|ComputerRestorePoint|Content|ControlPanelItem|Culture|Date|Event|EventLog|EventSubscriber|FormatData|Help|History|Host|HotFix|Item|ItemProperty|Job|Location|Member|Module|Process|PSBreakpoint|PSCallStack|PSDrive|PSProvider|PSSession|PSSessionConfiguration|PSSnapin|Random|Service|TraceSource|Transaction|TypeData|UICulture|Unique|Variable|WmiObject)|Group-Object|Import-(Alias|Clixml|Csv|LocalizedData|Module|PSSession)|Invoke-(Command|Expression|History|Item|RestMethod|WebRequest|WmiMethod)|Join-Path|Limit-EventLog|Measure-(Command|Object)|Move-(Item|ItemProperty)|New-(Alias|Event|EventLog|Item|ItemProperty|Module|ModuleManifest|Object|PSDrive|PSSession|PSSessionConfigurationFile|PSSessionOption|PSTransportOption|Service|TimeSpan|Variable|WebServiceProxy)|Out-(Default|File|GridView|Host|Null|Printer|String)|Pop-Location|Push-Location|Read-Host|Receive-(Job|PSSession)|Register-(EngineEvent|ObjectEvent|PSSessionConfiguration|WmiEvent)|Remove-(Computer|Event|EventLog|Item|ItemProperty|Job|Module|PSBreakpoint|PSDrive|PSSession|PSSnapin|TypeData|Variable|WmiObject)|Rename-(Computer|Item|ItemProperty)|Reset-ComputerMachinePassword|Resolve-Path|Restart-(Computer|Service)|Restore-Computer|Resume-(Job|Service)|Save-Help|Select-(Object|String|Xml)|Send-MailMessage|Set-(Alias|Content|Date|Item|ItemProperty|Location|PSBreakpoint|PSDebug|PSSessionConfiguration|Service|StrictMode|TraceSource|Variable|WmiInstance)|Show-(Command|ControlPanelItem|EventLog)|Sort-Object|Split-Path|Start-(Job|Process|Service|Sleep|Transaction)|Stop-(Computer|Job|Process|Service)|Suspend-(Job|Service)|Tee-Object|Test-(ComputerSecureChannel|Connection|ModuleManifest|Path|PSSessionConfigurationFile)|Trace-Command|Unblock-File|Undo-Transaction|Unregister-(Event|PSSessionConfiguration)|Update-(FormatData|Help|List|TypeData)|Use-Transaction|Wait-(Event|Job|Process)|Where-Object|Write-(Debug|Error|EventLog|Host|Output|Progress|Verbose|Warning))\b/i,
|
|||
|
/\b(ac|cat|chdir|clc|cli|clp|clv|compare|copy|cp|cpi|cpp|cvpa|dbp|del|diff|dir|ebp|echo|epal|epcsv|epsn|erase|fc|fl|ft|fw|gal|gbp|gc|gci|gcs|gdr|gi|gl|gm|gp|gps|group|gsv|gu|gv|gwmi|iex|ii|ipal|ipcsv|ipsn|irm|iwmi|iwr|kill|lp|ls|measure|mi|mount|move|mp|mv|nal|ndr|ni|nv|ogv|popd|ps|pushd|pwd|rbp|rd|rdr|ren|ri|rm|rmdir|rni|rnp|rp|rv|rvpa|rwmi|sal|saps|sasv|sbp|sc|select|set|shcm|si|sl|sleep|sls|sort|sp|spps|spsv|start|sv|swmi|tee|trcm|type|write)\b/i
|
|||
|
],
|
|||
|
// per http://technet.microsoft.com/en-us/library/hh847744.aspx
|
|||
|
keyword: /\b(Begin|Break|Catch|Class|Continue|Data|Define|Do|DynamicParam|Else|ElseIf|End|Exit|Filter|Finally|For|ForEach|From|Function|If|InlineScript|Parallel|Param|Process|Return|Sequence|Switch|Throw|Trap|Try|Until|Using|Var|While|Workflow)\b/i,
|
|||
|
operator: {
|
|||
|
pattern: /(\W?)(!|-(eq|ne|gt|ge|lt|le|sh[lr]|not|b?(and|x?or)|(Not)?(Like|Match|Contains|In)|Replace|Join|is(Not)?|as)\b|-[-=]?|\+[+=]?|[*\/%]=?)/i,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
punctuation: /[|{}[\];(),.]/
|
|||
|
}
|
|||
|
|
|||
|
// Variable interpolation inside strings, and nested expressions
|
|||
|
Prism.languages.powershell.string[0].inside.boolean =
|
|||
|
Prism.languages.powershell.boolean
|
|||
|
Prism.languages.powershell.string[0].inside.variable =
|
|||
|
Prism.languages.powershell.variable
|
|||
|
Prism.languages.powershell.string[0].inside.function.inside = Prism.util.clone(
|
|||
|
Prism.languages.powershell
|
|||
|
)
|
|||
|
|
|||
|
/*------------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.python = {
|
|||
|
'triple-quoted-string': {
|
|||
|
pattern: /"""[\s\S]+?"""|'''[\s\S]+?'''/,
|
|||
|
alias: 'string'
|
|||
|
},
|
|||
|
comment: {
|
|||
|
pattern: /(^|[^\\])#.*/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
string: {
|
|||
|
pattern: /("|')(?:\\\\|\\?[^\\\r\n])*?\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
function: {
|
|||
|
pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
'class-name': {
|
|||
|
pattern: /(\bclass\s+)[a-z0-9_]+/i,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
keyword: /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/,
|
|||
|
boolean: /\b(?:True|False)\b/,
|
|||
|
number: /\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i,
|
|||
|
operator: /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/,
|
|||
|
punctuation: /[{}[\];(),.:]/
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.r = {
|
|||
|
comment: /#.*/,
|
|||
|
string: {
|
|||
|
pattern: /(['"])(?:\\?.)*?\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
'percent-operator': {
|
|||
|
// Includes user-defined operators
|
|||
|
// and %%, %*%, %/%, %in%, %o%, %x%
|
|||
|
pattern: /%[^%\s]*%/,
|
|||
|
alias: 'operator'
|
|||
|
},
|
|||
|
boolean: /\b(?:TRUE|FALSE)\b/,
|
|||
|
ellipsis: /\.\.(?:\.|\d+)/,
|
|||
|
number: [
|
|||
|
/\b(?:NaN|Inf)\b/,
|
|||
|
/\b(?:0x[\dA-Fa-f]+(?:\.\d*)?|\d*\.?\d+)(?:[EePp][+-]?\d+)?[iL]?\b/
|
|||
|
],
|
|||
|
keyword: /\b(?:if|else|repeat|while|function|for|in|next|break|NULL|NA|NA_integer_|NA_real_|NA_complex_|NA_character_)\b/,
|
|||
|
operator: /->?>?|<(?:=|<?-)?|[>=!]=?|::?|&&?|\|\|?|[+*\/^$@~]/,
|
|||
|
punctuation: /[(){}\[\],;]/
|
|||
|
}
|
|||
|
|
|||
|
/*------------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.rust = {
|
|||
|
comment: [
|
|||
|
{
|
|||
|
pattern: /(^|[^\\])\/\*[\s\S]*?\*\//,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /(^|[^\\:])\/\/.*/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
string: [
|
|||
|
{
|
|||
|
pattern: /b?r(#*)"(?:\\?.)*?"\1/,
|
|||
|
greedy: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /b?("|')(?:\\?.)*?\1/,
|
|||
|
greedy: true
|
|||
|
}
|
|||
|
],
|
|||
|
keyword: /\b(?:abstract|alignof|as|be|box|break|const|continue|crate|do|else|enum|extern|false|final|fn|for|if|impl|in|let|loop|match|mod|move|mut|offsetof|once|override|priv|pub|pure|ref|return|sizeof|static|self|struct|super|true|trait|type|typeof|unsafe|unsized|use|virtual|where|while|yield)\b/,
|
|||
|
|
|||
|
attribute: {
|
|||
|
pattern: /#!?\[.+?\]/,
|
|||
|
greedy: true,
|
|||
|
alias: 'attr-name'
|
|||
|
},
|
|||
|
|
|||
|
function: [
|
|||
|
/[a-z0-9_]+(?=\s*\()/i,
|
|||
|
// Macros can use parens or brackets
|
|||
|
/[a-z0-9_]+!(?=\s*\(|\[)/i
|
|||
|
],
|
|||
|
'macro-rules': {
|
|||
|
pattern: /[a-z0-9_]+!/i,
|
|||
|
alias: 'function'
|
|||
|
},
|
|||
|
|
|||
|
// Hex, oct, bin, dec numbers with visual separators and type suffix
|
|||
|
number: /\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/,
|
|||
|
|
|||
|
// Closure params should not be confused with bitwise OR |
|
|||
|
'closure-params': {
|
|||
|
pattern: /\|[^|]*\|(?=\s*[{-])/,
|
|||
|
inside: {
|
|||
|
punctuation: /[\|:,]/,
|
|||
|
operator: /[&*]/
|
|||
|
}
|
|||
|
},
|
|||
|
punctuation: /[{}[\];(),:]|\.+|->/,
|
|||
|
operator: /[-+*\/%!^=]=?|@|&[&=]?|\|[|=]?|<<?=?|>>?=?/
|
|||
|
}
|
|||
|
|
|||
|
/*------------------------------------------------------------*/
|
|||
|
;(function(Prism) {
|
|||
|
Prism.languages.sass = Prism.languages.extend('css', {
|
|||
|
// Sass comments don't need to be closed, only indented
|
|||
|
comment: {
|
|||
|
pattern: /^([ \t]*)\/[\/*].*(?:(?:\r?\n|\r)\1[ \t]+.+)*/m,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('sass', 'atrule', {
|
|||
|
// We want to consume the whole line
|
|||
|
'atrule-line': {
|
|||
|
// Includes support for = and + shortcuts
|
|||
|
pattern: /^(?:[ \t]*)[@+=].+/m,
|
|||
|
inside: {
|
|||
|
atrule: /(?:@[\w-]+|[+=])/m
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
delete Prism.languages.sass.atrule
|
|||
|
|
|||
|
var variable = /((\$[-_\w]+)|(#\{\$[-_\w]+\}))/i
|
|||
|
var operator = [
|
|||
|
/[+*\/%]|[=!]=|<=?|>=?|\b(?:and|or|not)\b/,
|
|||
|
{
|
|||
|
pattern: /(\s+)-(?=\s)/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
]
|
|||
|
|
|||
|
Prism.languages.insertBefore('sass', 'property', {
|
|||
|
// We want to consume the whole line
|
|||
|
'variable-line': {
|
|||
|
pattern: /^[ \t]*\$.+/m,
|
|||
|
inside: {
|
|||
|
punctuation: /:/,
|
|||
|
variable: variable,
|
|||
|
operator: operator
|
|||
|
}
|
|||
|
},
|
|||
|
// We want to consume the whole line
|
|||
|
'property-line': {
|
|||
|
pattern: /^[ \t]*(?:[^:\s]+ *:.*|:[^:\s]+.*)/m,
|
|||
|
inside: {
|
|||
|
property: [
|
|||
|
/[^:\s]+(?=\s*:)/,
|
|||
|
{
|
|||
|
pattern: /(:)[^:\s]+/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
punctuation: /:/,
|
|||
|
variable: variable,
|
|||
|
operator: operator,
|
|||
|
important: Prism.languages.sass.important
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
delete Prism.languages.sass.property
|
|||
|
delete Prism.languages.sass.important
|
|||
|
|
|||
|
// Now that whole lines for other patterns are consumed,
|
|||
|
// what's left should be selectors
|
|||
|
delete Prism.languages.sass.selector
|
|||
|
Prism.languages.insertBefore('sass', 'punctuation', {
|
|||
|
selector: {
|
|||
|
pattern: /([ \t]*)\S(?:,?[^,\r\n]+)*(?:,(?:\r?\n|\r)\1[ \t]+\S(?:,?[^,\r\n]+)*)*/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
})(Prism)
|
|||
|
Prism.languages.scss = Prism.languages.extend('css', {
|
|||
|
comment: {
|
|||
|
pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|\/\/.*)/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
atrule: {
|
|||
|
pattern: /@[\w-]+(?:\([^()]+\)|[^(])*?(?=\s+[{;])/,
|
|||
|
inside: {
|
|||
|
rule: /@[\w-]+/
|
|||
|
// See rest below
|
|||
|
}
|
|||
|
},
|
|||
|
// url, compassified
|
|||
|
url: /(?:[-a-z]+-)*url(?=\()/i,
|
|||
|
// CSS selector regex is not appropriate for Sass
|
|||
|
// since there can be lot more things (var, @ directive, nesting..)
|
|||
|
// a selector must start at the end of a property or after a brace (end of other rules or nesting)
|
|||
|
// it can contain some characters that aren't used for defining rules or end of selector, & (parent selector), or interpolated variable
|
|||
|
// the end of a selector is found when there is no rules in it ( {} or {\s}) or if there is a property (because an interpolated var
|
|||
|
// can "pass" as a selector- e.g: proper#{$erty})
|
|||
|
// this one was hard to do, so please be careful if you edit this one :)
|
|||
|
selector: {
|
|||
|
// Initial look-ahead is used to prevent matching of blank selectors
|
|||
|
pattern: /(?=\S)[^@;\{\}\(\)]?([^@;\{\}\(\)]|&|#\{\$[-_\w]+\})+(?=\s*\{(\}|\s|[^\}]+(:|\{)[^\}]+))/m,
|
|||
|
inside: {
|
|||
|
parent: {
|
|||
|
pattern: /&/,
|
|||
|
alias: 'important'
|
|||
|
},
|
|||
|
placeholder: /%[-_\w]+/,
|
|||
|
variable: /\$[-_\w]+|#\{\$[-_\w]+\}/
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('scss', 'atrule', {
|
|||
|
keyword: [
|
|||
|
/@(?:if|else(?: if)?|for|each|while|import|extend|debug|warn|mixin|include|function|return|content)/i,
|
|||
|
{
|
|||
|
pattern: /( +)(?:from|through)(?= )/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
]
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.scss.property = {
|
|||
|
pattern: /(?:[\w-]|\$[-_\w]+|#\{\$[-_\w]+\})+(?=\s*:)/i,
|
|||
|
inside: {
|
|||
|
variable: /\$[-_\w]+|#\{\$[-_\w]+\}/
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
Prism.languages.insertBefore('scss', 'important', {
|
|||
|
// var and interpolated vars
|
|||
|
variable: /\$[-_\w]+|#\{\$[-_\w]+\}/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.insertBefore('scss', 'function', {
|
|||
|
placeholder: {
|
|||
|
pattern: /%[-_\w]+/,
|
|||
|
alias: 'selector'
|
|||
|
},
|
|||
|
statement: {
|
|||
|
pattern: /\B!(?:default|optional)\b/i,
|
|||
|
alias: 'keyword'
|
|||
|
},
|
|||
|
boolean: /\b(?:true|false)\b/,
|
|||
|
null: /\bnull\b/,
|
|||
|
operator: {
|
|||
|
pattern: /(\s)(?:[-+*\/%]|[=!]=|<=?|>=?|and|or|not)(?=\s)/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.scss['atrule'].inside.rest = Prism.util.clone(
|
|||
|
Prism.languages.scss
|
|||
|
)
|
|||
|
|
|||
|
/*-----------------------------smarty-------------------------*/
|
|||
|
;(function(Prism) {
|
|||
|
var smarty_pattern = /\{\*[\s\S]+?\*\}|\{[\s\S]+?\}/g
|
|||
|
var smarty_litteral_start = '{literal}'
|
|||
|
var smarty_litteral_end = '{/literal}'
|
|||
|
var smarty_litteral_mode = false
|
|||
|
|
|||
|
Prism.languages.smarty = Prism.languages.extend('markup', {
|
|||
|
smarty: {
|
|||
|
pattern: smarty_pattern,
|
|||
|
inside: {
|
|||
|
delimiter: {
|
|||
|
pattern: /^\{|\}$/i,
|
|||
|
alias: 'punctuation'
|
|||
|
},
|
|||
|
string: /(["'])(?:\\?.)*?\1/,
|
|||
|
number: /\b-?(?:0x[\dA-Fa-f]+|\d*\.?\d+(?:[Ee][-+]?\d+)?)\b/,
|
|||
|
variable: [
|
|||
|
/\$(?!\d)\w+/,
|
|||
|
/#(?!\d)\w+#/,
|
|||
|
{
|
|||
|
pattern: /(\.|->)(?!\d)\w+/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
{
|
|||
|
pattern: /(\[)(?!\d)\w+(?=\])/,
|
|||
|
lookbehind: true
|
|||
|
}
|
|||
|
],
|
|||
|
function: [
|
|||
|
{
|
|||
|
pattern: /(\|\s*)@?(?!\d)\w+/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
/^\/?(?!\d)\w+/,
|
|||
|
/(?!\d)\w+(?=\()/
|
|||
|
],
|
|||
|
'attr-name': {
|
|||
|
// Value is made optional because it may have already been tokenized
|
|||
|
pattern: /\w+\s*=\s*(?:(?!\d)\w+)?/,
|
|||
|
inside: {
|
|||
|
variable: {
|
|||
|
pattern: /(=\s*)(?!\d)\w+/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
operator: /=/
|
|||
|
}
|
|||
|
},
|
|||
|
punctuation: [/[\[\]().,:`]|\->/],
|
|||
|
operator: [
|
|||
|
/[+\-*\/%]|==?=?|[!<>]=?|&&|\|\|?/,
|
|||
|
/\bis\s+(?:not\s+)?(?:div|even|odd)(?:\s+by)?\b/,
|
|||
|
/\b(?:eq|neq?|gt|lt|gt?e|lt?e|not|mod|or|and)\b/
|
|||
|
],
|
|||
|
keyword: /\b(?:false|off|on|no|true|yes)\b/
|
|||
|
}
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Comments are inserted at top so that they can
|
|||
|
// surround markup
|
|||
|
Prism.languages.insertBefore('smarty', 'tag', {
|
|||
|
'smarty-comment': {
|
|||
|
pattern: /\{\*[\s\S]*?\*\}/,
|
|||
|
alias: ['smarty', 'comment']
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Tokenize all inline Smarty expressions
|
|||
|
Prism.hooks.add('before-highlight', function(env) {
|
|||
|
if (env.language !== 'smarty') {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
env.tokenStack = []
|
|||
|
|
|||
|
env.backupCode = env.code
|
|||
|
env.code = env.code.replace(smarty_pattern, function(match) {
|
|||
|
// Smarty tags inside {literal} block are ignored
|
|||
|
if (match === smarty_litteral_end) {
|
|||
|
smarty_litteral_mode = false
|
|||
|
}
|
|||
|
|
|||
|
if (!smarty_litteral_mode) {
|
|||
|
if (match === smarty_litteral_start) {
|
|||
|
smarty_litteral_mode = true
|
|||
|
}
|
|||
|
|
|||
|
var i = env.tokenStack.length
|
|||
|
// Check for existing strings
|
|||
|
while (env.backupCode.indexOf('___SMARTY' + i + '___') !== -1) ++i
|
|||
|
|
|||
|
// Create a sparse array
|
|||
|
env.tokenStack[i] = match
|
|||
|
|
|||
|
return '___SMARTY' + i + '___'
|
|||
|
}
|
|||
|
return match
|
|||
|
})
|
|||
|
})
|
|||
|
|
|||
|
// Restore env.code for other plugins (e.g. line-numbers)
|
|||
|
Prism.hooks.add('before-insert', function(env) {
|
|||
|
if (env.language === 'smarty') {
|
|||
|
env.code = env.backupCode
|
|||
|
delete env.backupCode
|
|||
|
}
|
|||
|
})
|
|||
|
|
|||
|
// Re-insert the tokens after highlighting
|
|||
|
// and highlight them with defined grammar
|
|||
|
Prism.hooks.add('after-highlight', function(env) {
|
|||
|
if (env.language !== 'smarty') {
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
for (var i = 0, keys = Object.keys(env.tokenStack); i < keys.length; ++i) {
|
|||
|
var k = keys[i]
|
|||
|
var t = env.tokenStack[k]
|
|||
|
|
|||
|
// The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns
|
|||
|
env.highlightedCode = env.highlightedCode.replace(
|
|||
|
'___SMARTY' + k + '___',
|
|||
|
Prism.highlight(t, env.grammar, 'smarty').replace(/\$/g, '$$$$')
|
|||
|
)
|
|||
|
}
|
|||
|
|
|||
|
env.element.innerHTML = env.highlightedCode
|
|||
|
})
|
|||
|
})(Prism)
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.sql = {
|
|||
|
comment: {
|
|||
|
pattern: /(^|[^\\])(?:\/\*[\s\S]*?\*\/|(?:--|\/\/|#).*)/,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
string: {
|
|||
|
pattern: /(^|[^@\\])("|')(?:\\?[\s\S])*?\2/,
|
|||
|
greedy: true,
|
|||
|
lookbehind: true
|
|||
|
},
|
|||
|
variable: /@[\w.$]+|@("|'|`)(?:\\?[\s\S])+?\1/,
|
|||
|
function: /\b(?:COUNT|SUM|AVG|MIN|MAX|FIRST|LAST|UCASE|LCASE|MID|LEN|ROUND|NOW|FORMAT)(?=\s*\()/i, // Should we highlight user defined functions too?
|
|||
|
keyword: /\b(?:ACTION|ADD|AFTER|ALGORITHM|ALL|ALTER|ANALYZE|ANY|APPLY|AS|ASC|AUTHORIZATION|AUTO_INCREMENT|BACKUP|BDB|BEGIN|BERKELEYDB|BIGINT|BINARY|BIT|BLOB|BOOL|BOOLEAN|BREAK|BROWSE|BTREE|BULK|BY|CALL|CASCADED?|CASE|CHAIN|CHAR VARYING|CHARACTER (?:SET|VARYING)|CHARSET|CHECK|CHECKPOINT|CLOSE|CLUSTERED|COALESCE|COLLATE|COLUMN|COLUMNS|COMMENT|COMMIT|COMMITTED|COMPUTE|CONNECT|CONSISTENT|CONSTRAINT|CONTAINS|CONTAINSTABLE|CONTINUE|CONVERT|CREATE|CROSS|CURRENT(?:_DATE|_TIME|_TIMESTAMP|_USER)?|CURSOR|DATA(?:BASES?)?|DATE(?:TIME)?|DBCC|DEALLOCATE|DEC|DECIMAL|DECLARE|DEFAULT|DEFINER|DELAYED|DELETE|DELIMITER(?:S)?|DENY|DESC|DESCRIBE|DETERMINISTIC|DISABLE|DISCARD|DISK|DISTINCT|DISTINCTROW|DISTRIBUTED|DO|DOUBLE(?: PRECISION)?|DROP|DUMMY|DUMP(?:FILE)?|DUPLICATE KEY|ELSE|ENABLE|ENCLOSED BY|END|ENGINE|ENUM|ERRLVL|ERRORS|ESCAPE(?:D BY)?|EXCEPT|EXEC(?:UTE)?|EXISTS|EXIT|EXPLAIN|EXTENDED|FETCH|FIELDS|FILE|FILLFACTOR|FIRST|FIXED|FLOAT|FOLLOWING|FOR(?: EACH ROW)?|FORCE|FOREIGN|FREETEXT(?:TABLE)?|FROM|FULL|FUNCTION|GEOMETRY(?:COLLECTION)?|GLOBAL|GOTO|GRANT|GROUP|HANDLER|HASH|HAVING|HOLDLOCK|IDENTITY(?:_INSERT|COL)?|IF|IGNORE|IMPORT|INDEX|INFILE|INNER|INNODB|INOUT|INSERT|INT|INTEGER|INTERSECT|INTO|INVOKER|ISOLATION LEVEL|JOIN|KEYS?|KILL|LANGUAGE SQL|LAST|LEFT|LIMIT|LINENO|LINES|LINESTRING|LOAD|LOCAL|LOCK|LONG(?:BLOB|TEXT)|MATCH(?:ED)?|MEDIUM(?:BLOB|INT|TEXT)|MERGE|MIDDLEINT|MODIFIES SQL DATA|MODIFY|MULTI(?:LINESTRING|POINT|POLYGON)|NATIONAL(?: CHAR VARYING| CHARACTER(?: VARYING)?| VARCHAR)?|NATURAL|NCHAR(?: VARCHAR)?|NEXT|NO(?: SQL|CHECK|CYCLE)?|NONCLUSTERED|NULLIF|NUMERIC|OFF?|OFFSETS?|ON|OPEN(?:DATASOURCE|QUERY|ROWSET)?|OPTIMIZE|OPTION(?:ALLY)?|ORDER|OUT(?:ER|FILE)?|OVER|PARTIAL|PARTITION|PERCENT|PIVOT|PLAN|POINT|POLYGON|PRECEDING|PRECISION|PREV|PRIMARY|PRINT|PRIVILEGES|PROC(?:EDURE)?|PUBLIC|PURGE|QUICK|RAISERROR|READ(?:S SQL DATA|TEXT)?|REAL|RECONFIGURE|REFERENCES|RELEASE|RENAME|REPEATABLE|REPLICATION|REQUIRE|RESTORE|RESTRICT|RETURNS?|REVOKE|RIGHT|ROLLBACK|ROUTINE|ROW(?:COUNT|GUIDCOL|S)?|RTREE|RULE|SAVE(?:POINT)?|SCHEMA|SELECT|SERIAL(?:IZABLE)?|SESSION(?:_USER)?|SET(?:USER)?|SHARE MODE|SHOW|SHUTDOWN|SIMPLE|SMALLINT|SNAPSHOT|SOME|SONAME|START(?:ING BY)?|STATISTICS|STATUS|STRIPED|SYSTEM_USER|TABLES?|TABLESPACE|TEMP(?:ORARY|TABLE)?|TERMINATED BY|TEXT(?:SIZE)?|THEN|TIMESTAMP|TINY(?:BLOB|INT|TEXT)|TOP?|TRAN(?:SACTIONS?)?|TRIGGER|TRUNCATE|TSEQUAL|TYPES?|UNBOUNDED|UNCOMMITTED|UNDEFINED|UNION|UNIQUE|UNPIVOT|UPDATE(?:TEXT)?|USAGE|USE|USER|USING|VALUES?|VAR(?:BINARY|CHAR|CHARACTER|YING)|VIEW|WAITFOR|WARNINGS|WHEN|WHERE|WHILE|WITH(?: ROLLUP|IN)?|WORK|WRITE(?:TEXT)?)\b/i,
|
|||
|
boolean: /\b(?:TRUE|FALSE|NULL)\b/i,
|
|||
|
number: /\b-?(?:0x)?\d*\.?[\da-f]+\b/,
|
|||
|
operator: /[-+*\/=%^~]|&&?|\|?\||!=?|<(?:=>?|<|>)?|>[>=]?|\b(?:AND|BETWEEN|IN|LIKE|NOT|OR|IS|DIV|REGEXP|RLIKE|SOUNDS LIKE|XOR)\b/i,
|
|||
|
punctuation: /[;[\]()`,.]/
|
|||
|
}
|
|||
|
|
|||
|
/*-----------------------------------------------------------*/
|
|||
|
|
|||
|
Prism.languages.swift = Prism.languages.extend('clike', {
|
|||
|
string: {
|
|||
|
pattern: /("|')(\\(?:\((?:[^()]|\([^)]+\))+\)|\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,
|
|||
|
greedy: true,
|
|||
|
inside: {
|
|||
|
interpolation: {
|
|||
|
pattern: /\\\((?:[^()]|\([^)]+\))+\)/,
|
|||
|
inside: {
|
|||
|
delimiter: {
|
|||
|
pattern: /^\\\(|\)$/,
|
|||
|
alias: 'variable'
|
|||
|
}
|
|||
|
// See rest below
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
},
|
|||
|
keyword: /\b(as|associativity|break|case|catch|class|continue|convenience|default|defer|deinit|didSet|do|dynamic(?:Type)?|else|enum|extension|fallthrough|final|for|func|get|guard|if|import|in|infix|init|inout|internal|is|lazy|left|let|mutating|new|none|nonmutating|operator|optional|override|postfix|precedence|prefix|private|Protocol|public|repeat|required|rethrows|return|right|safe|self|Self|set|static|struct|subscript|super|switch|throws?|try|Type|typealias|unowned|unsafe|var|weak|where|while|willSet|__(?:COLUMN__|FILE__|FUNCTION__|LINE__))\b/,
|
|||
|
number: /\b([\d_]+(\.[\de_]+)?|0x[a-f0-9_]+(\.[a-f0-9p_]+)?|0b[01_]+|0o[0-7_]+)\b/i,
|
|||
|
constant: /\b(nil|[A-Z_]{2,}|k[A-Z][A-Za-z_]+)\b/,
|
|||
|
atrule: /@\b(IB(?:Outlet|Designable|Action|Inspectable)|class_protocol|exported|noreturn|NS(?:Copying|Managed)|objc|UIApplicationMain|auto_closure)\b/,
|
|||
|
builtin: /\b([A-Z]\S+|abs|advance|alignof(?:Value)?|assert|contains|count(?:Elements)?|debugPrint(?:ln)?|distance|drop(?:First|Last)|dump|enumerate|equal|filter|find|first|getVaList|indices|isEmpty|join|last|lexicographicalCompare|map|max(?:Element)?|min(?:Element)?|numericCast|overlaps|partition|print(?:ln)?|reduce|reflect|reverse|sizeof(?:Value)?|sort(?:ed)?|split|startsWith|stride(?:of(?:Value)?)?|suffix|swap|toDebugString|toString|transcode|underestimateCount|unsafeBitCast|with(?:ExtendedLifetime|Unsafe(?:MutablePointers?|Pointers?)|VaList))\b/
|
|||
|
})
|
|||
|
Prism.languages.swift['string'].inside[
|
|||
|
'interpolation'
|
|||
|
].inside.rest = Prism.util.clone(Prism.languages.swift)
|
|||
|
Prism.languages.typescript = Prism.languages.extend('javascript', {
|
|||
|
// From JavaScript Prism keyword list and TypeScript language spec: https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md#221-reserved-words
|
|||
|
keyword: /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield|false|true|module|declare|constructor|string|Function|any|number|boolean|Array|enum|symbol|namespace|abstract|require|type)\b/
|
|||
|
})
|
|||
|
|
|||
|
Prism.languages.ts = Prism.languages.typescript
|
|||
|
Prism.languages.vim = {
|
|||
|
string: /"(?:[^"\\\r\n]|\\.)*"|'(?:[^'\r\n]|'')*'/,
|
|||
|
comment: /".*/,
|
|||
|
function: /\w+(?=\()/,
|
|||
|
keyword: /\b(?:ab|abbreviate|abc|abclear|abo|aboveleft|al|all|arga|argadd|argd|argdelete|argdo|arge|argedit|argg|argglobal|argl|arglocal|ar|args|argu|argument|as|ascii|bad|badd|ba|ball|bd|bdelete|be|bel|belowright|bf|bfirst|bl|blast|bm|bmodified|bn|bnext|bN|bNext|bo|botright|bp|bprevious|brea|break|breaka|breakadd|breakd|breakdel|breakl|breaklist|br|brewind|bro|browse|bufdo|b|buffer|buffers|bun|bunload|bw|bwipeout|ca|cabbrev|cabc|cabclear|caddb|caddbuffer|cad|caddexpr|caddf|caddfile|cal|call|cat|catch|cb|cbuffer|cc|ccl|cclose|cd|ce|center|cex|cexpr|cf|cfile|cfir|cfirst|cgetb|cgetbuffer|cgete|cgetexpr|cg|cgetfile|c|change|changes|chd|chdir|che|checkpath|checkt|checktime|cla|clast|cl|clist|clo|close|cmapc|cmapclear|cnew|cnewer|cn|cnext|cN|cNext|cnf|cnfile|cNfcNfile|cnorea|cnoreabbrev|col|colder|colo|colorscheme|comc|comclear|comp|compiler|conf|confirm|con|continue|cope|copen|co|copy|cpf|cpfile|cp|cprevious|cq|cquit|cr|crewind|cuna|cunabbrev|cu|cunmap|cw|cwindow|debugg|debuggreedy|delc|delcommand|d|delete|delf|delfunction|delm|delmarks|diffg|diffget|diffoff|diffpatch|diffpu|diffput|diffsplit|diffthis|diffu|diffupdate|dig|digraphs|di|display|dj|djump|dl|dlist|dr|drop|ds|dsearch|dsp|dsplit|earlier|echoe|echoerr|echom|echomsg|echon|e|edit|el|else|elsei|elseif|em|emenu|endfo|endfor|endf|endfunction|endfun|en|endif|endt|endtry|endw|endwhile|ene|enew|ex|exi|exit|exu|exusage|f|file|files|filetype|fina|finally|fin|find|fini|finish|fir|first|fix|fixdel|fo|fold|foldc|foldclose|folddoc|folddoclosed|foldd|folddoopen|foldo|foldopen|for|fu|fun|function|go|goto|gr|grep|grepa|grepadd|ha|hardcopy|h|help|helpf|helpfind|helpg|helpgrep|helpt|helptags|hid|hide|his|history|ia|iabbrev|iabc|iabclear|if|ij|ijump|il|ilist|imapc|imapclear|in|inorea|inoreabbrev|isearch|isp|isplit|iuna|iunabbrev|iu|iunmap|j|join|ju|jumps|k|keepalt|keepj|keepjumps|kee|keepmarks|laddb|laddbuffer|lad|laddexpr|laddf|laddfile|lan|language|la|last|later|lb|lbuffer|lc|lcd|lch|lchdir|lcl|lclose|let|left|lefta|leftabove|lex|lexpr|lf|lfile|lfir|lfirst|lgetb|lgetbuffer|lgete|lgetexpr|lg|lgetfile|lgr|lgrep|lgrepa|lgrepadd|lh|lhelpgrep|l|list|ll|lla|llast|lli|llist|lmak|lmake|lm|lmap|lmapc|lmapclear|lnew|lnewer|lne|lnext|lN|lNext|lnf|lnfile|lNf|lNfile|ln|lnoremap|lo|loadview|loc|lockmarks|lockv|lockvar|lol|lolder|lop|lopen|lpf|lpfile|lp|lprevious|lr|lrewind|ls|lt|ltag|lu|lunmap|lv|lvimgrep|lvimgrepa|lvimgrepadd|lw|lwindow|mak|make|ma|mark|marks|mat|match|menut|menutranslate|mk|mkexrc|mks|mksession|mksp|mkspell|mkvie|mkview|mkv|mkvimrc|mod|mode|m|move|mzf|mzfile|mz|mzscheme|nbkey|new|n|next|N|Next|nmapc|nmapclear|noh|nohlsearch|norea|noreabbrev|nu|number|nun|nunmap|omapc|omapclear|on|only|o|open|opt|options|ou|ounmap|pc|pclose|ped|pedit|pe|perl|perld|perldo|po|pop|popu|popu|popup|pp|ppop|pre|preserve|prev|previous|p|print|P|Print|profd|profdel|prof|profile|promptf|promptfind|promptr|promptrepl|ps|psearch|pta|ptag|ptf|ptfirst|ptj|ptjump|ptl|ptlast|ptn|ptnext|ptN|ptNext|ptp|ptprevious|ptr|ptrewind|pts|ptselect|pu|put|pw|pwd|pyf|pyfile|py|python|qa|qall|q|quit|quita|quitall|r|read|rec|recover|redi|redir|red|redo|redr|redraw|redraws|redrawstatus|reg|registers|res|resize|ret|retab|retu|return|rew|rewind|ri|right|rightb|rightbelow|rub|ruby|rubyd|rubydo|rubyf|rubyfile|ru|runtime|rv|rviminfo|sal|sall|san|sandbox|sa|sargument|sav|saveas|sba|sball|sbf|sbfirst|sbl|sblast|sbm|sbmodified|sbn|sbnext|sbN|sbNext|sbp|sbprevious|sbr|sbrewind|sb|sbuffer|scripte|scriptencoding|scrip|scriptnames|se|set|setf|setfiletype|setg|setglobal|setl|setlocal|sf|sfind|sfir|sfirst|sh|shell|sign|sil|silent|sim|simalt|sla|slast|sl|sleep|sm|smagic|sm|smap|smapc|smapclear|sme|smenu|sn|snext|sN|sNext|sni|sniff|sno|snomagic|snor|snoremap|snoreme|snoremenu|sor|sort|so|source|spelld|spelldump|spe|spellgood|spelli|spellinfo|spellr|spellrepall|spellu|spellundo|spellw|spellwrong|sp|split|spr|sprevious|sre|srewind|sta|stag|startg|startgreplace|star|startinsert|startr|startreplace|stj|stjump|st|stop|stopi|stopinsert|sts|stselect|sun|sunhide|sunm|sunmap|sus|suspend|sv|sview|syncbind|t|tab|tabc|tabclose|tabd|tabdo|tabe|tabedit|
|
|||
|
builtin: /\b(?:autocmd|acd|ai|akm|aleph|allowrevins|altkeymap|ambiwidth|ambw|anti|antialias|arab|arabic|arabicshape|ari|arshape|autochdir|autoindent|autoread|autowrite|autowriteall|aw|awa|background|backspace|backup|backupcopy|backupdir|backupext|backupskip|balloondelay|ballooneval|balloonexpr|bdir|bdlay|beval|bex|bexpr|bg|bh|bin|binary|biosk|bioskey|bk|bkc|bomb|breakat|brk|browsedir|bs|bsdir|bsk|bt|bufhidden|buflisted|buftype|casemap|ccv|cdpath|cedit|cfu|ch|charconvert|ci|cin|cindent|cink|cinkeys|cino|cinoptions|cinw|cinwords|clipboard|cmdheight|cmdwinheight|cmp|cms|columns|com|comments|commentstring|compatible|complete|completefunc|completeopt|consk|conskey|copyindent|cot|cpo|cpoptions|cpt|cscopepathcomp|cscopeprg|cscopequickfix|cscopetag|cscopetagorder|cscopeverbose|cspc|csprg|csqf|cst|csto|csverb|cuc|cul|cursorcolumn|cursorline|cwh|debug|deco|def|define|delcombine|dex|dg|dict|dictionary|diff|diffexpr|diffopt|digraph|dip|dir|directory|dy|ea|ead|eadirection|eb|ed|edcompatible|ef|efm|ei|ek|enc|encoding|endofline|eol|ep|equalalways|equalprg|errorbells|errorfile|errorformat|esckeys|et|eventignore|expandtab|exrc|fcl|fcs|fdc|fde|fdi|fdl|fdls|fdm|fdn|fdo|fdt|fen|fenc|fencs|fex|ff|ffs|fileencoding|fileencodings|fileformat|fileformats|fillchars|fk|fkmap|flp|fml|fmr|foldcolumn|foldenable|foldexpr|foldignore|foldlevel|foldlevelstart|foldmarker|foldmethod|foldminlines|foldnestmax|foldtext|formatexpr|formatlistpat|formatoptions|formatprg|fp|fs|fsync|ft|gcr|gd|gdefault|gfm|gfn|gfs|gfw|ghr|gp|grepformat|grepprg|gtl|gtt|guicursor|guifont|guifontset|guifontwide|guiheadroom|guioptions|guipty|guitablabel|guitabtooltip|helpfile|helpheight|helplang|hf|hh|hi|hidden|highlight|hk|hkmap|hkmapp|hkp|hl|hlg|hls|hlsearch|ic|icon|iconstring|ignorecase|im|imactivatekey|imak|imc|imcmdline|imd|imdisable|imi|iminsert|ims|imsearch|inc|include|includeexpr|incsearch|inde|indentexpr|indentkeys|indk|inex|inf|infercase|insertmode|isf|isfname|isi|isident|isk|iskeyword|isprint|joinspaces|js|key|keymap|keymodel|keywordprg|km|kmp|kp|langmap|langmenu|laststatus|lazyredraw|lbr|lcs|linebreak|lines|linespace|lisp|lispwords|listchars|loadplugins|lpl|lsp|lz|macatsui|magic|makeef|makeprg|matchpairs|matchtime|maxcombine|maxfuncdepth|maxmapdepth|maxmem|maxmempattern|maxmemtot|mco|mef|menuitems|mfd|mh|mis|mkspellmem|ml|mls|mm|mmd|mmp|mmt|modeline|modelines|modifiable|modified|more|mouse|mousef|mousefocus|mousehide|mousem|mousemodel|mouses|mouseshape|mouset|mousetime|mp|mps|msm|mzq|mzquantum|nf|nrformats|numberwidth|nuw|odev|oft|ofu|omnifunc|opendevice|operatorfunc|opfunc|osfiletype|pa|para|paragraphs|paste|pastetoggle|patchexpr|patchmode|path|pdev|penc|pex|pexpr|pfn|ph|pheader|pi|pm|pmbcs|pmbfn|popt|preserveindent|previewheight|previewwindow|printdevice|printencoding|printexpr|printfont|printheader|printmbcharset|printmbfont|printoptions|prompt|pt|pumheight|pvh|pvw|qe|quoteescape|readonly|remap|report|restorescreen|revins|rightleft|rightleftcmd|rl|rlc|ro|rs|rtp|ruf|ruler|rulerformat|runtimepath|sbo|sc|scb|scr|scroll|scrollbind|scrolljump|scrolloff|scrollopt|scs|sect|sections|secure|sel|selection|selectmode|sessionoptions|sft|shcf|shellcmdflag|shellpipe|shellquote|shellredir|shellslash|shelltemp|shelltype|shellxquote|shiftround|shiftwidth|shm|shortmess|shortname|showbreak|showcmd|showfulltag|showmatch|showmode|showtabline|shq|si|sidescroll|sidescrolloff|siso|sj|slm|smartcase|smartindent|smarttab|smc|smd|softtabstop|sol|spc|spell|spellcapcheck|spellfile|spelllang|spellsuggest|spf|spl|splitbelow|splitright|sps|sr|srr|ss|ssl|ssop|stal|startofline|statusline|stl|stmp|su|sua|suffixes|suffixesadd|sw|swapfile|swapsync|swb|swf|switchbuf|sws|sxq|syn|synmaxcol|syntax|tabline|tabpagemax|tabstop|tagbsearch|taglength|tagrelative|tagstack|tal|tb|tbi|tbidi|tbis|tbs|tenc|term|termbidi|termencoding|terse|textauto|textmode|textwidth|tgst|thesaurus|tildeop|timeout|timeoutlen|title|titlelen|titleold|titlestring|toolbar|toolbariconsize|top|tpm|tsl|tsr|ttimeout|ttimeoutlen|ttm|tty|ttybuiltin|ttyfast|ttym|ttymouse|ttyscroll|ttytype|tw|tx|uc|ul|undolevels|updatecount|updatetime|ut|vb|vbs|vdir
|
|||
|
number: /\b(?:0x[\da-f]+|\d+(?:\.\d+)?)\b/i,
|
|||
|
operator: /\|\||&&|[-+.]=?|[=!](?:[=~][#?]?)?|[<>]=?[#?]?|[*\/%?]|\b(?:is(?:not)?)\b/,
|
|||
|
punctuation: /[{}[\](),;:]/
|
|||
|
}
|
|||
|
|
|||
|
export default Prism
|