db.sh

阅读更多
js 代码
 
  1. /** 
  2.  * Code Syntax Highlighter. 
  3.  * Version 1.3.0 
  4.  * Copyright (C) 2004 Alex Gorbatchev. 
  5.  * http://www.dreamprojections.com/syntaxhighlighter/ 
  6.  *  
  7.  * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General  
  8.  * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option)  
  9.  * any later version. 
  10.  * 
  11.  * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied  
  12.  * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more  
  13.  * details. 
  14.  * 
  15.  * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to  
  16.  * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA  
  17.  */  
  18.   
  19. //  
  20. // create namespaces  
  21. //  
  22. var dp = {  
  23.     sh :  
  24.     {  
  25.         Toolbar : {},  
  26.         Utils   : {},  
  27.         RegexLib: {},  
  28.         Brushes : {},  
  29.         Strings : {},  
  30.         Version : '1.4.1'  
  31.     }  
  32. };  
  33.   
  34. dp.sh.Strings = {  
  35.     AboutDialog : 'About...class="dp-about">"0">class="copy">class="title">dp.SyntaxHighlighter
class="para">Version: {V}

"http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter

©2004-2005 Alex Gorbatchev. All right reserved.class="footer">"button" class="close" value="OK" onClick="window.close()"/>'  
  • };  
  •   
  • dp.SyntaxHighlighter = dp.sh;  
  •   
  • //  
  • // Toolbar functions  
  • //  
  •   
  • dp.sh.Toolbar.Commands = {  
  •     ExpandSource: {  
  •         label: '+ expand source',  
  •         check: function(highlighter) { return highlighter.collapse; },  
  •         func: function(sender, highlighter)  
  •         {  
  •             sender.parentNode.removeChild(sender);  
  •             highlighter.div.className = highlighter.div.className.replace('collapsed', '');  
  •         }  
  •     },  
  •       
  •     // opens a new windows and puts the original unformatted source code inside.  
  •     ViewSource: {  
  •         label: 'view plain',  
  •         func: function(sender, highlighter)  
  •         {  
  •             var code = highlighter.originalCode.replace(/
  •             var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');  
  •             wnd.document.write('"width:99%;height:99%">' + code + '');  
  •             wnd.document.close();  
  •         }  
  •     },  
  •       
  •     // copies the original source code in to the clipboard (IE only)  
  •     CopyToClipboard: {  
  •         label: 'copy to clipboard',  
  •         check: function() { return window.clipboardData != null; },  
  •         func: function(sender, highlighter)  
  •         {  
  •             window.clipboardData.setData('text', highlighter.originalCode);  
  •             alert('The code is in your clipboard now');  
  •         }  
  •     },  
  •       
  •     // creates an invisible iframe, puts the original source code inside and prints it  
  •     PrintSource: {  
  •         label: 'print',  
  •         func: function(sender, highlighter)  
  •         {  
  •             var iframe = document.createElement('IFRAME');  
  •             var doc = null;  
  •   
  •             // this hides the iframe  
  •             iframe.style.cssText = 'position:absolute;width:0px;height:0px;left:-500px;top:-500px;';  
  •               
  •             document.body.appendChild(iframe);  
  •             doc = iframe.contentWindow.document;  
  •   
  •             dp.sh.Utils.CopyStyles(doc, window.document);  
  •             doc.write('class="' + highlighter.div.className.replace('collapsed', '') + ' printing">' + highlighter.div.innerHTML + '
  • ');  
  •             doc.close();  
  •   
  •             iframe.contentWindow.focus();  
  •             iframe.contentWindow.print();  
  •               
  •             alert('Printing...');  
  •               
  •             document.body.removeChild(iframe);  
  •         }  
  •     },  
  •       
  •     About: {  
  •         label: '?',  
  •         func: function(highlighter)  
  •         {  
  •             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();  
  •         }  
  •     }  
  • };  
  •   
  • // creates a  with all toolbar links  
  • dp.sh.Toolbar.Create = function(highlighter)  
  • {  
  •     var div = document.createElement('DIV');  
  •       
  •     div.className = 'tools';  
  •       
  •     for(var name in dp.sh.Toolbar.Commands)  
  •     {  
  •         var cmd = dp.sh.Toolbar.Commands[name];  
  •           
  •         if(cmd.check != null && !cmd.check(highlighter))  
  •             continue;  
  •           
  •         div.innerHTML += '"#" onclick="dp.sh.Toolbar.Command(\'' + name + '\',this);return false;">' + cmd.label + '';  
  •     }  
  •       
  •     return div;  
  • }  
  •   
  • // executes toolbar command by name  
  • dp.sh.Toolbar.Command = function(name, sender)  
  • {  
  •     var n = sender;  
  •       
  •     while(n != null && n.className.indexOf('dp-highlighter') == -1)  
  •         n = n.parentNode;  
  •       
  •     if(n != null)  
  •         dp.sh.Toolbar.Commands[name].func(sender, n.highlighter);  
  • }  
  •   
  • // copies all  from 'target' window to 'dest'  
  • dp.sh.Utils.CopyStyles = function(destDoc, sourceDoc)  
  • {  
  •     var links = sourceDoc.getElementsByTagName('link');  
  •   
  •     for(var i = 0; i < links.length; i++)  
  •         if(links[i].rel.toLowerCase() == 'stylesheet')  
  •             destDoc.write('"text/css" rel="stylesheet" href="' + links[i].href + '">');  
  • }  
  •   
  • //  
  • // Common reusable regular expressions  
  • //  
  • 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') 
  • }; 
  •  
  • // 
  • // Match object 
  • // 
  • dp.sh.Match = function(value, index, css) 
  • { 
  •     this.value = value; 
  •     this.index = index; 
  •     this.length = value.length; 
  •     this.css = css; 
  • } 
  •  
  • // 
  • // Highlighter object 
  • // 
  • dp.sh.Highlighter = function() 
  • { 
  •     this.noGutter = false; 
  •     this.addControls = true; 
  •     this.collapse = false; 
  •     this.tabsToSpaces = true; 
  •     this.wrapColumn = 80; 
  •     this.showColumns = true; 
  • } 
  •  
  • // static callback for the match sorting 
  • dp.sh.Highlighter.SortCallback = function(m1, m2) 
  • { 
  •     // sort matches by index first 
  •     if(m1.index < m2.index) 
  •         return -1; 
  •     else if(m1.index > m2.index) 
  •         return 1; 
  •     else 
  •     { 
  •         // if index is the same, sort by length 
  •         if(m1.length < m2.length) 
  •             return -1; 
  •         else if(m1.length > m2.length) 
  •             return 1; 
  •     } 
  •     return 0; 
  • } 
  •  
  • dp.sh.Highlighter.prototype.CreateElement = function(name) 
  • { 
  •     var result = document.createElement(name); 
  •     result.highlighter = this; 
  •     return result; 
  • } 
  •  
  • // gets a list of all matches for a given regular expression 
  • dp.sh.Highlighter.prototype.GetMatches = function(regex, css) 
  • { 
  •     var index = 0; 
  •     var match = null; 
  •  
  •     while((match = regex.exec(this.code)) != null) 
  •         this.matches[this.matches.length] = new dp.sh.Match(match[0], match.index, css); 
  • } 
  •  
  • dp.sh.Highlighter.prototype.AddBit = function(str, css) 
  • { 
  •     if(str == null || str.length == 0) 
  •         return; 
  •  
  •     var span = this.CreateElement('SPAN'); 
  •      
  •     str = str.replace(/&/g, '&'); 
  •     str = str.replace(/ /g, ' '); 
  •     str = str.replace(/ 
  •     str = str.replace(/\n/gm, ' 
    ');
     
  •  
  •     // when adding a piece of code, check to see if it has line breaks in it  
  •     // and if it does, wrap individual line breaks with span tags 
  •     if(css != null) 
  •     { 
  •         var regex = new RegExp('
    ', 'gi');
     
  •          
  •         if(regex.test(str)) 
  •         { 
  •             var lines = str.split(' 
    ');
     
  •              
  •             str = ''; 
  •              
  •             for(var i = 0; i < lines.length; i++) 
  •             { 
  •                 span = this.CreateElement('SPAN'); 
  •                 span.className = css; 
  •                 span.innerHTML = lines[i]; 
  •                  
  •                 this.div.appendChild(span); 
  •                  
  •                 // don't add a 
     for the last line
     
  •                 if(i + 1 < lines.length) 
  •                     this.div.appendChild(this.CreateElement('BR')); 
  •             } 
  •         } 
  •         else 
  •         { 
  •             span.className = css; 
  •             span.innerHTML = str; 
  •             this.div.appendChild(span); 
  •         } 
  •     } 
  •     else 
  •     { 
  •         span.innerHTML = str; 
  •         this.div.appendChild(span); 
  •     } 
  • } 
  •  
  • // checks if one match is inside any other match 
  • dp.sh.Highlighter.prototype.IsInside = function(match) 
  • { 
  •     if(match == null || match.length == 0) 
  •         return false; 
  •      
  •     for(var i = 0; i < this.matches.length; i++) 
  •     { 
  •         var c = this.matches[i]; 
  •          
  •         if(c == null) 
  •             continue; 
  •  
  •         if((match.index > c.index) && (match.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(code) 
  • { 
  •     var lines   = code.split('\n'); 
  •     var result  = ''; 
  •     var tabSize = 4; 
  •     var tab     = '\t'; 
  •  
  •     // This function inserts specified amount of spaces in the string 
  •     // where a tab is while removing that given tab.  
  •     function InsertSpaces(line, pos, count) 
  •     { 
  •         var left    = line.substr(0, pos); 
  •         var right   = line.substr(pos + 1, line.length);    // pos + 1 will get rid of the tab 
  •         var spaces  = ''; 
  •          
  •         for(var i = 0; i < count; i++) 
  •             spaces += ' '; 
  •          
  •         return left + spaces + right; 
  •     } 
  •  
  •     // This function process one line for 'smart tabs' 
  •     function ProcessLine(line, tabSize) 
  •     { 
  •         if(line.indexOf(tab) == -1) 
  •             return line; 
  •  
  •         var pos = 0; 
  •  
  •         while((pos = line.indexOf(tab)) != -1) 
  •         { 
  •             // This is pretty much all there is to the 'smart tabs' logic. 
  •             // Based on the position within the line and size of a tab,  
  •             // calculate the amount of spaces we need to insert. 
  •             var spaces = tabSize - pos % tabSize; 
  •              
  •             line = InsertSpaces(line, pos, spaces); 
  •         } 
  •          
  •         return line; 
  •     } 
  •  
  •     // Go through all the lines and do the 'smart tabs' magic. 
  •     for(var i = 0; i < lines.length; i++) 
  •         result += ProcessLine(lines[i], tabSize) + '\n'; 
  •      
  •     return result; 
  • } 
  •  
  • dp.sh.Highlighter.prototype.SwitchToList = function() 
  • { 
  •     // thanks to Lachlan Donald from SitePoint.com for this 
     tag fix.
     
  •     var html = this.div.innerHTML.replace(/<(br)\/?>/gi, '\n'); 
  •     var lines = html.split('\n'); 
  •      
  •     if(this.addControls == true) 
  •         this.bar.appendChild(dp.sh.Toolbar.Create(this)); 
  •  
  •     // add columns ruler 
  •     if(this.showColumns) 
  •     { 
  •         var div = this.CreateElement('div'); 
  •         var columns = this.CreateElement('div'); 
  •         var showEvery = 10; 
  •         var i = 1; 
  •          
  •         while(i <= 150) 
  •         { 
  •             if(i % showEvery == 0) 
  •             { 
  •                 div.innerHTML += i; 
  •                 i += (i + '').length; 
  •             } 
  •             else 
  •             { 
  •                 div.innerHTML += '·'; 
  •                 i++; 
  •             } 
  •         } 
  •          
  •         columns.className = 'columns'; 
  •         columns.appendChild(div); 
  •         this.bar.appendChild(columns); 
  •     } 
  •  
  •     for(var i = 0, lineIndex = this.firstLine; i < lines.length - 1; i++, lineIndex++) 
  •     { 
  •         var li = this.CreateElement('LI'); 
  •         var span = this.CreateElement('SPAN'); 
  •          
  •         // uses .line1 and .line2 css styles for alternating lines 
  •         li.className = (i % 2 == 0) ? 'alt' : ''; 
  •         span.innerHTML = lines[i] + ' '; 
  •  
  •         li.appendChild(span); 
  •         this.ol.appendChild(li); 
  •     } 
  •      
  •     this.div.innerHTML  = ''; 
  • } 
  •  
  • dp.sh.Highlighter.prototype.Highlight = function(code) 
  • { 
  •     function Trim(str) 
  •     { 
  •         return str.replace(/^\s*(.*?)[\s\n]*$/g, '$1'); 
  •     } 
  •      
  •     function Chop(str) 
  •     { 
  •         return str.replace(/\n*$/, '').replace(/^\n*/, ''); 
  •     } 
  •  
  •     function Unindent(str) 
  •     { 
  •         var lines = str.split('\n'); 
  •         var indents = new Array(); 
  •         var regex = new RegExp('^\\s*', 'g'); 
  •         var min = 1000; 
  •  
  •         // go through every line and check for common number of indents 
  •         for(var i = 0; i < lines.length && min > 0; i++) 
  •         { 
  •             if(Trim(lines[i]).length == 0) 
  •                 continue; 
  •                  
  •             var matches = regex.exec(lines[i]); 
  •  
  •             if(matches != null && matches.length > 0) 
  •                 min = Math.min(matches[0].length, min); 
  •         } 
  •  
  •         // trim minimum common number of white space from the begining of every line 
  •         if(min > 0) 
  •             for(var i = 0; i < lines.length; i++) 
  •                 lines[i] = lines[i].substr(min); 
  •  
  •         return lines.join('\n'); 
  •     } 
  •      
  •     // This function returns a portions of the string from pos1 to pos2 inclusive 
  •     function Copy(string, pos1, pos2) 
  •     { 
  •         return string.substr(pos1, pos2 - pos1); 
  •     } 
  •  
  •     var pos = 0; 
  •      
  •     this.originalCode = code; 
  • &nb
  • 你可能感兴趣的:(CSS,prototype,C,C++,C#)