tippy.js
Version:
Vanilla JS Tooltip Library
1,003 lines (1,002 loc) • 26.7 kB
JavaScript
window.PR_SHOULD_USE_CONTINUATION = true
;(function() {
var h = ['break,continue,do,else,for,if,return,while']
var u = [
h,
'auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile'
]
var p = [
u,
'catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof'
]
var l = [
p,
'alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where'
]
var x = [
p,
'abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient'
]
var R = [
x,
'as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var'
]
var r =
'all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,true,try,unless,until,when,while,yes'
var w = [
p,
'debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN'
]
var s =
'caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END'
var I = [
h,
'and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None'
]
var f = [
h,
'alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END'
]
var H = [h, 'case,done,elif,esac,eval,fi,function,in,local,set,then,until']
var A = [l, R, w, s + I, f, H]
var e = /^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)/
var C = 'str'
var z = 'kwd'
var j = 'com'
var O = 'typ'
var G = 'lit'
var L = 'pun'
var F = 'pln'
var m = 'tag'
var E = 'dec'
var J = 'src'
var P = 'atn'
var n = 'atv'
var N = 'nocode'
var M =
'(?:^^\\.?|[+-]|\\!|\\!=|\\!==|\\#|\\%|\\%=|&|&&|&&=|&=|\\(|\\*|\\*=|\\+=|\\,|\\-=|\\->|\\/|\\/=|:|::|\\;|<|<<|<<=|<=|=|==|===|>|>=|>>|>>=|>>>|>>>=|\\?|\\@|\\[|\\^|\\^=|\\^\\^|\\^\\^=|\\{|\\||\\|=|\\|\\||\\|\\|=|\\~|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*'
function k(Z) {
var ad = 0
var S = false
var ac = false
for (var V = 0, U = Z.length; V < U; ++V) {
var ae = Z[V]
if (ae.ignoreCase) {
ac = true
} else {
if (
/[a-z]/i.test(
ae.source.replace(/\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, '')
)
) {
S = true
ac = false
break
}
}
}
var Y = { b: 8, t: 9, n: 10, v: 11, f: 12, r: 13 }
function ab(ah) {
var ag = ah.charCodeAt(0)
if (ag !== 92) {
return ag
}
var af = ah.charAt(1)
ag = Y[af]
if (ag) {
return ag
} else {
if ('0' <= af && af <= '7') {
return parseInt(ah.substring(1), 8)
} else {
if (af === 'u' || af === 'x') {
return parseInt(ah.substring(2), 16)
} else {
return ah.charCodeAt(1)
}
}
}
}
function T(af) {
if (af < 32) {
return (af < 16 ? '\\x0' : '\\x') + af.toString(16)
}
var ag = String.fromCharCode(af)
if (ag === '\\' || ag === '-' || ag === '[' || ag === ']') {
ag = '\\' + ag
}
return ag
}
function X(am) {
var aq = am
.substring(1, am.length - 1)
.match(
new RegExp(
'\\\\u[0-9A-Fa-f]{4}|\\\\x[0-9A-Fa-f]{2}|\\\\[0-3][0-7]{0,2}|\\\\[0-7]{1,2}|\\\\[\\s\\S]|-|[^-\\\\]',
'g'
)
)
var ak = []
var af = []
var ao = aq[0] === '^'
for (var ar = ao ? 1 : 0, aj = aq.length; ar < aj; ++ar) {
var ah = aq[ar]
if (/\\[bdsw]/i.test(ah)) {
ak.push(ah)
} else {
var ag = ab(ah)
var al
if (ar + 2 < aj && '-' === aq[ar + 1]) {
al = ab(aq[ar + 2])
ar += 2
} else {
al = ag
}
af.push([ag, al])
if (!(al < 65 || ag > 122)) {
if (!(al < 65 || ag > 90)) {
af.push([Math.max(65, ag) | 32, Math.min(al, 90) | 32])
}
if (!(al < 97 || ag > 122)) {
af.push([Math.max(97, ag) & ~32, Math.min(al, 122) & ~32])
}
}
}
}
af.sort(function(av, au) {
return av[0] - au[0] || au[1] - av[1]
})
var ai = []
var ap = [NaN, NaN]
for (var ar = 0; ar < af.length; ++ar) {
var at = af[ar]
if (at[0] <= ap[1] + 1) {
ap[1] = Math.max(ap[1], at[1])
} else {
ai.push((ap = at))
}
}
var an = ['[']
if (ao) {
an.push('^')
}
an.push.apply(an, ak)
for (var ar = 0; ar < ai.length; ++ar) {
var at = ai[ar]
an.push(T(at[0]))
if (at[1] > at[0]) {
if (at[1] + 1 > at[0]) {
an.push('-')
}
an.push(T(at[1]))
}
}
an.push(']')
return an.join('')
}
function W(al) {
var aj = al.source.match(
new RegExp(
'(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)',
'g'
)
)
var ah = aj.length
var an = []
for (var ak = 0, am = 0; ak < ah; ++ak) {
var ag = aj[ak]
if (ag === '(') {
++am
} else {
if ('\\' === ag.charAt(0)) {
var af = +ag.substring(1)
if (af && af <= am) {
an[af] = -1
}
}
}
}
for (var ak = 1; ak < an.length; ++ak) {
if (-1 === an[ak]) {
an[ak] = ++ad
}
}
for (var ak = 0, am = 0; ak < ah; ++ak) {
var ag = aj[ak]
if (ag === '(') {
++am
if (an[am] === undefined) {
aj[ak] = '(?:'
}
} else {
if ('\\' === ag.charAt(0)) {
var af = +ag.substring(1)
if (af && af <= am) {
aj[ak] = '\\' + an[am]
}
}
}
}
for (var ak = 0, am = 0; ak < ah; ++ak) {
if ('^' === aj[ak] && '^' !== aj[ak + 1]) {
aj[ak] = ''
}
}
if (al.ignoreCase && S) {
for (var ak = 0; ak < ah; ++ak) {
var ag = aj[ak]
var ai = ag.charAt(0)
if (ag.length >= 2 && ai === '[') {
aj[ak] = X(ag)
} else {
if (ai !== '\\') {
aj[ak] = ag.replace(/[a-zA-Z]/g, function(ao) {
var ap = ao.charCodeAt(0)
return '[' + String.fromCharCode(ap & ~32, ap | 32) + ']'
})
}
}
}
}
return aj.join('')
}
var aa = []
for (var V = 0, U = Z.length; V < U; ++V) {
var ae = Z[V]
if (ae.global || ae.multiline) {
throw new Error('' + ae)
}
aa.push('(?:' + W(ae) + ')')
}
return new RegExp(aa.join('|'), ac ? 'gi' : 'g')
}
function a(V) {
var U = /(?:^|\s)nocode(?:\s|$)/
var X = []
var T = 0
var Z = []
var W = 0
var S
if (V.currentStyle) {
S = V.currentStyle.whiteSpace
} else {
if (window.getComputedStyle) {
S = document.defaultView
.getComputedStyle(V, null)
.getPropertyValue('white-space')
}
}
var Y = S && 'pre' === S.substring(0, 3)
function aa(ab) {
switch (ab.nodeType) {
case 1:
if (U.test(ab.className)) {
return
}
for (var ae = ab.firstChild; ae; ae = ae.nextSibling) {
aa(ae)
}
var ad = ab.nodeName
if ('BR' === ad || 'LI' === ad) {
X[W] = '\n'
Z[W << 1] = T++
Z[(W++ << 1) | 1] = ab
}
break
case 3:
case 4:
var ac = ab.nodeValue
if (ac.length) {
if (!Y) {
ac = ac.replace(/[ \t\r\n]+/g, ' ')
} else {
ac = ac.replace(/\r\n?/g, '\n')
}
X[W] = ac
Z[W << 1] = T
T += ac.length
Z[(W++ << 1) | 1] = ab
}
break
}
}
aa(V)
return { sourceCode: X.join('').replace(/\n$/, ''), spans: Z }
}
function B(S, U, W, T) {
if (!U) {
return
}
var V = { sourceCode: U, basePos: S }
W(V)
T.push.apply(T, V.decorations)
}
var v = /\S/
function o(S) {
var V = undefined
for (var U = S.firstChild; U; U = U.nextSibling) {
var T = U.nodeType
V = T === 1 ? (V ? S : U) : T === 3 ? (v.test(U.nodeValue) ? S : V) : V
}
return V === S ? undefined : V
}
function g(U, T) {
var S = {}
var V
;(function() {
var ad = U.concat(T)
var ah = []
var ag = {}
for (var ab = 0, Z = ad.length; ab < Z; ++ab) {
var Y = ad[ab]
var ac = Y[3]
if (ac) {
for (var ae = ac.length; --ae >= 0; ) {
S[ac.charAt(ae)] = Y
}
}
var af = Y[1]
var aa = '' + af
if (!ag.hasOwnProperty(aa)) {
ah.push(af)
ag[aa] = null
}
}
ah.push(/[\0-\uffff]/)
V = k(ah)
})()
var X = T.length
var W = function(ah) {
var Z = ah.sourceCode,
Y = ah.basePos
var ad = [Y, F]
var af = 0
var an = Z.match(V) || []
var aj = {}
for (var ae = 0, aq = an.length; ae < aq; ++ae) {
var ag = an[ae]
var ap = aj[ag]
var ai = void 0
var am
if (typeof ap === 'string') {
am = false
} else {
var aa = S[ag.charAt(0)]
if (aa) {
ai = ag.match(aa[1])
ap = aa[0]
} else {
for (var ao = 0; ao < X; ++ao) {
aa = T[ao]
ai = ag.match(aa[1])
if (ai) {
ap = aa[0]
break
}
}
if (!ai) {
ap = F
}
}
am = ap.length >= 5 && 'lang-' === ap.substring(0, 5)
if (am && !(ai && typeof ai[1] === 'string')) {
am = false
ap = J
}
if (!am) {
aj[ag] = ap
}
}
var ab = af
af += ag.length
if (!am) {
ad.push(Y + ab, ap)
} else {
var al = ai[1]
var ak = ag.indexOf(al)
var ac = ak + al.length
if (ai[2]) {
ac = ag.length - ai[2].length
ak = ac - al.length
}
var ar = ap.substring(5)
B(Y + ab, ag.substring(0, ak), W, ad)
B(Y + ab + ak, al, q(ar, al), ad)
B(Y + ab + ac, ag.substring(ac), W, ad)
}
}
ah.decorations = ad
}
return W
}
function i(T) {
var W = [],
S = []
if (T.tripleQuotedStrings) {
W.push([
C,
/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
null,
'\'"'
])
} else {
if (T.multiLineStrings) {
W.push([
C,
/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
null,
'\'"`'
])
} else {
W.push([
C,
/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
null,
'"\''
])
}
}
if (T.verbatimStrings) {
S.push([C, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null])
}
var Y = T.hashComments
if (Y) {
if (T.cStyleComments) {
if (Y > 1) {
W.push([j, /^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/, null, '#'])
} else {
W.push([
j,
/^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
null,
'#'
])
}
S.push([
C,
/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
null
])
} else {
W.push([j, /^#[^\r\n]*/, null, '#'])
}
}
if (T.cStyleComments) {
S.push([j, /^\/\/[^\r\n]*/, null])
S.push([j, /^\/\*[\s\S]*?(?:\*\/|$)/, null])
}
if (T.regexLiterals) {
var X =
'/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/'
S.push(['lang-regex', new RegExp('^' + M + '(' + X + ')')])
}
var V = T.types
if (V) {
S.push([O, V])
}
var U = ('' + T.keywords).replace(/^ | $/g, '')
if (U.length) {
S.push([z, new RegExp('^(?:' + U.replace(/[\s,]+/g, '|') + ')\\b'), null])
}
W.push([F, /^\s+/, null, ' \r\n\t\xA0'])
S.push(
[G, /^@[a-z_$][a-z_$@0-9]*/i, null],
[O, /^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/, null],
[F, /^[a-z_$][a-z_$@0-9]*/i, null],
[
G,
new RegExp(
'^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*',
'i'
),
null,
'0123456789'
],
[F, /^\\[\s\S]?/, null],
[L, /^.[^\s\w\.$@\'\"\`\/\#\\]*/, null]
)
return g(W, S)
}
var K = i({
keywords: A,
hashComments: true,
cStyleComments: true,
multiLineStrings: true,
regexLiterals: true
})
function Q(V, ag) {
var U = /(?:^|\s)nocode(?:\s|$)/
var ab = /\r\n?|\n/
var ac = V.ownerDocument
var S
if (V.currentStyle) {
S = V.currentStyle.whiteSpace
} else {
if (window.getComputedStyle) {
S = ac.defaultView
.getComputedStyle(V, null)
.getPropertyValue('white-space')
}
}
var Z = S && 'pre' === S.substring(0, 3)
var af = ac.createElement('LI')
while (V.firstChild) {
af.appendChild(V.firstChild)
}
var W = [af]
function ae(al) {
switch (al.nodeType) {
case 1:
if (U.test(al.className)) {
break
}
if ('BR' === al.nodeName) {
ad(al)
if (al.parentNode) {
al.parentNode.removeChild(al)
}
} else {
for (var an = al.firstChild; an; an = an.nextSibling) {
ae(an)
}
}
break
case 3:
case 4:
if (Z) {
var am = al.nodeValue
var aj = am.match(ab)
if (aj) {
var ai = am.substring(0, aj.index)
al.nodeValue = ai
var ah = am.substring(aj.index + aj[0].length)
if (ah) {
var ak = al.parentNode
ak.insertBefore(ac.createTextNode(ah), al.nextSibling)
}
ad(al)
if (!ai) {
al.parentNode.removeChild(al)
}
}
}
break
}
}
function ad(ak) {
while (!ak.nextSibling) {
ak = ak.parentNode
if (!ak) {
return
}
}
function ai(al, ar) {
var aq = ar ? al.cloneNode(false) : al
var ao = al.parentNode
if (ao) {
var ap = ai(ao, 1)
var an = al.nextSibling
ap.appendChild(aq)
for (var am = an; am; am = an) {
an = am.nextSibling
ap.appendChild(am)
}
}
return aq
}
var ah = ai(ak.nextSibling, 0)
for (var aj; (aj = ah.parentNode) && aj.nodeType === 1; ) {
ah = aj
}
W.push(ah)
}
for (var Y = 0; Y < W.length; ++Y) {
ae(W[Y])
}
if (ag === (ag | 0)) {
W[0].setAttribute('value', ag)
}
var aa = ac.createElement('OL')
aa.className = 'linenums'
var X = Math.max(0, (ag - 1) | 0) || 0
for (var Y = 0, T = W.length; Y < T; ++Y) {
af = W[Y]
af.className = 'L' + ((Y + X) % 10)
if (!af.firstChild) {
af.appendChild(ac.createTextNode('\xA0'))
}
aa.appendChild(af)
}
V.appendChild(aa)
}
function D(ac) {
var aj = /\bMSIE\b/.test(navigator.userAgent)
var am = /\n/g
var al = ac.sourceCode
var an = al.length
var V = 0
var aa = ac.spans
var T = aa.length
var ah = 0
var X = ac.decorations
var Y = X.length
var Z = 0
X[Y] = an
var ar, aq
for (aq = ar = 0; aq < Y; ) {
if (X[aq] !== X[aq + 2]) {
X[ar++] = X[aq++]
X[ar++] = X[aq++]
} else {
aq += 2
}
}
Y = ar
for (aq = ar = 0; aq < Y; ) {
var at = X[aq]
var ab = X[aq + 1]
var W = aq + 2
while (W + 2 <= Y && X[W + 1] === ab) {
W += 2
}
X[ar++] = at
X[ar++] = ab
aq = W
}
Y = X.length = ar
var ae = null
while (ah < T) {
var af = aa[ah]
var S = aa[ah + 2] || an
var ag = X[Z]
var ap = X[Z + 2] || an
var W = Math.min(S, ap)
var ak = aa[ah + 1]
var U
if (ak.nodeType !== 1 && (U = al.substring(V, W))) {
if (aj) {
U = U.replace(am, '\r')
}
ak.nodeValue = U
var ai = ak.ownerDocument
var ao = ai.createElement('SPAN')
ao.className = X[Z + 1]
var ad = ak.parentNode
ad.replaceChild(ao, ak)
ao.appendChild(ak)
if (V < S) {
aa[ah + 1] = ak = ai.createTextNode(al.substring(W, S))
ad.insertBefore(ak, ao.nextSibling)
}
}
V = W
if (V >= S) {
ah += 2
}
if (V >= ap) {
Z += 2
}
}
}
var t = {}
function c(U, V) {
for (var S = V.length; --S >= 0; ) {
var T = V[S]
if (!t.hasOwnProperty(T)) {
t[T] = U
} else {
if (window.console) {
console.warn('cannot override language handler %s', T)
}
}
}
}
function q(T, S) {
if (!(T && t.hasOwnProperty(T))) {
T = /^\s*</.test(S) ? 'default-markup' : 'default-code'
}
return t[T]
}
c(K, ['default-code'])
c(
g(
[],
[
[F, /^[^<?]+/],
[E, /^<!\w[^>]*(?:>|$)/],
[j, /^<\!--[\s\S]*?(?:-\->|$)/],
['lang-', /^<\?([\s\S]+?)(?:\?>|$)/],
['lang-', /^<%([\s\S]+?)(?:%>|$)/],
[L, /^(?:<[%?]|[%?]>)/],
['lang-', /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
['lang-js', /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
['lang-css', /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i]
]
),
['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']
)
c(
g(
[
[F, /^[\s]+/, null, ' \t\r\n'],
[n, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '"\'']
],
[
[m, /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
[P, /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
['lang-uq.val', /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
[L, /^[=<>\/]+/],
['lang-js', /^on\w+\s*=\s*\"([^\"]+)\"/i],
['lang-js', /^on\w+\s*=\s*\'([^\']+)\'/i],
['lang-js', /^on\w+\s*=\s*([^\"\'>\s]+)/i],
['lang-css', /^style\s*=\s*\"([^\"]+)\"/i],
['lang-css', /^style\s*=\s*\'([^\']+)\'/i],
['lang-css', /^style\s*=\s*([^\"\'>\s]+)/i]
]
),
['in.tag']
)
c(g([], [[n, /^[\s\S]+/]]), ['uq.val'])
c(i({ keywords: l, hashComments: true, cStyleComments: true, types: e }), [
'c',
'cc',
'cpp',
'cxx',
'cyc',
'm'
])
c(i({ keywords: 'null,true,false' }), ['json'])
c(
i({
keywords: R,
hashComments: true,
cStyleComments: true,
verbatimStrings: true,
types: e
}),
['cs']
)
c(i({ keywords: x, cStyleComments: true }), ['java'])
c(i({ keywords: H, hashComments: true, multiLineStrings: true }), [
'bsh',
'csh',
'sh'
])
c(
i({
keywords: I,
hashComments: true,
multiLineStrings: true,
tripleQuotedStrings: true
}),
['cv', 'py']
)
c(
i({
keywords: s,
hashComments: true,
multiLineStrings: true,
regexLiterals: true
}),
['perl', 'pl', 'pm']
)
c(
i({
keywords: f,
hashComments: true,
multiLineStrings: true,
regexLiterals: true
}),
['rb']
)
c(i({ keywords: w, cStyleComments: true, regexLiterals: true }), ['js'])
c(
i({
keywords: r,
hashComments: 3,
cStyleComments: true,
multilineStrings: true,
tripleQuotedStrings: true,
regexLiterals: true
}),
['coffee']
)
c(g([], [[C, /^[\s\S]+/]]), ['regex'])
function d(V) {
var U = V.langExtension
try {
var S = a(V.sourceNode)
var T = S.sourceCode
V.sourceCode = T
V.spans = S.spans
V.basePos = 0
q(U, T)(V)
D(V)
} catch (W) {
if ('console' in window) {
console.log(W && W.stack ? W.stack : W)
}
}
}
function y(W, V, U) {
var S = document.createElement('PRE')
S.innerHTML = W
if (U) {
Q(S, U)
}
var T = { langExtension: V, numberLines: U, sourceNode: S }
d(T)
return S.innerHTML
}
function b(ad) {
function Y(af) {
return document.getElementsByTagName(af)
}
var ac = [Y('pre'), Y('code'), Y('xmp')]
var T = []
for (var aa = 0; aa < ac.length; ++aa) {
for (var Z = 0, V = ac[aa].length; Z < V; ++Z) {
T.push(ac[aa][Z])
}
}
ac = null
var W = Date
if (!W.now) {
W = {
now: function() {
return +new Date()
}
}
}
var X = 0
var S
var ab = /\blang(?:uage)?-([\w.]+)(?!\S)/
var ae = /\bprettyprint\b/
function U() {
var ag = window.PR_SHOULD_USE_CONTINUATION ? W.now() + 250 : Infinity
for (; X < T.length && W.now() < ag; X++) {
var aj = T[X]
var ai = aj.className
if (ai.indexOf('prettyprint') >= 0) {
var ah = ai.match(ab)
var am
if (!ah && (am = o(aj)) && 'CODE' === am.tagName) {
ah = am.className.match(ab)
}
if (ah) {
ah = ah[1]
}
var al = false
for (var ak = aj.parentNode; ak; ak = ak.parentNode) {
if (
(ak.tagName === 'pre' ||
ak.tagName === 'code' ||
ak.tagName === 'xmp') &&
ak.className &&
ak.className.indexOf('prettyprint') >= 0
) {
al = true
break
}
}
if (!al) {
var af = aj.className.match(/\blinenums\b(?::(\d+))?/)
af = af ? (af[1] && af[1].length ? +af[1] : true) : false
if (af) {
Q(aj, af)
}
S = { langExtension: ah, sourceNode: aj, numberLines: af }
d(S)
}
}
}
if (X < T.length) {
setTimeout(U, 250)
} else {
if (ad) {
ad()
}
}
}
U()
}
window.prettyPrintOne = y
window.prettyPrint = b
window.PR = {
createSimpleLexer: g,
registerLangHandler: c,
sourceDecorator: i,
PR_ATTRIB_NAME: P,
PR_ATTRIB_VALUE: n,
PR_COMMENT: j,
PR_DECLARATION: E,
PR_KEYWORD: z,
PR_LITERAL: G,
PR_NOCODE: N,
PR_PLAIN: F,
PR_PUNCTUATION: L,
PR_SOURCE: J,
PR_STRING: C,
PR_TAG: m,
PR_TYPE: O
}
})()
PR.registerLangHandler(
PR.createSimpleLexer(
[],
[
[PR.PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
[PR.PR_COMMENT, /^<\!--[\s\S]*?(?:-\->|$)/],
[PR.PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
['lang-', /^<\?([\s\S]+?)(?:\?>|$)/],
['lang-', /^<%([\s\S]+?)(?:%>|$)/],
['lang-', /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
[
'lang-handlebars',
/^<script\b[^>]*type\s*=\s*['"]?text\/x-handlebars-template['"]?\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i
],
['lang-js', /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
['lang-css', /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
['lang-in.tag', /^(<\/?[a-z][^<>]*>)/i],
[PR.PR_DECLARATION, /^{{[#^>/]?\s*[\w.][^}]*}}/],
[PR.PR_DECLARATION, /^{{&?\s*[\w.][^}]*}}/],
[PR.PR_DECLARATION, /^{{{>?\s*[\w.][^}]*}}}/],
[PR.PR_COMMENT, /^{{![^}]*}}/]
]
),
['handlebars', 'hbs']
)
PR.registerLangHandler(
PR.createSimpleLexer(
[[PR.PR_PLAIN, /^[ \t\r\n\f]+/, null, ' \t\r\n\f']],
[
[
PR.PR_STRING,
/^\"(?:[^\n\r\f\\\"]|\\(?:\r\n?|\n|\f)|\\[\s\S])*\"/,
null
],
[
PR.PR_STRING,
/^\'(?:[^\n\r\f\\\']|\\(?:\r\n?|\n|\f)|\\[\s\S])*\'/,
null
],
['lang-css-str', /^url\(([^\)\"\']*)\)/i],
[
PR.PR_KEYWORD,
/^(?:url|rgb|\!important|@import|@page|@media|@charset|inherit)(?=[^\-\w]|$)/i,
null
],
[
'lang-css-kw',
/^(-?(?:[_a-z]|(?:\\[0-9a-f]+ ?))(?:[_a-z0-9\-]|\\(?:\\[0-9a-f]+ ?))*)\s*:/i
],
[PR.PR_COMMENT, /^\/\*[^*]*\*+(?:[^\/*][^*]*\*+)*\//],
[PR.PR_COMMENT, /^(?:<!--|-->)/],
[PR.PR_LITERAL, /^(?:\d+|\d*\.\d+)(?:%|[a-z]+)?/i],
[PR.PR_LITERAL, /^#(?:[0-9a-f]{3}){1,2}/i],
[
PR.PR_PLAIN,
/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i
],
[PR.PR_PUNCTUATION, /^[^\s\w\'\"]+/]
]
),
['css']
)
PR.registerLangHandler(
PR.createSimpleLexer(
[],
[
[
PR.PR_KEYWORD,
/^-?(?:[_a-z]|(?:\\[\da-f]+ ?))(?:[_a-z\d\-]|\\(?:\\[\da-f]+ ?))*/i
]
]
),
['css-kw']
)
PR.registerLangHandler(
PR.createSimpleLexer([], [[PR.PR_STRING, /^[^\)\"\']+/]]),
['css-str']
)