var dp = { sh :
{ Toolbar : {}, Utils : {}, RegexLib: {}, Brushes : {}, 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>&copy;2004-2007 Alex Gorbatchev.</td></tr><tr><td class="footer"><input type="button" class="close" value="OK" onClick="window.close()"/></td></tr></table></body></html>'
}, ClipboardSwf : null, Version : '1.5.1'
}
}; dp.SyntaxHighlighter = dp.sh; 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', '');}
}, ViewSource: { label: 'Zobrazit kód', func: function(sender, highlighter)
{ var code = dp.sh.Utils.FixForBlogger(highlighter.originalCode).replace(/</g, '&lt;'); var wnd = window.open('', '_blank', 'width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=0'); wnd.document.write('<textarea style="width:99%;height:99%">' + code + '</textarea>'); wnd.document.close();}
}, CopyToClipboard: { label: 'Kopírovat do schránky', check: function() { return window.clipboardData != null || dp.sh.ClipboardSwf != null;}, func: function(sender, highlighter)
{ var code = dp.sh.Utils.FixForBlogger(highlighter.originalCode)
.replace(/&lt;/g,'<')
.replace(/&gt;/g,'>')
.replace(/&amp;/g,'&')
; if(window.clipboardData)
{ window.clipboardData.setData('text', code);}
else if(dp.sh.ClipboardSwf != null)
{ var flashcopier = highlighter.flashCopier; if(flashcopier == null)
{ flashcopier = document.createElement('div'); highlighter.flashCopier = flashcopier; highlighter.div.appendChild(flashcopier);}
flashcopier.innerHTML = '<embed src="' + dp.sh.ClipboardSwf + '" FlashVars="clipboard='+encodeURIComponent(code)+'" width="0" height="0" type="application/x-shockwave-flash"></embed>';}
alert('Kód byl zkopírován do schránky');}
}, PrintSource: { label: 'Tisk', func: function(sender, highlighter)
{ var iframe = document.createElement('IFRAME'); var doc = null; 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('Tisknu...'); 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();}
}
}; 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;}
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);}
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>');}
dp.sh.Utils.FixForBlogger = function(str)
{ return (dp.sh.isBloggerMode == true) ? str.replace(/<br\s*\/?>|&lt;br\s*\/?&gt;/gi, '\n') : str;}
dp.sh.RegexLib = { MultiLineCComments : new RegExp('/\\*[\\s\\S]*?\\*/', 'gm'), SingleLineCComments : new RegExp('//.*$', 'gm'), SingleLinePerlComments : new RegExp('#.*$', 'gm'), DoubleQuotedString : new RegExp('"(?:\\.|(\\\\\\")|[^\\""\\n])*"','g'), SingleQuotedString : new RegExp("'(?:\\.|(\\\\\\')|[^\\''\\n])*'", 'g')
}; dp.sh.Match = function(value, index, css)
{ this.value = value; this.index = index; this.length = value.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(name)
{ var result = document.createElement(name); result.highlighter = this; return result;}
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, '&nbsp;'); str = str.replace(/</g, '&lt;'); str = str.replace(/\n/gm, '&nbsp;<br>'); if(css != null)
{ if((/br/gi).test(str))
{ var lines = str.split('&nbsp;<br>'); for(var i = 0; i < lines.length; i++)
{ span = this.CreateElement('SPAN'); span.className = css; span.innerHTML = lines[i]; this.div.appendChild(span); 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);}
}
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'; function InsertSpaces(line, pos, count)
{ var left = line.substr(0, pos); var right = line.substr(pos + 1, line.length); var spaces = ''; for(var i = 0; i < count; i++)
spaces += ' '; return left + spaces + right;}
function ProcessLine(line, tabSize)
{ if(line.indexOf(tab) == -1)
return line; var pos = 0; while((pos = line.indexOf(tab)) != -1)
{ var spaces = tabSize - pos % tabSize; line = InsertSpaces(line, pos, spaces);}
return line;}
for(var i = 0; i < lines.length; i++)
result += ProcessLine(lines[i], tabSize) + '\n'; return result;}
dp.sh.Highlighter.prototype.SwitchToList = function()
{ 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)); 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 += '&middot;'; 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 div = this.CreateElement('DIV'); li.className = (i % 2 == 0) ? 'alt' : ''; div.className = (i % 2 == 0) ? 'alt' : ''; div.innerHTML = lines[i] + ' '; li.appendChild(div); 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 = dp.sh.Utils.FixForBlogger(str).split('\n'); var indents = new Array(); var regex = new RegExp('^\\s*', 'g'); var min = 1000; 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);}
if(min > 0)
for(var i = 0; i < lines.length; i++)
lines[i] = lines[i].substr(min); return lines.join('\n');}
function Copy(string, pos1, pos2)
{ return string.substr(pos1, pos2 - pos1);}
var pos = 0; if(code == null)
code = ''; 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'; 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.bar); 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 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';}
dp.sh.Highlighter.prototype.GetKeywords_without = function(str, str_wo)
{ return '\\b' + str.replace(/ /g, '\\b(?!' + str_wo + ')|\\b') + '\\b';}
dp.sh.BloggerMode = function()
{ dp.sh.isBloggerMode = true;}
dp.sh.HighlightAll = function(name, showGutter , showControls , collapseAll , firstLine , showColumns )
{ 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 = 2; 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;}
function FindSyntaxClassValue(classAttr)
{ if (classAttr==null || classAttr=='')
return null; var classes = classAttr.replace(/^\s+/,'').replace(/\s+$/,'').split(/\s+/); for(var i = 0; i < classes.length; ++i)
{ if(classes[i].indexOf('syntax-highlight:')==0)
return classes[i];}
return null;}
function FindTagsBySyntaxClass(list, tagName)
{ var tags = document.getElementsByTagName(tagName); for(var i = 0; i < tags.length; i++)
{ if (FindSyntaxClassValue(tags[i].className)!=null)
list.push(tags[i]);}
}
var elements = []; var highlighter = null; var registered = {}; var propertyName = 'innerHTML'; FindTagsBySyntaxClass(elements, 'pre'); FindTagsBySyntaxClass(elements, 'textarea'); if(elements.length == 0)
return; 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 = FindSyntaxClassValue(FindValue( element.attributes['class'], element.className, element.attributes['language'], element.language )); var language = ''; if(options == null)
continue; options = options.split(':'); language = options[1].toLowerCase(); if(registered[language] == null)
continue; highlighter = new dp.sh.Brushes[registered[language]](); 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; var headNode = document.getElementsByTagName('head')[0]; if(highlighter.Style && headNode)
{ var styleNode = document.createElement('style'); styleNode.setAttribute('type', 'text/css'); if(styleNode.styleSheet)
{ styleNode.styleSheet.cssText = highlighter.Style;}
else
{ var textNode = document.createTextNode(highlighter.Style); styleNode.appendChild(textNode);}
headNode.appendChild(styleNode);}
highlighter.firstLine = (firstLine == null) ? parseInt(GetOptionValue('firstline', options, 1)) : firstLine; highlighter.Highlight(element[propertyName]); highlighter.source = element; element.parentNode.insertBefore(highlighter.div, element); var liArray = highlighter.div.getElementsByTagName("li"); var addLength = highlighter.div.scrollWidth - 58; for (var j = 0; j < liArray.length; j++) { var divLine = liArray[j].firstChild; divLine.style.width = addLength + "px";}
var divTools = highlighter.div.getElementsByTagName("div"); divTools[1].style.width = addLength + "px";}
}