diff options
Diffstat (limited to 'usr/local/www/code-syntax-highlighter/shCore.uncompressed.js')
-rw-r--r-- | usr/local/www/code-syntax-highlighter/shCore.uncompressed.js | 636 |
1 files changed, 0 insertions, 636 deletions
diff --git a/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js b/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js deleted file mode 100644 index 8d92721..0000000 --- a/usr/local/www/code-syntax-highlighter/shCore.uncompressed.js +++ /dev/null @@ -1,636 +0,0 @@ -/** - * Code Syntax Highlighter. - * Version 1.3.0 - * Copyright (C) 2004 Alex Gorbatchev. - * http://www.dreamprojections.com/syntaxhighlighter/ - * - * This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General - * Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) - * any later version. - * - * This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied - * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more - * details. - * - * You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to - * the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -// -// create namespaces -// -var dp = { - sh : - { - Toolbar : {}, - Utils : {}, - RegexLib: {}, - Brushes : {}, - Strings : {}, - Version : '1.4.1' - } -}; - -dp.sh.Strings = { - AboutDialog : '<html><head><title>About...</title></head><body class="dp-about"><table cellspacing="0"><tr><td class="copy"><p class="title">dp.SyntaxHighlighter</div><div class="para">Version: {V}</p><p><a href="http://www.dreamprojections.com/syntaxhighlighter/?ref=about" target="_blank">http://www.dreamprojections.com/SyntaxHighlighter</a></p>©2004-2005 Alex Gorbatchev. All right reserved.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>' -}; - -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(/</g, '<'); - var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1'); - wnd.document.write('<textarea style="width:99%;height:99%">' + code + '</textarea>'); - 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('<div class="' + highlighter.div.className.replace('collapsed', '') + ' printing">' + highlighter.div.innerHTML + '</div>'); - 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 <div /> 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 += '<a href="#" onclick="dp.sh.Toolbar.Command(\'' + name + '\',this);return false;">' + cmd.label + '</a>'; - } - - 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 <link rel="stylesheet" /> 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('<link type="text/css" rel="stylesheet" href="' + links[i].href + '"></link>'); -} - -// -// 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(/</g, '<'); - str = str.replace(/\n/gm, ' <br />'); - - // 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('<br />', 'gi'); - - if(regex.test(str)) - { - var lines = str.split(' <br />'); - - 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 <br /> 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 <br /> 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; - this.code = Chop(Unindent(code)); - 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'; - - // set the first line - 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'; - - // replace tabs with spaces - if(this.tabsToSpaces == true) - this.code = this.ProcessSmartTabs(this.code); - - this.ProcessRegexList(); - - // if no matches found, add entire code as plain text - if(this.matches.length == 0) - { - this.AddBit(this.code, null); - this.SwitchToList(); - this.div.appendChild(this.ol); - return; - } - - // sort the matches - this.matches = this.matches.sort(dp.sh.Highlighter.SortCallback); - - // The following loop checks to see if any of the matches are inside - // of other matches. This process would get rid of highligted strings - // inside comments, keywords inside strings and so on. - for(var i = 0; i < this.matches.length; i++) - if(this.IsInside(this.matches[i])) - this.matches[i] = null; - - // Finally, go through the final list of matches and pull the all - // together adding everything in between that isn't a match. - for(var i = 0; i < this.matches.length; i++) - { - var match = this.matches[i]; - - if(match == null || match.length == 0) - continue; - - this.AddBit(Copy(this.code, pos, match.index), null); - this.AddBit(match.value, match.css); - - pos = match.index + match.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'; -} - -// highlightes all elements identified by name and gets source code from specified property -dp.sh.HighlightAll = function(name, showGutter /* optional */, showControls /* optional */, collapseAll /* optional */, firstLine /* optional */, showColumns /* optional */) -{ - 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(value, list) - { - for(var i = 0; i < list.length; i++) - if(list[i] == value) - return true; - - return false; - } - - function GetOptionValue(name, list, defaultValue) - { - var regex = new RegExp('^' + name + '\\[(\\w+)\\]$', 'gi'); - var matches = null; - - for(var i = 0; i < list.length; i++) - if((matches = regex.exec(list[i])) != null) - return matches[1]; - - return defaultValue; - } - - var elements = document.getElementsByName(name); - var highlighter = null; - var registered = new Object(); - var propertyName = 'value'; - - // if no code blocks found, leave - if(elements == null) - return; - - // register all brushes - for(var brush in dp.sh.Brushes) - { - var aliases = dp.sh.Brushes[brush].Aliases; - - if(aliases == null) - continue; - - for(var i = 0; i < aliases.length; i++) - registered[aliases[i]] = brush; - } - - for(var i = 0; i < elements.length; i++) - { - var element = elements[i]; - var options = FindValue( - element.attributes['class'], element.className, - element.attributes['language'], element.language - ); - var language = ''; - - if(options == null) - continue; - - options = options.split(':'); - - language = options[0].toLowerCase(); - - if(registered[language] == null) - continue; - - // instantiate a brush - highlighter = new dp.sh.Brushes[registered[language]](); - - // hide the original element - element.style.display = 'none'; - - highlighter.noGutter = (showGutter == null) ? IsOptionSet('nogutter', options) : !showGutter; - highlighter.addControls = (showControls == null) ? !IsOptionSet('nocontrols', options) : showControls; - highlighter.collapse = (collapseAll == null) ? IsOptionSet('collapse', options) : collapseAll; - highlighter.showColumns = (showColumns == null) ? IsOptionSet('showcolumns', options) : showColumns; - - // first line idea comes from Andrew Collington, thanks! - highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine; - - highlighter.Highlight(element[propertyName]); - - element.parentNode.insertBefore(highlighter.div, element); - } -} |