Created
July 8, 2020 07:43
-
-
Save bulkan/52fc8c575d439f0583f9481cbb1d8aa4 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* SyntaxHighlighter | |
* http://alexgorbatchev.com/SyntaxHighlighter | |
* | |
* SyntaxHighlighter is donationware. If you are using it, please donate. | |
* http://alexgorbatchev.com/SyntaxHighlighter/donate.html | |
* | |
* @version | |
* 3.0.83 (July 02 2010) | |
* | |
* @copyright | |
* Copyright (C) 2004-2010 Alex Gorbatchev. | |
* | |
* @license | |
* Dual licensed under the MIT and GPL licenses. | |
*/ | |
var XRegExp; | |
if (XRegExp) throw Error("can't load XRegExp twice in the same frame"); | |
(function() { | |
function r(f, e) { | |
if (!XRegExp.isRegExp(f)) throw TypeError("type RegExp expected"); | |
var a = f._xregexp; | |
f = XRegExp(f.source, t(f) + (e || "")); | |
if (a) f._xregexp = { | |
source: a.source, | |
captureNames: a.captureNames ? a.captureNames.slice(0) : null | |
}; | |
return f | |
} | |
function t(f) { | |
return (f.global ? "g" : "") + (f.ignoreCase ? "i" : "") + (f.multiline ? "m" : "") + (f.extended ? "x" : "") + (f.sticky ? "y" : "") | |
} | |
function B(f, e, a, b) { | |
var c = u.length, | |
d, h, g; | |
v = true; | |
try { | |
for (; c--;) { | |
g = u[c]; | |
if (a & g.scope && (!g.trigger || g.trigger.call(b))) { | |
g.pattern.lastIndex = e; | |
if ((h = g.pattern.exec(f)) && h.index === e) { | |
d = { | |
output: g.handler.call(b, h, a), | |
match: h | |
}; | |
break | |
} | |
} | |
} | |
} catch (i) { | |
throw i | |
} finally { | |
v = false | |
} | |
return d | |
} | |
function p(f, e, a) { | |
if (Array.prototype.indexOf) return f.indexOf(e, a); | |
for (a = a || 0; a < f.length; a++) | |
if (f[a] === e) return a; | |
return -1 | |
} | |
XRegExp = function(f, e) { | |
var a = [], | |
b = XRegExp.OUTSIDE_CLASS, | |
c = 0, | |
d, h; | |
if (XRegExp.isRegExp(f)) { | |
if (e !== undefined) throw TypeError("can't supply flags when constructing one RegExp from another"); | |
return r(f) | |
} | |
if (v) throw Error("can't call the XRegExp constructor within token definition functions"); | |
e = e || ""; | |
for (d = { | |
hasNamedCapture: false, | |
captureNames: [], | |
hasFlag: function(g) { | |
return e.indexOf(g) > -1 | |
}, | |
setFlag: function(g) { | |
e += g | |
} | |
}; c < f.length;) | |
if (h = B(f, c, b, d)) { | |
a.push(h.output); | |
c += h.match[0].length || 1 | |
} else if (h = n.exec.call(z[b], f.slice(c))) { | |
a.push(h[0]); | |
c += h[0].length | |
} else { | |
h = f.charAt(c); | |
if (h === "[") b = XRegExp.INSIDE_CLASS; | |
else if (h === "]") b = XRegExp.OUTSIDE_CLASS; | |
a.push(h); | |
c++ | |
} | |
a = RegExp(a.join(""), n.replace.call(e, w, "")); | |
a._xregexp = { | |
source: f, | |
captureNames: d.hasNamedCapture ? d.captureNames : null | |
}; | |
return a | |
}; | |
XRegExp.version = "1.5.0"; | |
XRegExp.INSIDE_CLASS = 1; | |
XRegExp.OUTSIDE_CLASS = 2; | |
var C = /\$(?:(\d\d?|[$&`'])|{([$\w]+)})/g, | |
w = /[^gimy]+|([\s\S])(?=[\s\S]*\1)/g, | |
A = /^(?:[?*+]|{\d+(?:,\d*)?})\??/, | |
v = false, | |
u = [], | |
n = { | |
exec: RegExp.prototype.exec, | |
test: RegExp.prototype.test, | |
match: String.prototype.match, | |
replace: String.prototype.replace, | |
split: String.prototype.split | |
}, | |
x = n.exec.call(/()??/, "")[1] === undefined, | |
D = function() { | |
var f = /^/g; | |
n.test.call(f, ""); | |
return !f.lastIndex | |
}(), | |
y = function() { | |
var f = /x/g; | |
n.replace.call("x", f, ""); | |
return !f.lastIndex | |
}(), | |
E = RegExp.prototype.sticky !== undefined, | |
z = {}; | |
z[XRegExp.INSIDE_CLASS] = /^(?:\\(?:[0-3][0-7]{0,2}|[4-7][0-7]?|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S]))/; | |
z[XRegExp.OUTSIDE_CLASS] = /^(?:\\(?:0(?:[0-3][0-7]{0,2}|[4-7][0-7]?)?|[1-9]\d*|x[\dA-Fa-f]{2}|u[\dA-Fa-f]{4}|c[A-Za-z]|[\s\S])|\(\?[:=!]|[?*+]\?|{\d+(?:,\d*)?}\??)/; | |
XRegExp.addToken = function(f, e, a, b) { | |
u.push({ | |
pattern: r(f, "g" + (E ? "y" : "")), | |
handler: e, | |
scope: a || XRegExp.OUTSIDE_CLASS, | |
trigger: b || null | |
}) | |
}; | |
XRegExp.cache = function(f, e) { | |
var a = f + "/" + (e || ""); | |
return XRegExp.cache[a] || (XRegExp.cache[a] = XRegExp(f, e)) | |
}; | |
XRegExp.copyAsGlobal = function(f) { | |
return r(f, "g") | |
}; | |
XRegExp.escape = function(f) { | |
return f.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&") | |
}; | |
XRegExp.execAt = function(f, e, a, b) { | |
e = r(e, "g" + (b && E ? "y" : "")); | |
e.lastIndex = a = a || 0; | |
f = e.exec(f); | |
return b ? f && f.index === a ? f : null : f | |
}; | |
XRegExp.freezeTokens = function() { | |
XRegExp.addToken = function() { | |
throw Error("can't run addToken after freezeTokens") | |
} | |
}; | |
XRegExp.isRegExp = function(f) { | |
return Object.prototype.toString.call(f) === "[object RegExp]" | |
}; | |
XRegExp.iterate = function(f, e, a, b) { | |
for (var c = r(e, "g"), d = -1, h; h = c.exec(f);) { | |
a.call(b, h, ++d, f, c); | |
c.lastIndex === h.index && c.lastIndex++ | |
} | |
if (e.global) e.lastIndex = 0 | |
}; | |
XRegExp.matchChain = function(f, e) { | |
return function a(b, c) { | |
var d = e[c].regex ? e[c] : { | |
regex: e[c] | |
}, | |
h = r(d.regex, "g"), | |
g = [], | |
i; | |
for (i = 0; i < b.length; i++) XRegExp.iterate(b[i], h, function(k) { | |
g.push(d.backref ? k[d.backref] || "" : k[0]) | |
}); | |
return c === e.length - 1 || !g.length ? g : a(g, c + 1) | |
}([f], 0) | |
}; | |
RegExp.prototype.apply = function(f, e) { | |
return this.exec(e[0]) | |
}; | |
RegExp.prototype.call = function(f, e) { | |
return this.exec(e) | |
}; | |
RegExp.prototype.exec = function(f) { | |
var e = n.exec.apply(this, arguments), | |
a; | |
if (e) { | |
if (!x && e.length > 1 && p(e, "") > -1) { | |
a = RegExp(this.source, n.replace.call(t(this), "g", "")); | |
n.replace.call(f.slice(e.index), a, function() { | |
for (var c = 1; c < arguments.length - 2; c++) | |
if (arguments[c] === undefined) e[c] = undefined | |
}) | |
} | |
if (this._xregexp && this._xregexp.captureNames) | |
for (var b = 1; b < e.length; b++) | |
if (a = this._xregexp.captureNames[b - 1]) e[a] = e[b]; | |
!D && this.global && !e[0].length && this.lastIndex > e.index && this.lastIndex-- | |
} | |
return e | |
}; | |
if (!D) RegExp.prototype.test = function(f) { | |
(f = n.exec.call(this, f)) && this.global && !f[0].length && this.lastIndex > f.index && this.lastIndex--; | |
return !!f | |
}; | |
String.prototype.match = function(f) { | |
XRegExp.isRegExp(f) || (f = RegExp(f)); | |
if (f.global) { | |
var e = n.match.apply(this, arguments); | |
f.lastIndex = 0; | |
return e | |
} | |
return f.exec(this) | |
}; | |
String.prototype.replace = function(f, e) { | |
var a = XRegExp.isRegExp(f), | |
b, c; | |
if (a && typeof e.valueOf() === "string" && e.indexOf("${") === -1 && y) return n.replace.apply(this, arguments); | |
if (a) { | |
if (f._xregexp) b = f._xregexp.captureNames | |
} else f += ""; | |
if (typeof e === "function") c = n.replace.call(this, f, function() { | |
if (b) { | |
arguments[0] = new String(arguments[0]); | |
for (var d = 0; d < b.length; d++) | |
if (b[d]) arguments[0][b[d]] = arguments[d + 1] | |
} | |
if (a && f.global) f.lastIndex = arguments[arguments.length - 2] + arguments[0].length; | |
return e.apply(null, arguments) | |
}); | |
else { | |
c = this + ""; | |
c = n.replace.call(c, f, function() { | |
var d = arguments; | |
return n.replace.call(e, C, function(h, g, i) { | |
if (g) switch (g) { | |
case "$": | |
return "$"; | |
case "&": | |
return d[0]; | |
case "`": | |
return d[d.length - 1].slice(0, d[d.length - 2]); | |
case "'": | |
return d[d.length - 1].slice(d[d.length - 2] + d[0].length); | |
default: | |
i = ""; | |
g = +g; | |
if (!g) return h; | |
for (; g > d.length - 3;) { | |
i = String.prototype.slice.call(g, -1) + i; | |
g = Math.floor(g / 10) | |
} | |
return (g ? d[g] || "" : "$") + i | |
} else { | |
g = +i; | |
if (g <= d.length - 3) return d[g]; | |
g = b ? p(b, i) : -1; | |
return g > -1 ? d[g + 1] : h | |
} | |
}) | |
}) | |
} | |
if (a && f.global) f.lastIndex = 0; | |
return c | |
}; | |
String.prototype.split = function(f, e) { | |
if (!XRegExp.isRegExp(f)) return n.split.apply(this, arguments); | |
var a = this + "", | |
b = [], | |
c = 0, | |
d, h; | |
if (e === undefined || +e < 0) e = Infinity; | |
else { | |
e = Math.floor(+e); | |
if (!e) return [] | |
} | |
for (f = XRegExp.copyAsGlobal(f); d = f.exec(a);) { | |
if (f.lastIndex > c) { | |
b.push(a.slice(c, d.index)); | |
d.length > 1 && d.index < a.length && Array.prototype.push.apply(b, d.slice(1)); | |
h = d[0].length; | |
c = f.lastIndex; | |
if (b.length >= e) break | |
} | |
f.lastIndex === d.index && f.lastIndex++ | |
} | |
if (c === a.length) { | |
if (!n.test.call(f, "") || h) b.push("") | |
} else b.push(a.slice(c)); | |
return b.length > e ? b.slice(0, e) : b | |
}; | |
XRegExp.addToken(/\(\?#[^)]*\)/, function(f) { | |
return n.test.call(A, f.input.slice(f.index + f[0].length)) ? "" : "(?:)" | |
}); | |
XRegExp.addToken(/\((?!\?)/, function() { | |
this.captureNames.push(null); | |
return "(" | |
}); | |
XRegExp.addToken(/\(\?<([$\w]+)>/, function(f) { | |
this.captureNames.push(f[1]); | |
this.hasNamedCapture = true; | |
return "(" | |
}); | |
XRegExp.addToken(/\\k<([\w$]+)>/, function(f) { | |
var e = p(this.captureNames, f[1]); | |
return e > -1 ? "\\" + (e + 1) + (isNaN(f.input.charAt(f.index + f[0].length)) ? "" : "(?:)") : f[0] | |
}); | |
XRegExp.addToken(/\[\^?]/, function(f) { | |
return f[0] === "[]" ? "\\b\\B" : "[\\s\\S]" | |
}); | |
XRegExp.addToken(/^\(\?([imsx]+)\)/, function(f) { | |
this.setFlag(f[1]); | |
return "" | |
}); | |
XRegExp.addToken(/(?:\s+|#.*)+/, function(f) { | |
return n.test.call(A, f.input.slice(f.index + f[0].length)) ? "" : "(?:)" | |
}, XRegExp.OUTSIDE_CLASS, function() { | |
return this.hasFlag("x") | |
}); | |
XRegExp.addToken(/\./, function() { | |
return "[\\s\\S]" | |
}, XRegExp.OUTSIDE_CLASS, function() { | |
return this.hasFlag("s") | |
}) | |
})(); | |
typeof exports != "undefined" && (exports.XRegExp = XRegExp); | |
var SyntaxHighlighter = function() { | |
function r(a, b) { | |
a.className.indexOf(b) != -1 || (a.className += " " + b) | |
} | |
function t(a) { | |
return a.indexOf("highlighter_") == 0 ? a : "highlighter_" + a | |
} | |
function B(a) { | |
return e.vars.highlighters[t(a)] | |
} | |
function p(a, b, c) { | |
if (a == null) return null; | |
var d = c != true ? a.childNodes : [a.parentNode], | |
h = { | |
"#": "id", | |
".": "className" | |
} [b.substr(0, 1)] || "nodeName", | |
g, i; | |
g = h != "nodeName" ? b.substr(1) : b.toUpperCase(); | |
if ((a[h] || "").indexOf(g) != -1) return a; | |
for (a = 0; d && a < d.length && i == null; a++) i = p(d[a], b, c); | |
return i | |
} | |
function C(a, b) { | |
var c = {}, | |
d; | |
for (d in a) c[d] = a[d]; | |
for (d in b) c[d] = b[d]; | |
return c | |
} | |
function w(a, b, c, d) { | |
function h(g) { | |
g = g || window.event; | |
if (!g.target) { | |
g.target = g.srcElement; | |
g.preventDefault = function() { | |
this.returnValue = false | |
} | |
} | |
c.call(d || window, g) | |
} | |
a.attachEvent ? a.attachEvent("on" + b, h) : a.addEventListener(b, h, false) | |
} | |
function A(a, b) { | |
var c = e.vars.discoveredBrushes, | |
d = null; | |
if (c == null) { | |
c = {}; | |
for (var h in e.brushes) { | |
var g = e.brushes[h]; | |
d = g.aliases; | |
if (d != null) { | |
g.brushName = h.toLowerCase(); | |
for (g = 0; g < d.length; g++) c[d[g]] = h | |
} | |
} | |
e.vars.discoveredBrushes = c | |
} | |
d = e.brushes[c[a]]; | |
d == null && b != false && window.alert(e.config.strings.alert + (e.config.strings.noBrush + a)); | |
return d | |
} | |
function v(a, b) { | |
for (var c = a.split("\n"), d = 0; d < c.length; d++) c[d] = b(c[d], d); | |
return c.join("\n") | |
} | |
function u(a, b) { | |
if (a == null || a.length == 0 || a == "\n") return a; | |
a = a.replace(/</g, "<"); | |
a = a.replace(/ {2,}/g, function(c) { | |
for (var d = "", h = 0; h < c.length - 1; h++) d += e.config.space; | |
return d + " " | |
}); | |
if (b != null) a = v(a, function(c) { | |
if (c.length == 0) return ""; | |
var d = ""; | |
c = c.replace(/^( | )+/, function(h) { | |
d = h; | |
return "" | |
}); | |
if (c.length == 0) return d; | |
return d + '<code class="' + b + '">' + c + "</code>" | |
}); | |
return a | |
} | |
function n(a, b) { | |
a.split("\n"); | |
for (var c = "", d = 0; d < 50; d++) c += " "; | |
return a = v(a, function(h) { | |
if (h.indexOf("\t") == -1) return h; | |
for (var g = 0; | |
(g = h.indexOf("\t")) != -1;) h = h.substr(0, g) + c.substr(0, b - g % b) + h.substr(g + 1, h.length); | |
return h | |
}) | |
} | |
function x(a) { | |
return a.replace(/^\s+|\s+$/g, "") | |
} | |
function D(a, b) { | |
if (a.index < b.index) return -1; | |
else if (a.index > b.index) return 1; | |
else if (a.length < b.length) return -1; | |
else if (a.length > b.length) return 1; | |
return 0 | |
} | |
function y(a, b) { | |
function c(k) { | |
return k[0] | |
} | |
for (var d = null, h = [], g = b.func ? b.func : c; | |
(d = b.regex.exec(a)) != null;) { | |
var i = g(d, b); | |
if (typeof i == "string") i = [new e.Match(i, d.index, b.css)]; | |
h = h.concat(i) | |
} | |
return h | |
} | |
function E(a) { | |
var b = /(.*)((>|<).*)/; | |
return a.replace(e.regexLib.url, function(c) { | |
var d = "", | |
h = null; | |
if (h = b.exec(c)) { | |
c = h[1]; | |
d = h[2] | |
} | |
return '<a href="' + c + '">' + c + "</a>" + d | |
}) | |
} | |
function z() { | |
for (var a = document.getElementsByTagName("script"), b = [], c = 0; c < a.length; c++) a[c].type == "syntaxhighlighter" && b.push(a[c]); | |
return b | |
} | |
function f(a) { | |
a = a.target; | |
var b = p(a, ".syntaxhighlighter", true); | |
a = p(a, ".container", true); | |
var c = document.createElement("textarea"); | |
if (!(!a || !b || p(a, "textarea"))) { | |
B(b.id); | |
r(b, "source"); | |
for (var d = a.childNodes, h = [], g = 0; g < d.length; g++) h.push(d[g].innerText || d[g].textContent); | |
h = h.join("\r"); | |
c.appendChild(document.createTextNode(h)); | |
a.appendChild(c); | |
c.focus(); | |
c.select(); | |
w(c, "blur", function() { | |
c.parentNode.removeChild(c); | |
b.className = b.className.replace("source", "") | |
}) | |
} | |
} | |
if (typeof require != "undefined" && typeof XRegExp == "undefined") XRegExp = require("XRegExp").XRegExp; | |
var e = { | |
defaults: { | |
"class-name": "", | |
"first-line": 1, | |
"pad-line-numbers": false, | |
highlight: null, | |
title: null, | |
"smart-tabs": true, | |
"tab-size": 4, | |
gutter: true, | |
toolbar: true, | |
"quick-code": true, | |
collapse: false, | |
"auto-links": true, | |
light: false, | |
"html-script": false | |
}, | |
config: { | |
space: " ", | |
useScriptTags: true, | |
bloggerMode: false, | |
stripBrs: false, | |
tagName: "pre", | |
strings: { | |
expandSource: "expand source", | |
help: "?", | |
alert: "SyntaxHighlighter\n\n", | |
noBrush: "Can't find brush for: ", | |
brushNotHtmlScript: "Brush wasn't configured for html-script option: ", | |
aboutDialog: '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>About SyntaxHighlighter</title></head><body style="font-family:Geneva,Arial,Helvetica,sans-serif;background-color:#fff;color:#000;font-size:1em;text-align:center;"><div style="text-align:center;margin-top:1.5em;"><div style="font-size:xx-large;">SyntaxHighlighter</div><div style="font-size:.75em;margin-bottom:3em;"><div>version 3.0.83 (July 02 2010)</div><div><a href="http://alexgorbatchev.com/SyntaxHighlighter" target="_blank" style="color:#005896">http://alexgorbatchev.com/SyntaxHighlighter</a></div><div>JavaScript code syntax highlighter.</div><div>Copyright 2004-2010 Alex Gorbatchev.</div></div><div>If you like this script, please <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=2930402" style="color:#005896">donate</a> to <br/>keep development active!</div></div></body></html>' | |
} | |
}, | |
vars: { | |
discoveredBrushes: null, | |
highlighters: {} | |
}, | |
brushes: {}, | |
regexLib: { | |
multiLineCComments: /\/\*[\s\S]*?\*\//gm, | |
singleLineCComments: /\/\/.*$/gm, | |
singleLinePerlComments: /#.*$/gm, | |
doubleQuotedString: /"([^\\"\n]|\\.)*"/g, | |
singleQuotedString: /'([^\\'\n]|\\.)*'/g, | |
multiLineDoubleQuotedString: new XRegExp('"([^\\\\"]|\\\\.)*"', "gs"), | |
multiLineSingleQuotedString: new XRegExp("'([^\\\\']|\\\\.)*'", "gs"), | |
xmlComments: /(<|<)!--[\s\S]*?--(>|>)/gm, | |
url: /\w+:\/\/[\w-.\/?%&=:@;]*/g, | |
phpScriptTags: { | |
left: /(<|<)\?=?/g, | |
right: /\?(>|>)/g | |
}, | |
aspScriptTags: { | |
left: /(<|<)%=?/g, | |
right: /%(>|>)/g | |
}, | |
scriptScriptTags: { | |
left: /(<|<)\s*script.*?(>|>)/gi, | |
right: /(<|<)\/\s*script\s*(>|>)/gi | |
} | |
}, | |
toolbar: { | |
getHtml: function(a) { | |
function b(i, k) { | |
return e.toolbar.getButtonHtml(i, k, e.config.strings[k]) | |
} | |
for (var c = '<div class="toolbar">', d = e.toolbar.items, h = d.list, g = 0; g < h.length; g++) c += (d[h[g]].getHtml || b)(a, h[g]); | |
c += "</div>"; | |
return c | |
}, | |
getButtonHtml: function(a, b, c) { | |
return '<span><a href="#" class="toolbar_item command_' + b + " " + b + '">' + c + "</a></span>" | |
}, | |
handler: function(a) { | |
var b = a.target, | |
c = b.className || ""; | |
b = B(p(b, ".syntaxhighlighter", true).id); | |
var d = function(h) { | |
return (h = RegExp(h + "_(\\w+)").exec(c)) ? h[1] : null | |
}("command"); | |
b && d && e.toolbar.items[d].execute(b); | |
a.preventDefault() | |
}, | |
items: { | |
list: ["expandSource", "help"], | |
expandSource: { | |
getHtml: function(a) { | |
if (a.getParam("collapse") != true) return ""; | |
var b = a.getParam("title"); | |
return e.toolbar.getButtonHtml(a, "expandSource", b ? b : e.config.strings.expandSource) | |
}, | |
execute: function(a) { | |
a = document.getElementById(t(a.id)); | |
a.className = a.className.replace("collapsed", "") | |
} | |
}, | |
help: { | |
execute: function() { | |
var a = "scrollbars=0"; | |
a += ", left=" + (screen.width - 500) / 2 + ", top=" + (screen.height - 250) / 2 + ", width=500, height=250"; | |
a = a.replace(/^,/, ""); | |
a = window.open("", "_blank", a); | |
a.focus(); | |
var b = a.document; | |
b.write(e.config.strings.aboutDialog); | |
b.close(); | |
a.focus() | |
} | |
} | |
} | |
}, | |
findElements: function(a, b) { | |
var c; | |
if (b) c = [b]; | |
else { | |
c = document.getElementsByTagName(e.config.tagName); | |
for (var d = [], h = 0; h < c.length; h++) d.push(c[h]); | |
c = d | |
} | |
c = c; | |
d = []; | |
if (e.config.useScriptTags) c = c.concat(z()); | |
if (c.length === 0) return d; | |
for (h = 0; h < c.length; h++) { | |
for (var g = c[h], i = a, k = c[h].className, j = void 0, l = {}, m = new XRegExp("^\\[(?<values>(.*?))\\]$"), s = new XRegExp("(?<name>[\\w-]+)\\s*:\\s*(?<value>[\\w-%#]+|\\[.*?\\]|\".*?\"|'.*?')\\s*;?", "g"); | |
(j = s.exec(k)) != null;) { | |
var o = j.value.replace(/^['"]|['"]$/g, ""); | |
if (o != null && m.test(o)) { | |
o = m.exec(o); | |
o = o.values.length > 0 ? o.values.split(/\s*,\s*/) : [] | |
} | |
l[j.name] = o | |
} | |
g = { | |
target: g, | |
params: C(i, l) | |
}; | |
g.params.brush != null && d.push(g) | |
} | |
return d | |
}, | |
highlight: function(a, b) { | |
var c = this.findElements(a, b), | |
d = null, | |
h = e.config; | |
if (c.length !== 0) | |
for (var g = 0; g < c.length; g++) { | |
b = c[g]; | |
var i = b.target, | |
k = b.params, | |
j = k.brush, | |
l; | |
if (j != null) { | |
if (k["html-script"] == "true" || e.defaults["html-script"] == true) { | |
d = new e.HtmlScript(j); | |
j = "htmlscript" | |
} else if (d = A(j)) d = new d; | |
else continue; | |
l = i.innerHTML; | |
if (h.useScriptTags) { | |
l = l; | |
var m = x(l), | |
s = false; | |
if (m.indexOf("<![CDATA[") == 0) { | |
m = m.substring(9); | |
s = true | |
} | |
var o = m.length; | |
if (m.indexOf("]]\>") == o - 3) { | |
m = m.substring(0, o - 3); | |
s = true | |
} | |
l = s ? m : l | |
} | |
if ((i.title || "") != "") k.title = i.title; | |
k.brush = j; | |
d.init(k); | |
b = d.getDiv(l); | |
if ((i.id || "") != "") b.id = i.id; | |
i.parentNode.replaceChild(b, i) | |
} | |
} | |
}, | |
all: function(a) { | |
w(window, "load", function() { | |
e.highlight(a) | |
}) | |
} | |
}; | |
e.all = e.all; | |
e.highlight = e.highlight; | |
e.Match = function(a, b, c) { | |
this.value = a; | |
this.index = b; | |
this.length = a.length; | |
this.css = c; | |
this.brushName = null | |
}; | |
e.Match.prototype.toString = function() { | |
return this.value | |
}; | |
e.HtmlScript = function(a) { | |
function b(j, l) { | |
for (var m = 0; m < j.length; m++) j[m].index += l | |
} | |
var c = A(a), | |
d, h = new e.brushes.Xml, | |
g = this, | |
i = "getDiv getHtml init".split(" "); | |
if (c != null) { | |
d = new c; | |
for (var k = 0; k < i.length; k++)(function() { | |
var j = i[k]; | |
g[j] = function() { | |
return h[j].apply(h, arguments) | |
} | |
})(); | |
d.htmlScript == null ? window.alert(e.config.strings.alert + (e.config.strings.brushNotHtmlScript + a)) : h.regexList.push({ | |
regex: d.htmlScript.code, | |
func: function(j) { | |
for (var l = j.code, m = [], s = d.regexList, o = j.index + j.left.length, F = d.htmlScript, q, G = 0; G < s.length; G++) { | |
q = y(l, s[G]); | |
b(q, o); | |
m = m.concat(q) | |
} | |
if (F.left != null && j.left != null) { | |
q = y(j.left, F.left); | |
b(q, j.index); | |
m = m.concat(q) | |
} | |
if (F.right != null && j.right != null) { | |
q = y(j.right, F.right); | |
b(q, j.index + j[0].lastIndexOf(j.right)); | |
m = m.concat(q) | |
} | |
for (j = 0; j < m.length; j++) m[j].brushName = c.brushName; | |
return m | |
} | |
}) | |
} | |
}; | |
e.Highlighter = function() {}; | |
e.Highlighter.prototype = { | |
getParam: function(a, b) { | |
var c = this.params[a]; | |
c = c == null ? b : c; | |
var d = { | |
"true": true, | |
"false": false | |
} [c]; | |
return d == null ? c : d | |
}, | |
create: function(a) { | |
return document.createElement(a) | |
}, | |
findMatches: function(a, b) { | |
var c = []; | |
if (a != null) | |
for (var d = 0; d < a.length; d++) | |
if (typeof a[d] == "object") c = c.concat(y(b, a[d])); | |
return this.removeNestedMatches(c.sort(D)) | |
}, | |
removeNestedMatches: function(a) { | |
for (var b = 0; b < a.length; b++) | |
if (a[b] !== null) | |
for (var c = a[b], d = c.index + c.length, h = b + 1; h < a.length && a[b] !== null; h++) { | |
var g = a[h]; | |
if (g !== null) | |
if (g.index > d) break; | |
else if (g.index == c.index && g.length > c.length) a[b] = null; | |
else if (g.index >= c.index && g.index < d) a[h] = null | |
} | |
return a | |
}, | |
figureOutLineNumbers: function(a) { | |
var b = [], | |
c = parseInt(this.getParam("first-line")); | |
v(a, function(d, h) { | |
b.push(h + c) | |
}); | |
return b | |
}, | |
isLineHighlighted: function(a) { | |
var b = this.getParam("highlight", []); | |
if (typeof b != "object" && b.push == null) b = [b]; | |
a: { | |
a = a.toString(); | |
var c = void 0; | |
for (c = c = Math.max(c || 0, 0); c < b.length; c++) | |
if (b[c] == a) { | |
b = c; | |
break a | |
} b = -1 | |
} | |
return b != -1 | |
}, | |
getLineHtml: function(a, b, c) { | |
a = ["line", "number" + b, "index" + a, "alt" + (b % 2 == 0 ? 1 : 2).toString()]; | |
this.isLineHighlighted(b) && a.push("highlighted"); | |
b == 0 && a.push("break"); | |
return '<div class="' + a.join(" ") + '">' + c + "</div>" | |
}, | |
getLineNumbersHtml: function(a, b) { | |
var c = "", | |
d = a.split("\n").length, | |
h = parseInt(this.getParam("first-line")), | |
g = this.getParam("pad-line-numbers"); | |
if (g == true) g = (h + d - 1).toString().length; | |
else if (isNaN(g) == true) g = 0; | |
for (var i = 0; i < d; i++) { | |
var k = b ? b[i] : h + i, | |
j; | |
if (k == 0) j = e.config.space; | |
else { | |
j = g; | |
for (var l = k.toString(); l.length < j;) l = "0" + l; | |
j = l | |
} | |
a = j; | |
c += this.getLineHtml(i, k, a) | |
} | |
return c | |
}, | |
getCodeLinesHtml: function(a, b) { | |
a = x(a); | |
var c = a.split("\n"); | |
this.getParam("pad-line-numbers"); | |
var d = parseInt(this.getParam("first-line")); | |
a = ""; | |
for (var h = this.getParam("brush"), g = 0; g < c.length; g++) { | |
var i = c[g], | |
k = /^( |\s)+/.exec(i), | |
j = null, | |
l = b ? b[g] : d + g; | |
if (k != null) { | |
j = k[0].toString(); | |
i = i.substr(j.length); | |
j = j.replace(" ", e.config.space) | |
} | |
i = x(i); | |
if (i.length == 0) i = e.config.space; | |
a += this.getLineHtml(g, l, (j != null ? '<code class="' + h + ' spaces">' + j + "</code>" : "") + i) | |
} | |
return a | |
}, | |
getTitleHtml: function(a) { | |
return a ? "<caption>" + a + "</caption>" : "" | |
}, | |
getMatchesHtml: function(a, b) { | |
function c(l) { | |
return (l = l ? l.brushName || g : g) ? l + " " : "" | |
} | |
for (var d = 0, h = "", g = this.getParam("brush", ""), i = 0; i < b.length; i++) { | |
var k = b[i], | |
j; | |
if (!(k === null || k.length === 0)) { | |
j = c(k); | |
h += u(a.substr(d, k.index - d), j + "plain") + u(k.value, j + k.css); | |
d = k.index + k.length + (k.offset || 0) | |
} | |
} | |
h += u(a.substr(d), c() + "plain"); | |
return h | |
}, | |
getHtml: function(a) { | |
var b = "", | |
c = ["syntaxhighlighter"], | |
d; | |
if (this.getParam("light") == true) this.params.toolbar = this.params.gutter = false; | |
className = "syntaxhighlighter"; | |
this.getParam("collapse") == true && c.push("collapsed"); | |
if ((gutter = this.getParam("gutter")) == false) c.push("nogutter"); | |
c.push(this.getParam("class-name")); | |
c.push(this.getParam("brush")); | |
a = a.replace(/^[ ]*[\n]+|[\n]*[ ]*$/g, "").replace(/\r/g, " "); | |
b = this.getParam("tab-size"); | |
if (this.getParam("smart-tabs") == true) a = n(a, b); | |
else { | |
for (var h = "", g = 0; g < b; g++) h += " "; | |
a = a.replace(/\t/g, h) | |
} | |
a = a; | |
a: { | |
b = a = a;h = /<br\s*\/?>|<br\s*\/?>/gi; | |
if (e.config.bloggerMode == true) b = b.replace(h, "\n"); | |
if (e.config.stripBrs == true) b = b.replace(h, "");b = b.split("\n");h = /^\s*/;g = 1E3; | |
for (var i = 0; i < b.length && g > 0; i++) { | |
var k = b[i]; | |
if (x(k).length != 0) { | |
k = h.exec(k); | |
if (k == null) { | |
a = a; | |
break a | |
} | |
g = Math.min(k[0].length, g) | |
} | |
} | |
if (g > 0) | |
for (i = 0; i < b.length; i++) b[i] = b[i].substr(g);a = b.join("\n") | |
} | |
if (gutter) d = this.figureOutLineNumbers(a); | |
b = this.findMatches(this.regexList, a); | |
b = this.getMatchesHtml(a, b); | |
b = this.getCodeLinesHtml(b, d); | |
if (this.getParam("auto-links")) b = E(b); | |
typeof navigator != "undefined" && navigator.userAgent && navigator.userAgent.match(/MSIE/) && c.push("ie"); | |
return b = '<div id="' + t(this.id) + '" class="' + c.join(" ") + '">' + (this.getParam("toolbar") ? e.toolbar.getHtml(this) : "") + '<table border="0" cellpadding="0" cellspacing="0">' + this.getTitleHtml(this.getParam("title")) + "<tbody><tr>" + (gutter ? '<td class="gutter">' + this.getLineNumbersHtml(a) + "</td>" : "") + '<td class="code"><div class="container">' + b + "</div></td></tr></tbody></table></div>" | |
}, | |
getDiv: function(a) { | |
if (a === null) a = ""; | |
this.code = a; | |
var b = this.create("div"); | |
b.innerHTML = this.getHtml(a); | |
this.getParam("toolbar") && w(p(b, ".toolbar"), "click", e.toolbar.handler); | |
this.getParam("quick-code") && w(p(b, ".code"), "dblclick", f); | |
return b | |
}, | |
init: function(a) { | |
this.id = "" + Math.round(Math.random() * 1E6).toString(); | |
e.vars.highlighters[t(this.id)] = this; | |
this.params = C(e.defaults, a || {}); | |
if (this.getParam("light") == true) this.params.toolbar = this.params.gutter = false | |
}, | |
getKeywords: function(a) { | |
a = a.replace(/^\s+|\s+$/g, "").replace(/\s+/g, "|"); | |
return "\\b(?:" + a + ")\\b" | |
}, | |
forHtmlScript: function(a) { | |
this.htmlScript = { | |
left: { | |
regex: a.left, | |
css: "script" | |
}, | |
right: { | |
regex: a.right, | |
css: "script" | |
}, | |
code: new XRegExp("(?<left>" + a.left.source + ")(?<code>.*?)(?<right>" + a.right.source + ")", "sgi") | |
} | |
} | |
}; | |
return e | |
}(); | |
typeof exports != "undefined" && (exports.SyntaxHighlighter = SyntaxHighlighter); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment