]> CyberLeo.Net >> Repos - Github/sugarcrm.git/blob - include/javascript/yui3/assets/dpSyntaxHighlighter.js
Release 6.2.2
[Github/sugarcrm.git] / include / javascript / yui3 / assets / dpSyntaxHighlighter.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 var dp={sh:{Utils:{},Brushes:{},Strings:{},Version:'1.3.0'}};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>&copy;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>',ExpandCode:'+ expand code',ViewPlain:'view plain',Print:'print',CopyToClipboard:'copy to clipboard',About:'?',CopiedToClipboard:'The code is in your clipboard now.'};dp.SyntaxHighlighter=dp.sh;dp.sh.Utils.Expand=function(sender)
19 {var table=sender;var span=sender;while(span!=null&&span.tagName!='SPAN')
20 span=span.parentNode;while(table!=null&&table.tagName!='TABLE')
21 table=table.parentNode;span.parentNode.removeChild(span);table.tBodies[0].className='show';table.parentNode.style.height='100%';}
22 dp.sh.Utils.ViewSource=function(sender)
23 {var code=sender.parentNode.originalCode;var wnd=window.open('','_blank','width=750, height=400, location=0, resizable=1, menubar=0, scrollbars=1');code=code.replace(/</g,'&lt;');wnd.document.write('<pre>'+code+'</pre>');wnd.document.close();}
24 dp.sh.Utils.ToClipboard=function(sender)
25 {var code=sender.parentNode.originalCode;if(window.clipboardData)
26 {window.clipboardData.setData('text',code);alert(dp.sh.Strings.CopiedToClipboard);}}
27 dp.sh.Utils.PrintSource=function(sender)
28 {var td=sender.parentNode;var code=td.processedCode;var iframe=document.createElement('IFRAME');var doc=null;var wnd=iframe.style.cssText='position:absolute; width:0px; height:0px; left:-5px; top:-5px;';td.appendChild(iframe);doc=iframe.contentWindow.document;code=code.replace(/</g,'&lt;');doc.open();doc.write('<pre>'+code+'</pre>');doc.close();iframe.contentWindow.focus();iframe.contentWindow.print();td.removeChild(iframe);}
29 dp.sh.Utils.About=function()
30 {var wnd=window.open('','_blank','dialog,width=320,height=150,scrollbars=0');var doc=wnd.document;var styles=document.getElementsByTagName('style');var links=document.getElementsByTagName('link');doc.write(dp.sh.Strings.AboutDialog.replace('{V}',dp.sh.Version));for(var i=0;i<styles.length;i++)
31 doc.write('<style>'+styles[i].innerHTML+'</style>');for(var i=0;i<links.length;i++)
32 if(links[i].rel.toLowerCase()=='stylesheet')
33 doc.write('<link type="text/css" rel="stylesheet" href="'+links[i].href+'"></link>');doc.close();wnd.focus();}
34 dp.sh.Match=function(value,index,css)
35 {this.value=value;this.index=index;this.length=value.length;this.css=css;}
36 dp.sh.Highlighter=function()
37 {this.addGutter=true;this.addControls=true;this.collapse=false;this.tabsToSpaces=true;}
38 dp.sh.Highlighter.SortCallback=function(m1,m2)
39 {if(m1.index<m2.index)
40 return-1;else if(m1.index>m2.index)
41 return 1;else
42 {if(m1.length<m2.length)
43 return-1;else if(m1.length>m2.length)
44 return 1;}
45 return 0;}
46 dp.sh.Highlighter.prototype.GetMatches=function(regex,css)
47 {var index=0;var match=null;while((match=regex.exec(this.code))!=null)
48 {this.matches[this.matches.length]=new dp.sh.Match(match[0],match.index,css);}}
49 dp.sh.Highlighter.prototype.AddBit=function(str,css)
50 {var span=document.createElement('span');str=str.replace(/&/g,'&amp;');str=str.replace(/ /g,'&nbsp;');str=str.replace(/</g,'&lt;');str=str.replace(/\n/gm,'&nbsp;<br>');if(css!=null)
51 {var regex=new RegExp('<br>','gi');if(regex.test(str))
52 {var lines=str.split('&nbsp;<br>');str='';for(var i=0;i<lines.length;i++)
53 {span=document.createElement('SPAN');span.className=css;span.innerHTML=lines[i];this.div.appendChild(span);if(i+1<lines.length)
54 this.div.appendChild(document.createElement('BR'));}}
55 else
56 {span.className=css;span.innerHTML=str;this.div.appendChild(span);}}
57 else
58 {span.innerHTML=str;this.div.appendChild(span);}}
59 dp.sh.Highlighter.prototype.IsInside=function(match)
60 {if(match==null||match.length==0)
61 return;for(var i=0;i<this.matches.length;i++)
62 {var c=this.matches[i];if(c==null)
63 continue;if((match.index>c.index)&&(match.index<=c.index+c.length))
64 return true;}
65 return false;}
66 dp.sh.Highlighter.prototype.ProcessRegexList=function()
67 {for(var i=0;i<this.regexList.length;i++)
68 this.GetMatches(this.regexList[i].regex,this.regexList[i].css);}
69 dp.sh.Highlighter.prototype.ProcessSmartTabs=function(code)
70 {var lines=code.split('\n');var result='';var tabSize=4;var tab='\t';function InsertSpaces(line,pos,count)
71 {var left=line.substr(0,pos);var right=line.substr(pos+1,line.length);var spaces='';for(var i=0;i<count;i++)
72 spaces+=' ';return left+spaces+right;}
73 function ProcessLine(line,tabSize)
74 {if(line.indexOf(tab)==-1)
75 return line;var pos=0;while((pos=line.indexOf(tab))!=-1)
76 {var spaces=tabSize-pos%tabSize;line=InsertSpaces(line,pos,spaces);}
77 return line;}
78 for(var i=0;i<lines.length;i++)
79 result+=ProcessLine(lines[i],tabSize)+'\n';return result;}
80 dp.sh.Highlighter.prototype.SwitchToTable=function()
81 {var html=this.div.innerHTML.replace(/<(br)\/?>/gi,'\n');var lines=html.split('\n');var row=null;var cell=null;var tBody=null;var html='';var pipe=' | ';function UtilHref(util,text)
82 {return'<a href="#" onclick="dp.sh.Utils.'+util+'(this); return false;">'+text+'</a>';}
83 tBody=document.createElement('TBODY');this.table.appendChild(tBody);if(this.addGutter==true)
84 {row=tBody.insertRow(-1);cell=row.insertCell(-1);cell.className='tools-corner';}
85 if(this.addControls==true)
86 {var tHead=document.createElement('THEAD');this.table.appendChild(tHead);row=tHead.insertRow(-1);if(this.addGutter==true)
87 {cell=row.insertCell(-1);cell.className='tools-corner';}
88 cell=row.insertCell(-1);cell.originalCode=this.originalCode;cell.processedCode=this.code;cell.className='tools';if(this.collapse==true)
89 {tBody.className='hide';cell.innerHTML+='<span><b>'+UtilHref('Expand',dp.sh.Strings.ExpandCode)+'</b>'+pipe+'</span>';}
90 cell.innerHTML+=UtilHref('ViewSource',dp.sh.Strings.ViewPlain)+pipe+UtilHref('PrintSource',dp.sh.Strings.Print);if(window.clipboardData)
91 cell.innerHTML+=pipe+UtilHref('ToClipboard',dp.sh.Strings.CopyToClipboard);cell.innerHTML+=pipe+UtilHref('About',dp.sh.Strings.About);}
92 for(var i=0,lineIndex=this.firstLine;i<lines.length-1;i++,lineIndex++)
93 {row=tBody.insertRow(-1);if(this.addGutter==true)
94 {cell=row.insertCell(-1);cell.className='gutter';cell.innerHTML=lineIndex;}
95 cell=row.insertCell(-1);cell.className='line'+(i%2+1);cell.innerHTML=lines[i];}
96 this.div.innerHTML='';}
97 dp.sh.Highlighter.prototype.Highlight=function(code)
98 {function Trim(str)
99 {return str.replace(/^\s*(.*?)[\s\n]*$/g,'$1');}
100 function Chop(str)
101 {return str.replace(/\n*$/,'').replace(/^\n*/,'');}
102 function Unindent(str)
103 {var lines=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++)
104 {if(Trim(lines[i]).length==0)
105 continue;var matches=regex.exec(lines[i]);if(matches!=null&&matches.length>0)
106 min=Math.min(matches[0].length,min);}
107 if(min>0)
108 for(var i=0;i<lines.length;i++)
109 lines[i]=lines[i].substr(min);return lines.join('\n');}
110 function Copy(string,pos1,pos2)
111 {return string.substr(pos1,pos2-pos1);}
112 var pos=0;this.originalCode=code;this.code=Chop(Unindent(code));this.div=document.createElement('DIV');this.table=document.createElement('TABLE');this.matches=new Array();if(this.CssClass!=null)
113 this.table.className=this.CssClass;if(this.tabsToSpaces==true)
114 this.code=this.ProcessSmartTabs(this.code);this.table.border=0;this.table.cellSpacing=0;this.table.cellPadding=0;this.ProcessRegexList();if(this.matches.length==0)
115 {this.AddBit(this.code,null);this.SwitchToTable();return;}
116 this.matches=this.matches.sort(dp.sh.Highlighter.SortCallback);for(var i=0;i<this.matches.length;i++)
117 if(this.IsInside(this.matches[i]))
118 this.matches[i]=null;for(var i=0;i<this.matches.length;i++)
119 {var match=this.matches[i];if(match==null||match.length==0)
120 continue;this.AddBit(Copy(this.code,pos,match.index),null);this.AddBit(match.value,match.css);pos=match.index+match.length;}
121 this.AddBit(this.code.substr(pos),null);this.SwitchToTable();}
122 dp.sh.Highlighter.prototype.GetKeywords=function(str)
123 {return'\\b'+str.replace(/ /g,'\\b|\\b')+'\\b';}
124 dp.sh.HighlightAll=function(name,showGutter,showControls,collapseAll,firstLine)
125 {function FindValue()
126 {var a=arguments;for(var i=0;i<a.length;i++)
127 {if(a[i]==null)
128 continue;if(typeof(a[i])=='string'&&a[i]!='')
129 return a[i]+'';if(typeof(a[i])=='object'&&a[i].value!='')
130 return a[i].value+'';}
131 return null;}
132 function IsOptionSet(value,list)
133 {for(var i=0;i<list.length;i++)
134 if(list[i]==value)
135 return true;return false;}
136 function GetOptionValue(name,list,defaultValue)
137 {var regex=new RegExp('^'+name+'\\[(\\w+)\\]$','gi');var matches=null;for(var i=0;i<list.length;i++)
138 if((matches=regex.exec(list[i]))!=null)
139 return matches[1];return defaultValue;}
140 var elements=document.getElementsByName(name);var highlighter=null;var registered=new Object();var propertyName='value';if(elements==null)
141 return;for(var brush in dp.sh.Brushes)
142 {var aliases=dp.sh.Brushes[brush].Aliases;if(aliases==null)
143 continue;for(var i=0;i<aliases.length;i++)
144 registered[aliases[i]]=brush;}
145 for(var i=0;i<elements.length;i++)
146 {var element=elements[i];var options=FindValue(element.attributes['class'],element.className,element.attributes['language'],element.language);var language='';if(options==null)
147 continue;options=options.split(':');language=options[0].toLowerCase();if(registered[language]==null)
148 continue;highlighter=new dp.sh.Brushes[registered[language]]();element.style.display='none';highlighter.addGutter=(showGutter==null)?!IsOptionSet('nogutter',options):showGutter;highlighter.addControls=(showControls==null)?!IsOptionSet('nocontrols',options):showControls;highlighter.collapse=(collapseAll==null)?IsOptionSet('collapse',options):collapseAll;highlighter.firstLine=(firstLine==null)?parseInt(GetOptionValue('firstline',options,1)):firstLine;highlighter.Highlight(element[propertyName]);var div=document.createElement('DIV');div.className='dp-highlighter';div.appendChild(highlighter.table);element.parentNode.insertBefore(div,element);}}
149 dp.sh.Brushes.Xml=function()
150 {this.CssClass='dp-xml';}
151 dp.sh.Brushes.Xml.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Xml.Aliases=['xml','xhtml','xslt','html','xhtml'];dp.sh.Brushes.Xml.prototype.ProcessRegexList=function()
152 {function push(array,value)
153 {array[array.length]=value;}
154 var index=0;var match=null;var regex=null;this.GetMatches(new RegExp('<\\!\\[[\\w\\s]*?\\[(.|\\s)*?\\]\\]>','gm'),'cdata');this.GetMatches(new RegExp('<!--\\s*.*\\s*?-->','gm'),'comments');regex=new RegExp('([\\w-\.]+)\\s*=\\s*(".*?"|\'.*?\'|\\w+)*','gm');while((match=regex.exec(this.code))!=null)
155 {push(this.matches,new dp.sh.Match(match[1],match.index,'attribute'));if(match[2]!=undefined)
156 {push(this.matches,new dp.sh.Match(match[2],match.index+match[0].indexOf(match[2]),'attribute-value'));}}
157 this.GetMatches(new RegExp('</*\\?*(?!\\!)|/*\\?*>','gm'),'tag');regex=new RegExp('</*\\?*\\s*([\\w-\.]+)','gm');while((match=regex.exec(this.code))!=null)
158 {push(this.matches,new dp.sh.Match(match[1],match.index+match[0].indexOf(match[1]),'tag-name'));}}
159 dp.sh.Brushes.Php=function()
160 {var keywords='and or xor __FILE__ __LINE__ array as break case '+'cfunction class const continue declare default die do echo else '+'elseif empty enddeclare endfor endforeach endif endswitch endwhile eval exit '+'extends for foreach function global if include include_once isset list '+'new old_function print require require_once return static switch unset use '+'var while __FUNCTION__ __CLASS__';this.regexList=[{regex:new RegExp('//.*$','gm'),css:'comment'},{regex:new RegExp('/\\*[\\s\\S]*?\\*/','g'),css:'comment'},{regex:new RegExp('"(?:[^"\n]|[\"])*?"','g'),css:'string'},{regex:new RegExp("'(?:[^'\n]|[\'])*?'",'g'),css:'string'},{regex:new RegExp('\\$\\w+','g'),css:'vars'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
161 dp.sh.Brushes.Php.prototype=new dp.sh.Highlighter();dp.sh.Brushes.Php.Aliases=['php'];dp.sh.Brushes.JScript=function()
162 {var keywords='abstract boolean break byte case catch char class const continue debugger '+'default delete do double else enum export extends false final finally float '+'for function goto if implements import in instanceof int interface long native '+'new null package private protected public return short static super switch '+'synchronized this throw throws transient true try typeof var void volatile while with';this.regexList=[{regex:new RegExp('//.*$','gm'),css:'comment'},{regex:new RegExp('/\\*[\\s\\S]*?\\*/','g'),css:'comment'},{regex:new RegExp('"(?:[^"\n]|[\"])*?"','g'),css:'string'},{regex:new RegExp("'(?:[^'\n]|[\'])*?'",'g'),css:'string'},{regex:new RegExp('^\\s*#.*','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywords(keywords),'gm'),css:'keyword'}];this.CssClass='dp-c';}
163 dp.sh.Brushes.JScript.prototype=new dp.sh.Highlighter();dp.sh.Brushes.JScript.Aliases=['js','jscript','javascript'];dp.sh.Brushes.CSS=function(){var tags='abbr acronym address applet area a b base basefont bdo big blockquote body br button '+'caption center cite code col colgroup dd del dfn dir div dl dt em fieldset form frame frameset h1 h2 h3 h4 h5 h6 head hr html img i '+'iframe img input ins isindex kbd label legend li link map menu meta noframes noscript ol optgroup option p param pre q s samp script select '+'span strike strong style sub sup table tbody td textarea tfoot th thead title tr tt ul u';var keywords='ascent azimuth background-attachment background-color background-image background-position '+'background-repeat background baseline bbox border-collapse border-color border-spacing border-style border-top '+'border-right border-bottom border-left border-top-color border-right-color border-bottom-color border-left-color '+'border-top-style border-right-style border-bottom-style border-left-style border-top-width border-right-width '+'border-bottom-width border-left-width border-width border bottom cap-height caption-side centerline clear clip color '+'content counter-increment counter-reset cue-after cue-before cue cursor definition-src descent direction display '+'elevation empty-cells float font-size-adjust font-family font-size font-stretch font-style font-variant font-weight font '+'height letter-spacing line-height list-style-image list-style-position list-style-type list-style margin-top '+'margin-right margin-bottom margin-left margin marker-offset marks mathline max-height max-width min-height min-width orphans '+'outline-color outline-style outline-width outline overflow-x overflow-y overflow padding-top padding-right padding-bottom padding-left padding page '+'page-break-after page-break-before page-break-inside pause pause-after pause-before pitch pitch-range play-during position '+'quotes richness right left bottom top size slope src speak-header speak-numeral speak-punctuation speak speech-rate stemh stemv stress '+'table-layout text-align text-decoration text-indent text-shadow text-transform unicode-bidi unicode-range units-per-em '+'vertical-align visibility voice-family volume white-space widows width widths word-spacing x-height z-index zoom important after filter opacity';var values='progid:DXImageTransform.Microsoft.AlphaImageLoader src sizingMethod alpha opacity '+'above absolute all always aqua armenian attr aural auto avoid baseline behind below bidi-override black blink block blue bold bolder both bottom braille capitalize center center-left center-right circle close-quote code collapse compact condensed '+'continuous counter counters crop cross crosshair cursive dashed decimal decimal-leading-zero default digits disc dotted double embed embossed e-resize expanded extra-condensed extra-expanded fantasy far-left far-right fast faster fixed format fuchsia '+'gray green groove handheld hebrew help hidden hide high higher inline-table inline inset inside invert italic justify landscape large larger left-side left leftwards level lighter lime line-through list-item local loud lower-alpha '+'lowercase lower-greek lower-latin lower-roman lower low ltr marker maroon medium message-box middle mix move narrower navy ne-resize no-close-quote none no-open-quote no-repeat normal nowrap n-resize nw-resize oblique olive once open-quote outset '+'outside overline pointer portrait print projection purple red relative repeat repeat-x repeat-y rgb ridge right right-side rightwards rtl run-in screen scroll semi-condensed semi-expanded separate se-resize show silent silver slower slow '+'small small-caps small-caption smaller soft solid speech spell-out square s-resize static status-bar sub super sw-resize table-caption table-cell table-column table-column-group table-footer-group table-header-group table-row table-row-group teal '+'text-bottom text-top thick thin top transparent tty tv ultra-condensed ultra-expanded underline upper-alpha uppercase upper-latin upper-roman url visible wait white wider w-resize x-fast x-high x-large x-loud x-low x-slow x-small x-soft xx-large xx-small yellow';this.regexList=[{regex:new RegExp('//.*$','gm'),css:'comment'},{regex:new RegExp('/\\*[\\s\\S]*?\\*/','g'),css:'comment'},{regex:new RegExp('"(?:[^"\n]|[\"])*?"','g'),css:'string'},{regex:new RegExp("'(?:[^'\n]|[\'])*?'",'g'),css:'string'},{regex:new RegExp('^\\s*.*{','gm'),css:'preprocessor'},{regex:new RegExp('}','gm'),css:'preprocessor'},{regex:new RegExp(this.GetKeywordsCSS(keywords),'gm'),css:'keyword'},{regex:new RegExp(this.GetValuesCSS(values),'gm'),css:'value'},{regex:new RegExp('(-?\\d+)(\.\\d+)?(px|em|pt|\:|\%|)','g'),css:'value'}];this.CssClass='dp-css';}
164 dp.sh.Highlighter.prototype.GetKeywordsCSS=function(str){var str='\\b([a-z_]|)'+str.replace(/ /g,'(?=:)\\b|\\b([a-z_\\*]|\\*|)')+'(?=:)\\b';return str;}
165 dp.sh.Highlighter.prototype.GetValuesCSS=function(str){var str='\\b'+str.replace(/ /g,'(?!-)(?!:)\\b|\\b()')+'\:\\b';return str;}
166 dp.sh.Brushes.CSS.prototype=new dp.sh.Highlighter();dp.sh.Brushes.CSS.Aliases=['css'];