Skip to content

Instantly share code, notes, and snippets.

@bulkan
Created July 8, 2020 07:43
Show Gist options
  • Save bulkan/52fc8c575d439f0583f9481cbb1d8aa4 to your computer and use it in GitHub Desktop.
Save bulkan/52fc8c575d439f0583f9481cbb1d8aa4 to your computer and use it in GitHub Desktop.
/**
* 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, "&lt;");
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(/^(&nbsp;| )+/, 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 = /(.*)((&gt;|&lt;).*)/;
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: "&nbsp;",
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: /(&lt;|<)!--[\s\S]*?--(&gt;|>)/gm,
url: /\w+:\/\/[\w-.\/?%&=:@;]*/g,
phpScriptTags: {
left: /(&lt;|<)\?=?/g,
right: /\?(&gt;|>)/g
},
aspScriptTags: {
left: /(&lt;|<)%=?/g,
right: /%(&gt;|>)/g
},
scriptScriptTags: {
left: /(&lt;|<)\s*script.*?(&gt;|>)/gi,
right: /(&lt;|<)\/\s*script\s*(&gt;|>)/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 = /^(&nbsp;|\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*\/?>|&lt;br\s*\/?&gt;/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