var dp = {
sh: {
Toolbar: {},
Utils: {},
RegexLib: {},
Brushes: {},
Strings: {
AboutDialog: "
About..."
},
ClipboardSwf: null,
Version: "1.5"
}
};
dp.SyntaxHighlighter = dp.sh;
dp.sh.Toolbar.Commands = {
ExpandSource: {
label: "+ 展开代码",
check: function(_1) {
return _1.collapse;
},
func: function(_2, _3) {
_2.parentNode.removeChild(_2);
_3.div.className = _3.div.className.replace("collapsed", "");
}
},
ViewSource: {
label: "新窗口",
func: function(_4, _5) {
var _6 = _5.originalCode.replace(/" + _6 + "");
_7.document.close();
}
},
CopyToClipboard: {
label: "拷贝",
check: function() {
return window.clipboardData != null || dp.sh.ClipboardSwf != null;
},
func: function(_8, _9) {
var _a = _9.originalCode;
if (window.clipboardData) {
window.clipboardData.setData("text", _a);
} else {
if (dp.sh.ClipboardSwf != null) {
var _b = _9.flashCopier;
if (_b == null) {
_b = document.createElement("div");
_9.flashCopier = _b;
_9.div.appendChild(_b);
}
_b.innerHTML = "";
}
}
alert("现在,代码已经在你的剪贴板上");
}
},
PrintSource: {
label: "打印",
func: function(_c, _d) {
var _e = document.createElement("IFRAME");
var _f = null;
_e.style.cssText = "position:absolute;width:0px;height:0px;left:-500px;top:-500px;";
document.body.appendChild(_e);
_f = _e.contentWindow.document;
dp.sh.Utils.CopyStyles(_f, window.document);
_f.write("" + _d.div.innerHTML + "
");
_f.close();
_e.contentWindow.focus();
_e.contentWindow.print();
alert("Printing...");
document.body.removeChild(_e);
}
},
About: {
label: "?",
func: function(_10) {
var wnd = window.open("", "_blank", "dialog,width=300,height=150,scrollbars=0");
var doc = wnd.document;
dp.sh.Utils.CopyStyles(doc, window.document);
doc.write(dp.sh.Strings.AboutDialog.replace("{V}", dp.sh.Version));
doc.close();
wnd.focus();
}
}
};
dp.sh.Toolbar.Create = function(_13) {
var div = document.createElement("DIV");
div.className = "tools";
for (var _15 in dp.sh.Toolbar.Commands) {
var cmd = dp.sh.Toolbar.Commands[_15];
if (cmd.check != null && !cmd.check(_13)) {
continue;
}
div.innerHTML += "" + cmd.label + "";
}
return div;
};
dp.sh.Toolbar.Command = function(_17, _18) {
var n = _18;
while (n != null && n.className.indexOf("dp-highlighter") == -1) {
n = n.parentNode;
}
if (n != null) {
dp.sh.Toolbar.Commands[_17].func(_18, n.highlighter);
}
};
dp.sh.Utils.CopyStyles = function(_1a, _1b) {
var _1c = _1b.getElementsByTagName("link");
for (var i = 0; i < _1c.length; i++) {
if (_1c[i].rel.toLowerCase() == "stylesheet") {
_1a.write("");
}
}
};
dp.sh.RegexLib = {
MultiLineCComments: new RegExp("/\\*[\\s\\S]*?\\*/", "gm"),
SingleLineCComments: new RegExp(";.*$", "gm"),
SingleLinePerlComments: new RegExp("#.*$", "gm"),
DoubleQuotedString: new RegExp("\"(?:\\.|(\\\\\\\")|[^\\\"\"])*\"", "g"),
SingleQuotedString: new RegExp("'(?:\\.|(\\\\\\')|[^\\''])*'", "g")
};
dp.sh.Match = function(_1e, _1f, css) {
this.value = _1e;
this.index = _1f;
this.length = _1e.length;
this.css = css;
};
dp.sh.Highlighter = function() {
this.noGutter = false;
this.addControls = true;
this.collapse = false;
this.tabsToSpaces = true;
this.wrapColumn = 80;
this.showColumns = true;
};
dp.sh.Highlighter.SortCallback = function(m1, m2) {
if (m1.index < m2.index) {
return - 1;
} else {
if (m1.index > m2.index) {
return 1;
} else {
if (m1.length < m2.length) {
return - 1;
} else {
if (m1.length > m2.length) {
return 1;
}
}
}
}
return 0;
};
dp.sh.Highlighter.prototype.CreateElement = function(_23) {
var _24 = document.createElement(_23);
_24.highlighter = this;
return _24;
};
dp.sh.Highlighter.prototype.GetMatches = function(_25, css) {
var _27 = 0;
var _28 = null;
while ((_28 = _25.exec(this.code)) != null) {
this.matches[this.matches.length] = new dp.sh.Match(_28[0], _28.index, css);
}
};
dp.sh.Highlighter.prototype.AddBit = function(str, css) {
if (str == null || str.length == 0) {
return;
}
var _2b = this.CreateElement("SPAN");
str = str.replace(/ /g, " ");
str = str.replace(/");
if (css != null) {
if ((/br/gi).test(str)) {
var _2c = str.split("
");
for (var i = 0; i < _2c.length; i++) {
_2b = this.CreateElement("SPAN");
_2b.className = css;
_2b.innerHTML = _2c[i];
this.div.appendChild(_2b);
if (i + 1 < _2c.length) {
this.div.appendChild(this.CreateElement("BR"));
}
}
} else {
_2b.className = css;
_2b.innerHTML = str;
this.div.appendChild(_2b);
}
} else {
_2b.innerHTML = str;
this.div.appendChild(_2b);
}
};
dp.sh.Highlighter.prototype.IsInside = function(_2e) {
if (_2e == null || _2e.length == 0) {
return false;
}
for (var i = 0; i < this.matches.length; i++) {
var c = this.matches[i];
if (c == null) {
continue;
}
if ((_2e.index > c.index) && (_2e.index < c.index + c.length)) {
return true;
}
}
return false;
};
dp.sh.Highlighter.prototype.ProcessRegexList = function() {
for (var i = 0; i < this.regexList.length; i++) {
this.GetMatches(this.regexList[i].regex, this.regexList[i].css);
}
};
dp.sh.Highlighter.prototype.ProcessSmartTabs = function(_32) {
var _33 = _32.split("\n");
var _34 = "";
var _35 = 4;
var tab = "\t";
function InsertSpaces(_37, pos, _39) {
var _3a = _37.substr(0, pos);
var _3b = _37.substr(pos + 1, _37.length);
var _3c = "";
for (var i = 0; i < _39; i++) {
_3c += " ";
}
return _3a + _3c + _3b;
}
function ProcessLine(_3e, _3f) {
if (_3e.indexOf(tab) == -1) {
return _3e;
}
var pos = 0;
while ((pos = _3e.indexOf(tab)) != -1) {
var _41 = _3f - pos % _3f;
_3e = InsertSpaces(_3e, pos, _41);
}
return _3e;
}
for (var i = 0; i < _33.length; i++) {
_34 += ProcessLine(_33[i], _35) + "\n";
}
return _34;
};
dp.sh.Highlighter.prototype.SwitchToList = function() {
var _43 = this.div.innerHTML.replace(/<(br)\/?>/gi, "\n");
var _44 = _43.split("\n");
if (this.addControls == true) {
this.bar.appendChild(dp.sh.Toolbar.Create(this));
}
if (this.showColumns) {
var div = this.CreateElement("div");
var _46 = this.CreateElement("div");
var _47 = 10;
var i = 1;
while (i <= 150) {
if (i % _47 == 0) {
div.innerHTML += i;
i += (i + "").length;
} else {
div.innerHTML += "·";
i++;
}
}
_46.className = "columns";
_46.appendChild(div);
this.bar.appendChild(_46);
}
for (var i = 0, lineIndex = this.firstLine; i < _44.length - 1; i++, lineIndex++) {
var li = this.CreateElement("LI");
var _4b = this.CreateElement("SPAN");
li.className = (i % 2 == 0) ? "alt": "";
_4b.innerHTML = _44[i] + " ";
li.appendChild(_4b);
this.ol.appendChild(li);
}
this.div.innerHTML = "";
};
dp.sh.Highlighter.prototype.Highlight = function(_4c) {
function Trim(str) {
return str.replace(/^\s*(.*?)[\s\n]*$/g, "$1");
}
function Chop(str) {
return str.replace(/\n*$/, "").replace(/^\n*/, "");
}
function Unindent(str) {
var _50 = str.split("\n");
var _51 = new Array();
var _52 = new RegExp("^\\s*", "g");
var min = 1000;
for (var i = 0; i < _50.length && min > 0; i++) {
if (Trim(_50[i]).length == 0) {
continue;
}
var _55 = _52.exec(_50[i]);
if (_55 != null && _55.length > 0) {
min = Math.min(_55[0].length, min);
}
}
if (min > 0) {
for (var i = 0; i < _50.length; i++) {
_50[i] = _50[i].substr(min);
}
}
return _50.join("\n");
}
function Copy(_57, _58, _59) {
return _57.substr(_58, _59 - _58);
}
var pos = 0;
if (_4c == null) {
_4c = "";
}
this.originalCode = _4c;
this.code = Chop(Unindent(_4c));
this.div = this.CreateElement("DIV");
this.bar = this.CreateElement("DIV");
this.ol = this.CreateElement("OL");
this.matches = new Array();
this.div.className = "dp-highlighter";
this.div.highlighter = this;
this.bar.className = "bar";
this.ol.start = this.firstLine;
if (this.CssClass != null) {
this.ol.className = this.CssClass;
}
if (this.collapse) {
this.div.className += " collapsed";
}
if (this.noGutter) {
this.div.className += " nogutter";
}
if (this.tabsToSpaces == true) {
this.code = this.ProcessSmartTabs(this.code);
}
this.ProcessRegexList();
if (this.matches.length == 0) {
this.AddBit(this.code, null);
this.SwitchToList();
this.div.appendChild(this.ol);
return;
}
this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback);
for (var i = 0; i < this.matches.length; i++) {
if (this.IsInside(this.matches[i])) {
this.matches[i] = null;
}
}
for (var i = 0; i < this.matches.length; i++) {
var _5d = this.matches[i];
if (_5d == null || _5d.length == 0) {
continue;
}
this.AddBit(Copy(this.code, pos, _5d.index), null);
this.AddBit(_5d.value, _5d.css);
pos = _5d.index + _5d.length;
}
this.AddBit(this.code.substr(pos), null);
this.SwitchToList();
this.div.appendChild(this.bar);
this.div.appendChild(this.ol);
};
dp.sh.Highlighter.prototype.GetKeywords = function(str) {
return "\\b" + str.replace(/ /g, "\\b|\\b") + "\\b";
};
dp.sh.HighlightAll = function(_5f, _60, _61, _62, _63, _64) {
function FindValue() {
var a = arguments;
for (var i = 0; i < a.length; i++) {
if (a[i] == null) {
continue;
}
if (typeof(a[i]) == "string" && a[i] != "") {
return a[i] + "";
}
if (typeof(a[i]) == "object" && a[i].value != "") {
return a[i].value + "";
}
}
return null;
}
function IsOptionSet(_67, _68) {
for (var i = 0; i < _68.length; i++) {
if (_68[i] == _67) {
return true;
}
}
return false;
}
function GetOptionValue(_6a, _6b, _6c) {
var _6d = new RegExp("^" + _6a + "\\[(\\w+)\\]$", "gi");
var _6e = null;
for (var i = 0; i < _6b.length; i++) {
if ((_6e = _6d.exec(_6b[i])) != null) {
return _6e[1];
}
}
return _6c;
}
function FindTagsByName(_70, _71, _72) {
var _73 = document.getElementsByTagName(_72);
for (var i = 0; i < _73.length; i++) {
if (_73[i].getAttribute("name") == _71) {
_70.push(_73[i]);
}
}
}
var _75 = [];
var _76 = null;
var _77 = {};
var _78 = "innerHTML";
FindTagsByName(_75, _5f, "pre");
FindTagsByName(_75, _5f, "textarea");
if (_75.length == 0) {
return;
}
for (var _79 in dp.sh.Brushes) {
var _7a = dp.sh.Brushes[_79].Aliases;
if (_7a == null) {
continue;
}
for (var i = 0; i < _7a.length; i++) {
_77[_7a[i]] = _79;
}
}
for (var i = 0; i < _75.length; i++) {
var _7d = _75[i];
var _7e = FindValue(_7d.attributes["class"], _7d.className, _7d.attributes["language"], _7d.language);
var _7f = "";
if (_7e == null) {
continue;
}
_7e = _7e.split(":");
_7f = _7e[0].toLowerCase();
if (_77[_7f] == null) {
continue;
}
_76 = new dp.sh.Brushes[_77[_7f]]();
_7d.style.display = "none";
_76.noGutter = (_60 == null) ? IsOptionSet("nogutter", _7e) : !_60;
_76.addControls = (_61 == null) ? !IsOptionSet("nocontrols", _7e) : _61;
_76.collapse = (_62 == null) ? IsOptionSet("collapse", _7e) : _62;
_76.showColumns = (_64 == null) ? IsOptionSet("showcolumns", _7e) : _64;
if (_76.Style) {
document.write("");
}
_76.firstLine = (_63 == null) ? parseInt(GetOptionValue("firstline", _7e, 1)) : _63;
_76.Highlight(_7d[_78]);
_76.source = _7d;
_7d.parentNode.insertBefore(_76.div, _7d);
}
};