var dp = { sh: { Toolbar: {}, Utils: {}, RegexLib: {}, Brushes: {}, Strings: { AboutDialog: "About...

dp.SyntaxHighlighter

Version: {V}

http://www.dreamprojections.com/syntaxhighlighter

©2004-2007 Alex Gorbatchev.
" }, 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); } };