Commit e5caad0535d100d8b511702d93241285334f1033
1 parent
63861f76
Exists in
master
and in
29 other branches
ActionItem122: adding codepress javascript text editor
git-svn-id: https://svn.colivre.coop.br/svn/noosfero/trunk@2388 3f533792-8f58-4932-b0fe-aaf55b0a4547
Showing
41 changed files
with
2934 additions
and
0 deletions
Show diff stats
... | ... | @@ -0,0 +1,21 @@ |
1 | +body { | |
2 | + margin-top:13px; | |
3 | + _margin-top:14px; | |
4 | + background:white; | |
5 | + margin-left:32px; | |
6 | + font-family:monospace; | |
7 | + font-size:13px; | |
8 | + white-space:pre; | |
9 | + background-image:url("images/line-numbers.png"); | |
10 | + background-repeat:repeat-y; | |
11 | + background-position:0 3px; | |
12 | + line-height:16px; | |
13 | + height:100%; | |
14 | +} | |
15 | +pre {margin:0;} | |
16 | +html>body{background-position:0 2px;} | |
17 | +P {margin:0;padding:0;border:0;outline:0;display:block;white-space:pre;} | |
18 | +b, i, s, u, a, em, tt, ins, big, cite, strong, var, dfn {text-decoration:none;font-weight:normal;font-style:normal;font-size:13px;} | |
19 | + | |
20 | +body.hide-line-numbers {background:white;margin-left:16px;} | |
21 | +body.show-line-numbers {background-image:url("images/line-numbers.png");margin-left:32px;} | |
0 | 22 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,35 @@ |
1 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
2 | +<html> | |
3 | +<head> | |
4 | + <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title> | |
5 | + <meta name="description" content="CodePress - source code editor window" /> | |
6 | + | |
7 | + <script type="text/javascript"> | |
8 | + var language = 'generic'; | |
9 | + var engine = 'older'; | |
10 | + var ua = navigator.userAgent; | |
11 | + var ts = (new Date).getTime(); // timestamp to avoid cache | |
12 | + var lh = location.href; | |
13 | + | |
14 | + if(ua.match('MSIE')) engine = 'msie'; | |
15 | + else if(ua.match('KHTML')) engine = 'khtml'; | |
16 | + else if(ua.match('Opera')) engine = 'opera'; | |
17 | + else if(ua.match('Gecko')) engine = 'gecko'; | |
18 | + | |
19 | + if(lh.match('language=')) language = lh.replace(/.*language=(.*?)(&.*)?$/,'$1'); | |
20 | + | |
21 | + document.write('<link type="text/css" href="codepress.css?ts='+ts+'" rel="stylesheet" />'); | |
22 | + document.write('<link type="text/css" href="languages/'+language+'.css?ts='+ts+'" rel="stylesheet" id="cp-lang-style" />'); | |
23 | + document.write('<scr'+'ipt type="text/javascript" src="engines/'+engine+'.js?ts='+ts+'"></scr'+'ipt>'); | |
24 | + document.write('<scr'+'ipt type="text/javascript" src="languages/'+language+'.js?ts='+ts+'"></scr'+'ipt>'); | |
25 | + </script> | |
26 | + | |
27 | +</head> | |
28 | + | |
29 | +<script type="text/javascript"> | |
30 | +if(engine == "msie" || engine == "gecko") document.write('<body><pre> </pre></body>'); | |
31 | +else if(engine == "opera") document.write('<body></body>'); | |
32 | +// else if(engine == "khtml") document.write('<body> </body>'); | |
33 | +</script> | |
34 | + | |
35 | +</html> | ... | ... |
... | ... | @@ -0,0 +1,138 @@ |
1 | +/* | |
2 | + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ | |
3 | + * | |
4 | + * Copyright (C) 2006 Fernando M.A.d.S. <fermads@gmail.com> | |
5 | + * | |
6 | + * This program is free software; you can redistribute it and/or modify it under the terms of the | |
7 | + * GNU Lesser General Public License as published by the Free Software Foundation. | |
8 | + * | |
9 | + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php | |
10 | + */ | |
11 | + | |
12 | +CodePress = function(obj) { | |
13 | + var self = document.createElement('iframe'); | |
14 | + self.textarea = obj; | |
15 | + self.textarea.disabled = true; | |
16 | + self.textarea.style.overflow = 'hidden'; | |
17 | + self.style.height = self.textarea.clientHeight +'px'; | |
18 | + self.style.width = self.textarea.clientWidth +'px'; | |
19 | + self.textarea.style.overflow = 'auto'; | |
20 | + self.style.border = '1px solid gray'; | |
21 | + self.frameBorder = 0; // remove IE internal iframe border | |
22 | + self.style.visibility = 'hidden'; | |
23 | + self.style.position = 'absolute'; | |
24 | + self.options = self.textarea.className; | |
25 | + | |
26 | + self.initialize = function() { | |
27 | + self.editor = self.contentWindow.CodePress; | |
28 | + self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0]; | |
29 | + self.editor.setCode(self.textarea.value); | |
30 | + self.setOptions(); | |
31 | + self.editor.syntaxHighlight('init'); | |
32 | + self.textarea.style.display = 'none'; | |
33 | + self.style.position = 'static'; | |
34 | + self.style.visibility = 'visible'; | |
35 | + self.style.display = 'inline'; | |
36 | + } | |
37 | + | |
38 | + // obj can by a textarea id or a string (code) | |
39 | + self.edit = function(obj,language) { | |
40 | + if(obj) self.textarea.value = document.getElementById(obj) ? document.getElementById(obj).value : obj; | |
41 | + if(!self.textarea.disabled) return; | |
42 | + self.language = language ? language : self.getLanguage(); | |
43 | + self.src = CodePress.path+'codepress.html?language='+self.language+'&ts='+(new Date).getTime(); | |
44 | + if(self.attachEvent) self.attachEvent('onload',self.initialize); | |
45 | + else self.addEventListener('load',self.initialize,false); | |
46 | + } | |
47 | + | |
48 | + self.getLanguage = function() { | |
49 | + for (language in CodePress.languages) | |
50 | + if(self.options.match('\\b'+language+'\\b')) | |
51 | + return CodePress.languages[language] ? language : 'generic'; | |
52 | + } | |
53 | + | |
54 | + self.setOptions = function() { | |
55 | + if(self.options.match('autocomplete-off')) self.toggleAutoComplete(); | |
56 | + if(self.options.match('readonly-on')) self.toggleReadOnly(); | |
57 | + if(self.options.match('linenumbers-off')) self.toggleLineNumbers(); | |
58 | + } | |
59 | + | |
60 | + self.getCode = function() { | |
61 | + return self.textarea.disabled ? self.editor.getCode() : self.textarea.value; | |
62 | + } | |
63 | + | |
64 | + self.setCode = function(code) { | |
65 | + self.textarea.disabled ? self.editor.setCode(code) : self.textarea.value = code; | |
66 | + } | |
67 | + | |
68 | + self.toggleAutoComplete = function() { | |
69 | + self.editor.autocomplete = (self.editor.autocomplete) ? false : true; | |
70 | + } | |
71 | + | |
72 | + self.toggleReadOnly = function() { | |
73 | + self.textarea.readOnly = (self.textarea.readOnly) ? false : true; | |
74 | + if(self.style.display != 'none') // prevent exception on FF + iframe with display:none | |
75 | + self.editor.readOnly(self.textarea.readOnly ? true : false); | |
76 | + } | |
77 | + | |
78 | + self.toggleLineNumbers = function() { | |
79 | + var cn = self.editor.body.className; | |
80 | + self.editor.body.className = (cn==''||cn=='show-line-numbers') ? 'hide-line-numbers' : 'show-line-numbers'; | |
81 | + } | |
82 | + | |
83 | + self.toggleEditor = function() { | |
84 | + if(self.textarea.disabled) { | |
85 | + self.textarea.value = self.getCode(); | |
86 | + self.textarea.disabled = false; | |
87 | + self.style.display = 'none'; | |
88 | + self.textarea.style.display = 'inline'; | |
89 | + } | |
90 | + else { | |
91 | + self.textarea.disabled = true; | |
92 | + self.setCode(self.textarea.value); | |
93 | + self.editor.syntaxHighlight('init'); | |
94 | + self.style.display = 'inline'; | |
95 | + self.textarea.style.display = 'none'; | |
96 | + } | |
97 | + } | |
98 | + | |
99 | + self.edit(); | |
100 | + return self; | |
101 | +} | |
102 | + | |
103 | +CodePress.languages = { | |
104 | + csharp : 'C#', | |
105 | + css : 'CSS', | |
106 | + generic : 'Generic', | |
107 | + html : 'HTML', | |
108 | + java : 'Java', | |
109 | + javascript : 'JavaScript', | |
110 | + perl : 'Perl', | |
111 | + ruby : 'Ruby', | |
112 | + php : 'PHP', | |
113 | + text : 'Text', | |
114 | + sql : 'SQL', | |
115 | + vbscript : 'VBScript' | |
116 | +} | |
117 | + | |
118 | + | |
119 | +CodePress.run = function() { | |
120 | + s = document.getElementsByTagName('script'); | |
121 | + for(var i=0,n=s.length;i<n;i++) { | |
122 | + if(s[i].src.match('codepress.js')) { | |
123 | + CodePress.path = s[i].src.replace('codepress.js',''); | |
124 | + } | |
125 | + } | |
126 | + t = document.getElementsByTagName('textarea'); | |
127 | + for(var i=0,n=t.length;i<n;i++) { | |
128 | + if(t[i].className.match('codepress')) { | |
129 | + id = t[i].id; | |
130 | + t[i].id = id+'_cp'; | |
131 | + eval(id+' = new CodePress(t[i])'); | |
132 | + t[i].parentNode.insertBefore(eval(id), t[i]); | |
133 | + } | |
134 | + } | |
135 | +} | |
136 | + | |
137 | +if(window.attachEvent) window.attachEvent('onload',CodePress.run); | |
138 | +else window.addEventListener('DOMContentLoaded',CodePress.run,false); | ... | ... |
... | ... | @@ -0,0 +1,293 @@ |
1 | +/* | |
2 | + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ | |
3 | + * | |
4 | + * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com> | |
5 | + * | |
6 | + * Developers: | |
7 | + * Fernando M.A.d.S. <fermads@gmail.com> | |
8 | + * Michael Hurni <michael.hurni@gmail.com> | |
9 | + * Contributors: | |
10 | + * Martin D. Kirk | |
11 | + * | |
12 | + * This program is free software; you can redistribute it and/or modify it under the terms of the | |
13 | + * GNU Lesser General Public License as published by the Free Software Foundation. | |
14 | + * | |
15 | + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php | |
16 | + */ | |
17 | + | |
18 | +CodePress = { | |
19 | + scrolling : false, | |
20 | + autocomplete : true, | |
21 | + | |
22 | + // set initial vars and start sh | |
23 | + initialize : function() { | |
24 | + if(typeof(editor)=='undefined' && !arguments[0]) return; | |
25 | + body = document.getElementsByTagName('body')[0]; | |
26 | + body.innerHTML = body.innerHTML.replace(/\n/g,""); | |
27 | + chars = '|32|46|62|8|'; // charcodes that trigger syntax highlighting | |
28 | + cc = '\u2009'; // carret char | |
29 | + editor = document.getElementsByTagName('pre')[0]; | |
30 | + document.designMode = 'on'; | |
31 | + document.addEventListener('keypress', this.keyHandler, true); | |
32 | + window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false); | |
33 | + completeChars = this.getCompleteChars(); | |
34 | + completeEndingChars = this.getCompleteEndingChars(); | |
35 | + }, | |
36 | + | |
37 | + // treat key bindings | |
38 | + keyHandler : function(evt) { | |
39 | + keyCode = evt.keyCode; | |
40 | + charCode = evt.charCode; | |
41 | + fromChar = String.fromCharCode(charCode); | |
42 | + | |
43 | + if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo) | |
44 | + CodePress.shortcuts(charCode?charCode:keyCode); | |
45 | + } | |
46 | + else if( (completeEndingChars.indexOf('|'+fromChar+'|')!= -1 || completeChars.indexOf('|'+fromChar+'|')!=-1) && CodePress.autocomplete) { // auto complete | |
47 | + if(!CodePress.completeEnding(fromChar)) | |
48 | + CodePress.complete(fromChar); | |
49 | + } | |
50 | + else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting | |
51 | + top.setTimeout(function(){CodePress.syntaxHighlight('generic');},100); | |
52 | + } | |
53 | + else if(keyCode==9 || evt.tabKey) { // snippets activation (tab) | |
54 | + CodePress.snippets(evt); | |
55 | + } | |
56 | + else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed | |
57 | + CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML; | |
58 | + } | |
59 | + else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo | |
60 | + (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo(); | |
61 | + evt.preventDefault(); | |
62 | + } | |
63 | + else if(charCode==118 && evt.ctrlKey) { // handle paste | |
64 | + top.setTimeout(function(){CodePress.syntaxHighlight('generic');},100); | |
65 | + } | |
66 | + else if(charCode==99 && evt.ctrlKey) { // handle cut | |
67 | + //alert(window.getSelection().getRangeAt(0).toString().replace(/\t/g,'FFF')); | |
68 | + } | |
69 | + | |
70 | + }, | |
71 | + | |
72 | + // put cursor back to its original position after every parsing | |
73 | + findString : function() { | |
74 | + if(self.find(cc)) | |
75 | + window.getSelection().getRangeAt(0).deleteContents(); | |
76 | + }, | |
77 | + | |
78 | + // split big files, highlighting parts of it | |
79 | + split : function(code,flag) { | |
80 | + if(flag=='scroll') { | |
81 | + this.scrolling = true; | |
82 | + return code; | |
83 | + } | |
84 | + else { | |
85 | + this.scrolling = false; | |
86 | + mid = code.indexOf(cc); | |
87 | + if(mid-2000<0) {ini=0;end=4000;} | |
88 | + else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;} | |
89 | + else {ini=mid-2000;end=mid+2000;} | |
90 | + code = code.substring(ini,end); | |
91 | + return code; | |
92 | + } | |
93 | + }, | |
94 | + | |
95 | + getEditor : function() { | |
96 | + if(!document.getElementsByTagName('pre')[0]) { | |
97 | + body = document.getElementsByTagName('body')[0]; | |
98 | + if(!body.innerHTML) return body; | |
99 | + if(body.innerHTML=="<br>") body.innerHTML = "<pre> </pre>"; | |
100 | + else body.innerHTML = "<pre>"+body.innerHTML+"</pre>"; | |
101 | + } | |
102 | + return document.getElementsByTagName('pre')[0]; | |
103 | + }, | |
104 | + | |
105 | + // syntax highlighting parser | |
106 | + syntaxHighlight : function(flag) { | |
107 | + //if(document.designMode=='off') document.designMode='on' | |
108 | + if(flag != 'init') { window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));} | |
109 | + editor = CodePress.getEditor(); | |
110 | + o = editor.innerHTML; | |
111 | + o = o.replace(/<br>/g,'\n'); | |
112 | + o = o.replace(/<.*?>/g,''); | |
113 | + x = z = this.split(o,flag); | |
114 | + x = x.replace(/\n/g,'<br>'); | |
115 | + | |
116 | + if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]); | |
117 | + | |
118 | + for(i=0;i<Language.syntax.length;i++) | |
119 | + x = x.replace(Language.syntax[i].input,Language.syntax[i].output); | |
120 | + | |
121 | + editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.split(z).join(x); | |
122 | + if(flag!='init') this.findString(); | |
123 | + }, | |
124 | + | |
125 | + getLastWord : function() { | |
126 | + var rangeAndCaret = CodePress.getRangeAndCaret(); | |
127 | + words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]); | |
128 | + words = words.replace(/[\s\n\r\);\W]/g,'\n').split('\n'); | |
129 | + return words[words.length-1].replace(/[\W]/gi,'').toLowerCase(); | |
130 | + }, | |
131 | + | |
132 | + snippets : function(evt) { | |
133 | + var snippets = Language.snippets; | |
134 | + var trigger = this.getLastWord(); | |
135 | + for (var i=0; i<snippets.length; i++) { | |
136 | + if(snippets[i].input == trigger) { | |
137 | + var content = snippets[i].output.replace(/</g,'<'); | |
138 | + content = content.replace(/>/g,'>'); | |
139 | + if(content.indexOf('$0')<0) content += cc; | |
140 | + else content = content.replace(/\$0/,cc); | |
141 | + content = content.replace(/\n/g,'<br>'); | |
142 | + var pattern = new RegExp(trigger+cc,'gi'); | |
143 | + evt.preventDefault(); // prevent the tab key from being added | |
144 | + this.syntaxHighlight('snippets',pattern,content); | |
145 | + } | |
146 | + } | |
147 | + }, | |
148 | + | |
149 | + readOnly : function() { | |
150 | + document.designMode = (arguments[0]) ? 'off' : 'on'; | |
151 | + }, | |
152 | + | |
153 | + complete : function(trigger) { | |
154 | + window.getSelection().getRangeAt(0).deleteContents(); | |
155 | + var complete = Language.complete; | |
156 | + for (var i=0; i<complete.length; i++) { | |
157 | + if(complete[i].input == trigger) { | |
158 | + var pattern = new RegExp('\\'+trigger+cc); | |
159 | + var content = complete[i].output.replace(/\$0/g,cc); | |
160 | + parent.setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen | |
161 | + } | |
162 | + } | |
163 | + }, | |
164 | + | |
165 | + getCompleteChars : function() { | |
166 | + var cChars = ''; | |
167 | + for(var i=0;i<Language.complete.length;i++) | |
168 | + cChars += '|'+Language.complete[i].input; | |
169 | + return cChars+'|'; | |
170 | + }, | |
171 | + | |
172 | + getCompleteEndingChars : function() { | |
173 | + var cChars = ''; | |
174 | + for(var i=0;i<Language.complete.length;i++) | |
175 | + cChars += '|'+Language.complete[i].output.charAt(Language.complete[i].output.length-1); | |
176 | + return cChars+'|'; | |
177 | + }, | |
178 | + | |
179 | + completeEnding : function(trigger) { | |
180 | + var range = window.getSelection().getRangeAt(0); | |
181 | + try { | |
182 | + range.setEnd(range.endContainer, range.endOffset+1) | |
183 | + } | |
184 | + catch(e) { | |
185 | + return false; | |
186 | + } | |
187 | + var next_character = range.toString() | |
188 | + range.setEnd(range.endContainer, range.endOffset-1) | |
189 | + if(next_character != trigger) return false; | |
190 | + else { | |
191 | + range.setEnd(range.endContainer, range.endOffset+1) | |
192 | + range.deleteContents(); | |
193 | + return true; | |
194 | + } | |
195 | + }, | |
196 | + | |
197 | + shortcuts : function() { | |
198 | + var cCode = arguments[0]; | |
199 | + if(cCode==13) cCode = '[enter]'; | |
200 | + else if(cCode==32) cCode = '[space]'; | |
201 | + else cCode = '['+String.fromCharCode(charCode).toLowerCase()+']'; | |
202 | + for(var i=0;i<Language.shortcuts.length;i++) | |
203 | + if(Language.shortcuts[i].input == cCode) | |
204 | + this.insertCode(Language.shortcuts[i].output,false); | |
205 | + }, | |
206 | + | |
207 | + getRangeAndCaret : function() { | |
208 | + var range = window.getSelection().getRangeAt(0); | |
209 | + var range2 = range.cloneRange(); | |
210 | + var node = range.endContainer; | |
211 | + var caret = range.endOffset; | |
212 | + range2.selectNode(node); | |
213 | + return [range2.toString(),caret]; | |
214 | + }, | |
215 | + | |
216 | + insertCode : function(code,replaceCursorBefore) { | |
217 | + var range = window.getSelection().getRangeAt(0); | |
218 | + var node = window.document.createTextNode(code); | |
219 | + var selct = window.getSelection(); | |
220 | + var range2 = range.cloneRange(); | |
221 | + // Insert text at cursor position | |
222 | + selct.removeAllRanges(); | |
223 | + range.deleteContents(); | |
224 | + range.insertNode(node); | |
225 | + // Move the cursor to the end of text | |
226 | + range2.selectNode(node); | |
227 | + range2.collapse(replaceCursorBefore); | |
228 | + selct.removeAllRanges(); | |
229 | + selct.addRange(range2); | |
230 | + }, | |
231 | + | |
232 | + // get code from editor | |
233 | + getCode : function() { | |
234 | + if(!document.getElementsByTagName('pre')[0] || editor.innerHTML == '') | |
235 | + editor = CodePress.getEditor(); | |
236 | + var code = editor.innerHTML; | |
237 | + code = code.replace(/<br>/g,'\n'); | |
238 | + code = code.replace(/\u2009/g,''); | |
239 | + code = code.replace(/<.*?>/g,''); | |
240 | + code = code.replace(/</g,'<'); | |
241 | + code = code.replace(/>/g,'>'); | |
242 | + code = code.replace(/&/gi,'&'); | |
243 | + return code; | |
244 | + }, | |
245 | + | |
246 | + // put code inside editor | |
247 | + setCode : function() { | |
248 | + var code = arguments[0]; | |
249 | + code = code.replace(/\u2009/gi,''); | |
250 | + code = code.replace(/&/gi,'&'); | |
251 | + code = code.replace(/</g,'<'); | |
252 | + code = code.replace(/>/g,'>'); | |
253 | + editor.innerHTML = code; | |
254 | + if (code == '') | |
255 | + document.getElementsByTagName('body')[0].innerHTML = ''; | |
256 | + }, | |
257 | + | |
258 | + // undo and redo methods | |
259 | + actions : { | |
260 | + pos : -1, // actual history position | |
261 | + history : [], // history vector | |
262 | + | |
263 | + undo : function() { | |
264 | + editor = CodePress.getEditor(); | |
265 | + if(editor.innerHTML.indexOf(cc)==-1){ | |
266 | + if(editor.innerHTML != " ") | |
267 | + window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc)); | |
268 | + this.history[this.pos] = editor.innerHTML; | |
269 | + } | |
270 | + this.pos --; | |
271 | + if(typeof(this.history[this.pos])=='undefined') this.pos ++; | |
272 | + editor.innerHTML = this.history[this.pos]; | |
273 | + if(editor.innerHTML.indexOf(cc)>-1) editor.innerHTML+=cc; | |
274 | + CodePress.findString(); | |
275 | + }, | |
276 | + | |
277 | + redo : function() { | |
278 | + // editor = CodePress.getEditor(); | |
279 | + this.pos++; | |
280 | + if(typeof(this.history[this.pos])=='undefined') this.pos--; | |
281 | + editor.innerHTML = this.history[this.pos]; | |
282 | + CodePress.findString(); | |
283 | + }, | |
284 | + | |
285 | + next : function() { // get next vector position and clean old ones | |
286 | + if(this.pos>20) this.history[this.pos-21] = undefined; | |
287 | + return ++this.pos; | |
288 | + } | |
289 | + } | |
290 | +} | |
291 | + | |
292 | +Language={}; | |
293 | +window.addEventListener('load', function() { CodePress.initialize('new'); }, true); | |
0 | 294 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,304 @@ |
1 | +/* | |
2 | + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ | |
3 | + * | |
4 | + * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com> | |
5 | + * | |
6 | + * Developers: | |
7 | + * Fernando M.A.d.S. <fermads@gmail.com> | |
8 | + * Michael Hurni <michael.hurni@gmail.com> | |
9 | + * Contributors: | |
10 | + * Martin D. Kirk | |
11 | + * | |
12 | + * This program is free software; you can redistribute it and/or modify it under the terms of the | |
13 | + * GNU Lesser General Public License as published by the Free Software Foundation. | |
14 | + * | |
15 | + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php | |
16 | + */ | |
17 | + | |
18 | +CodePress = { | |
19 | + scrolling : false, | |
20 | + autocomplete : true, | |
21 | + | |
22 | + // set initial vars and start sh | |
23 | + initialize : function() { | |
24 | + if(typeof(editor)=='undefined' && !arguments[0]) return; | |
25 | + chars = '|32|46|62|'; // charcodes that trigger syntax highlighting | |
26 | + cc = '\u2009'; // carret char | |
27 | + editor = document.getElementsByTagName('pre')[0]; | |
28 | + editor.contentEditable = 'true'; | |
29 | + document.getElementsByTagName('body')[0].onfocus = function() {editor.focus();} | |
30 | + document.attachEvent('onkeydown', this.metaHandler); | |
31 | + document.attachEvent('onkeypress', this.keyHandler); | |
32 | + window.attachEvent('onscroll', function() { if(!CodePress.scrolling) setTimeout(function(){CodePress.syntaxHighlight('scroll')},1)}); | |
33 | + completeChars = this.getCompleteChars(); | |
34 | + completeEndingChars = this.getCompleteEndingChars(); | |
35 | + setTimeout(function() { window.scroll(0,0) },50); // scroll IE to top | |
36 | + }, | |
37 | + | |
38 | + // treat key bindings | |
39 | + keyHandler : function(evt) { | |
40 | + charCode = evt.keyCode; | |
41 | + fromChar = String.fromCharCode(charCode); | |
42 | + | |
43 | + if( (completeEndingChars.indexOf('|'+fromChar+'|')!= -1 || completeChars.indexOf('|'+fromChar+'|')!=-1 )&& CodePress.autocomplete) { // auto complete | |
44 | + if(!CodePress.completeEnding(fromChar)) | |
45 | + CodePress.complete(fromChar); | |
46 | + } | |
47 | + else if(chars.indexOf('|'+charCode+'|')!=-1||charCode==13) { // syntax highlighting | |
48 | + CodePress.syntaxHighlight('generic'); | |
49 | + } | |
50 | + }, | |
51 | + | |
52 | + metaHandler : function(evt) { | |
53 | + keyCode = evt.keyCode; | |
54 | + | |
55 | + if(keyCode==9 || evt.tabKey) { | |
56 | + CodePress.snippets(); | |
57 | + } | |
58 | + else if((keyCode==122||keyCode==121||keyCode==90) && evt.ctrlKey) { // undo and redo | |
59 | + (keyCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo(); | |
60 | + evt.returnValue = false; | |
61 | + } | |
62 | + else if(keyCode==34||keyCode==33) { // handle page up/down for IE | |
63 | + self.scrollBy(0, (keyCode==34) ? 200 : -200); | |
64 | + evt.returnValue = false; | |
65 | + } | |
66 | + else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed | |
67 | + CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML; | |
68 | + } | |
69 | + else if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && keyCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo) | |
70 | + CodePress.shortcuts(keyCode); | |
71 | + evt.returnValue = false; | |
72 | + } | |
73 | + else if(keyCode==86 && evt.ctrlKey) { // handle paste | |
74 | + window.clipboardData.setData('Text',window.clipboardData.getData('Text').replace(/\t/g,'\u2008')); | |
75 | + top.setTimeout(function(){CodePress.syntaxHighlight('paste');},10); | |
76 | + } | |
77 | + else if(keyCode==67 && evt.ctrlKey) { // handle cut | |
78 | + // window.clipboardData.setData('Text',x[0]); | |
79 | + // code = window.clipboardData.getData('Text'); | |
80 | + } | |
81 | + }, | |
82 | + | |
83 | + // put cursor back to its original position after every parsing | |
84 | + | |
85 | + | |
86 | + findString : function() { | |
87 | + range = self.document.body.createTextRange(); | |
88 | + if(range.findText(cc)){ | |
89 | + range.select(); | |
90 | + range.text = ''; | |
91 | + } | |
92 | + }, | |
93 | + | |
94 | + // split big files, highlighting parts of it | |
95 | + split : function(code,flag) { | |
96 | + if(flag=='scroll') { | |
97 | + this.scrolling = true; | |
98 | + return code; | |
99 | + } | |
100 | + else { | |
101 | + this.scrolling = false; | |
102 | + mid = code.indexOf(cc); | |
103 | + if(mid-2000<0) {ini=0;end=4000;} | |
104 | + else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;} | |
105 | + else {ini=mid-2000;end=mid+2000;} | |
106 | + code = code.substring(ini,end); | |
107 | + return code.substring(code.indexOf('<P>'),code.lastIndexOf('</P>')+4); | |
108 | + } | |
109 | + }, | |
110 | + | |
111 | + // syntax highlighting parser | |
112 | + syntaxHighlight : function(flag) { | |
113 | + if(flag!='init') document.selection.createRange().text = cc; | |
114 | + o = editor.innerHTML; | |
115 | + if(flag=='paste') { // fix pasted text | |
116 | + o = o.replace(/<BR>/g,'\r\n'); | |
117 | + o = o.replace(/\u2008/g,'\t'); | |
118 | + } | |
119 | + o = o.replace(/<P>/g,'\n'); | |
120 | + o = o.replace(/<\/P>/g,'\r'); | |
121 | + o = o.replace(/<.*?>/g,''); | |
122 | + o = o.replace(/ /g,''); | |
123 | + o = '<PRE><P>'+o+'</P></PRE>'; | |
124 | + o = o.replace(/\n\r/g,'<P></P>'); | |
125 | + o = o.replace(/\n/g,'<P>'); | |
126 | + o = o.replace(/\r/g,'<\/P>'); | |
127 | + o = o.replace(/<P>(<P>)+/,'<P>'); | |
128 | + o = o.replace(/<\/P>(<\/P>)+/,'</P>'); | |
129 | + o = o.replace(/<P><\/P>/g,'<P><BR/></P>'); | |
130 | + x = z = this.split(o,flag); | |
131 | + | |
132 | + if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]); | |
133 | + | |
134 | + for(i=0;i<Language.syntax.length;i++) | |
135 | + x = x.replace(Language.syntax[i].input,Language.syntax[i].output); | |
136 | + | |
137 | + editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.replace(z,x); | |
138 | + if(flag!='init') this.findString(); | |
139 | + }, | |
140 | + | |
141 | + snippets : function(evt) { | |
142 | + var snippets = Language.snippets; | |
143 | + var trigger = this.getLastWord(); | |
144 | + for (var i=0; i<snippets.length; i++) { | |
145 | + if(snippets[i].input == trigger) { | |
146 | + var content = snippets[i].output.replace(/</g,'<'); | |
147 | + content = content.replace(/>/g,'>'); | |
148 | + if(content.indexOf('$0')<0) content += cc; | |
149 | + else content = content.replace(/\$0/,cc); | |
150 | + content = content.replace(/\n/g,'</P><P>'); | |
151 | + var pattern = new RegExp(trigger+cc,"gi"); | |
152 | + this.syntaxHighlight('snippets',pattern,content); | |
153 | + } | |
154 | + } | |
155 | + }, | |
156 | + | |
157 | + readOnly : function() { | |
158 | + editor.contentEditable = (arguments[0]) ? 'false' : 'true'; | |
159 | + }, | |
160 | + | |
161 | + complete : function(trigger) { | |
162 | + var complete = Language.complete; | |
163 | + for (var i=0; i<complete.length; i++) { | |
164 | + if(complete[i].input == trigger) { | |
165 | + var pattern = new RegExp('\\'+trigger+cc); | |
166 | + var content = complete[i].output.replace(/\$0/g,cc); | |
167 | + setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen | |
168 | + } | |
169 | + } | |
170 | + }, | |
171 | + | |
172 | + getCompleteChars : function() { | |
173 | + var cChars = ''; | |
174 | + for(var i=0;i<Language.complete.length;i++) | |
175 | + cChars += '|'+Language.complete[i].input; | |
176 | + return cChars+'|'; | |
177 | + }, | |
178 | + | |
179 | + getCompleteEndingChars : function() { | |
180 | + var cChars = ''; | |
181 | + for(var i=0;i<Language.complete.length;i++) | |
182 | + cChars += '|'+Language.complete[i].output.charAt(Language.complete[i].output.length-1); | |
183 | + return cChars+'|'; | |
184 | + }, | |
185 | + | |
186 | + completeEnding : function(trigger) { | |
187 | + var range = document.selection.createRange(); | |
188 | + try { | |
189 | + range.moveEnd('character', 1) | |
190 | + } | |
191 | + catch(e) { | |
192 | + return false; | |
193 | + } | |
194 | + var next_character = range.text | |
195 | + range.moveEnd('character', -1) | |
196 | + if(next_character != trigger ) return false; | |
197 | + else { | |
198 | + range.moveEnd('character', 1) | |
199 | + range.text='' | |
200 | + return true; | |
201 | + } | |
202 | + }, | |
203 | + | |
204 | + shortcuts : function() { | |
205 | + var cCode = arguments[0]; | |
206 | + if(cCode==13) cCode = '[enter]'; | |
207 | + else if(cCode==32) cCode = '[space]'; | |
208 | + else cCode = '['+String.fromCharCode(keyCode).toLowerCase()+']'; | |
209 | + for(var i=0;i<Language.shortcuts.length;i++) | |
210 | + if(Language.shortcuts[i].input == cCode) | |
211 | + this.insertCode(Language.shortcuts[i].output,false); | |
212 | + }, | |
213 | + | |
214 | + getLastWord : function() { | |
215 | + var rangeAndCaret = CodePress.getRangeAndCaret(); | |
216 | + words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]); | |
217 | + words = words.replace(/[\s\n\r\);\W]/g,'\n').split('\n'); | |
218 | + return words[words.length-1].replace(/[\W]/gi,'').toLowerCase(); | |
219 | + }, | |
220 | + | |
221 | + getRangeAndCaret : function() { | |
222 | + var range = document.selection.createRange(); | |
223 | + var caret = Math.abs(range.moveStart('character', -1000000)+1); | |
224 | + range = this.getCode(); | |
225 | + range = range.replace(/\n\r/gi,' '); | |
226 | + range = range.replace(/\n/gi,''); | |
227 | + return [range.toString(),caret]; | |
228 | + }, | |
229 | + | |
230 | + insertCode : function(code,replaceCursorBefore) { | |
231 | + var repdeb = ''; | |
232 | + var repfin = ''; | |
233 | + | |
234 | + if(replaceCursorBefore) { repfin = code; } | |
235 | + else { repdeb = code; } | |
236 | + | |
237 | + if(typeof document.selection != 'undefined') { | |
238 | + var range = document.selection.createRange(); | |
239 | + range.text = repdeb + repfin; | |
240 | + range = document.selection.createRange(); | |
241 | + range.move('character', -repfin.length); | |
242 | + range.select(); | |
243 | + } | |
244 | + }, | |
245 | + | |
246 | + // get code from editor | |
247 | + getCode : function() { | |
248 | + var code = editor.innerHTML; | |
249 | + code = code.replace(/<br>/g,'\n'); | |
250 | + code = code.replace(/<\/p>/gi,'\r'); | |
251 | + code = code.replace(/<p>/i,''); // IE first line fix | |
252 | + code = code.replace(/<p>/gi,'\n'); | |
253 | + code = code.replace(/ /gi,''); | |
254 | + code = code.replace(/\u2009/g,''); | |
255 | + code = code.replace(/<.*?>/g,''); | |
256 | + code = code.replace(/</g,'<'); | |
257 | + code = code.replace(/>/g,'>'); | |
258 | + code = code.replace(/&/gi,'&'); | |
259 | + return code; | |
260 | + }, | |
261 | + | |
262 | + // put code inside editor | |
263 | + setCode : function() { | |
264 | + var code = arguments[0]; | |
265 | + code = code.replace(/\u2009/gi,''); | |
266 | + code = code.replace(/&/gi,'&'); | |
267 | + code = code.replace(/</g,'<'); | |
268 | + code = code.replace(/>/g,'>'); | |
269 | + editor.innerHTML = '<pre>'+code+'</pre>'; | |
270 | + }, | |
271 | + | |
272 | + | |
273 | + // undo and redo methods | |
274 | + actions : { | |
275 | + pos : -1, // actual history position | |
276 | + history : [], // history vector | |
277 | + | |
278 | + undo : function() { | |
279 | + if(editor.innerHTML.indexOf(cc)==-1){ | |
280 | + document.selection.createRange().text = cc; | |
281 | + this.history[this.pos] = editor.innerHTML; | |
282 | + } | |
283 | + this.pos--; | |
284 | + if(typeof(this.history[this.pos])=='undefined') this.pos++; | |
285 | + editor.innerHTML = this.history[this.pos]; | |
286 | + CodePress.findString(); | |
287 | + }, | |
288 | + | |
289 | + redo : function() { | |
290 | + this.pos++; | |
291 | + if(typeof(this.history[this.pos])=='undefined') this.pos--; | |
292 | + editor.innerHTML = this.history[this.pos]; | |
293 | + CodePress.findString(); | |
294 | + }, | |
295 | + | |
296 | + next : function() { // get next vector position and clean old ones | |
297 | + if(this.pos>20) this.history[this.pos-21] = undefined; | |
298 | + return ++this.pos; | |
299 | + } | |
300 | + } | |
301 | +} | |
302 | + | |
303 | +Language={}; | |
304 | +window.attachEvent('onload', function() { CodePress.initialize('new');}); | |
0 | 305 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,260 @@ |
1 | +/* | |
2 | + * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/ | |
3 | + * | |
4 | + * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com> | |
5 | + * | |
6 | + * Contributors : | |
7 | + * | |
8 | + * Michael Hurni <michael.hurni@gmail.com> | |
9 | + * | |
10 | + * This program is free software; you can redistribute it and/or modify it under the terms of the | |
11 | + * GNU Lesser General Public License as published by the Free Software Foundation. | |
12 | + * | |
13 | + * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php | |
14 | + */ | |
15 | + | |
16 | + | |
17 | +CodePress = { | |
18 | + scrolling : false, | |
19 | + autocomplete : true, | |
20 | + | |
21 | + // set initial vars and start sh | |
22 | + initialize : function() { | |
23 | + if(typeof(editor)=='undefined' && !arguments[0]) return; | |
24 | + chars = '|32|46|62|'; // charcodes that trigger syntax highlighting | |
25 | + cc = '\u2009'; // control char | |
26 | + editor = document.getElementsByTagName('body')[0]; | |
27 | + document.designMode = 'on'; | |
28 | + document.addEventListener('keyup', this.keyHandler, true); | |
29 | + window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false); | |
30 | + completeChars = this.getCompleteChars(); | |
31 | +// CodePress.syntaxHighlight('init'); | |
32 | + }, | |
33 | + | |
34 | + // treat key bindings | |
35 | + keyHandler : function(evt) { | |
36 | + keyCode = evt.keyCode; | |
37 | + charCode = evt.charCode; | |
38 | + | |
39 | + if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo) | |
40 | + CodePress.shortcuts(charCode?charCode:keyCode); | |
41 | + } | |
42 | + else if(completeChars.indexOf('|'+String.fromCharCode(charCode)+'|')!=-1 && CodePress.autocomplete) { // auto complete | |
43 | + CodePress.complete(String.fromCharCode(charCode)); | |
44 | + } | |
45 | + else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting | |
46 | + CodePress.syntaxHighlight('generic'); | |
47 | + } | |
48 | + else if(keyCode==9 || evt.tabKey) { // snippets activation (tab) | |
49 | + CodePress.snippets(evt); | |
50 | + } | |
51 | + else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed | |
52 | + CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML; | |
53 | + } | |
54 | + else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo | |
55 | + (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo(); | |
56 | + evt.preventDefault(); | |
57 | + } | |
58 | + else if(keyCode==86 && evt.ctrlKey) { // paste | |
59 | + // TODO: pasted text should be parsed and highlighted | |
60 | + } | |
61 | + }, | |
62 | + | |
63 | + // put cursor back to its original position after every parsing | |
64 | + findString : function() { | |
65 | + var sel = window.getSelection(); | |
66 | + var range = window.document.createRange(); | |
67 | + var span = window.document.getElementsByTagName('span')[0]; | |
68 | + | |
69 | + range.selectNode(span); | |
70 | + sel.removeAllRanges(); | |
71 | + sel.addRange(range); | |
72 | + span.parentNode.removeChild(span); | |
73 | + //if(self.find(cc)) | |
74 | + //window.getSelection().getRangeAt(0).deleteContents(); | |
75 | + }, | |
76 | + | |
77 | + // split big files, highlighting parts of it | |
78 | + split : function(code,flag) { | |
79 | + if(flag=='scroll') { | |
80 | + this.scrolling = true; | |
81 | + return code; | |
82 | + } | |
83 | + else { | |
84 | + this.scrolling = false; | |
85 | + mid = code.indexOf('<SPAN>'); | |
86 | + if(mid-2000<0) {ini=0;end=4000;} | |
87 | + else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;} | |
88 | + else {ini=mid-2000;end=mid+2000;} | |
89 | + code = code.substring(ini,end); | |
90 | + return code; | |
91 | + } | |
92 | + }, | |
93 | + | |
94 | + // syntax highlighting parser | |
95 | + syntaxHighlight : function(flag) { | |
96 | + //if(document.designMode=='off') document.designMode='on' | |
97 | + if(flag!='init') { | |
98 | + var span = document.createElement('span'); | |
99 | + window.getSelection().getRangeAt(0).insertNode(span); | |
100 | + } | |
101 | + | |
102 | + o = editor.innerHTML; | |
103 | +// o = o.replace(/<br>/g,'\r\n'); | |
104 | +// o = o.replace(/<(b|i|s|u|a|em|tt|ins|big|cite|strong)?>/g,''); | |
105 | + //alert(o) | |
106 | + o = o.replace(/<(?!span|\/span|br).*?>/gi,''); | |
107 | +// alert(o) | |
108 | +// x = o; | |
109 | + x = z = this.split(o,flag); | |
110 | + //alert(z) | |
111 | +// x = x.replace(/\r\n/g,'<br>'); | |
112 | + x = x.replace(/\t/g, ' '); | |
113 | + | |
114 | + | |
115 | + if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]); | |
116 | + | |
117 | + for(i=0;i<Language.syntax.length;i++) | |
118 | + x = x.replace(Language.syntax[i].input,Language.syntax[i].output); | |
119 | + | |
120 | + editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.split(z).join(x); | |
121 | + | |
122 | + if(flag!='init') this.findString(); | |
123 | + }, | |
124 | + | |
125 | + getLastWord : function() { | |
126 | + var rangeAndCaret = CodePress.getRangeAndCaret(); | |
127 | + words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]); | |
128 | + words = words.replace(/[\s\n\r\);\W]/g,'\n').split('\n'); | |
129 | + return words[words.length-1].replace(/[\W]/gi,'').toLowerCase(); | |
130 | + }, | |
131 | + | |
132 | + snippets : function(evt) { | |
133 | + var snippets = Language.snippets; | |
134 | + var trigger = this.getLastWord(); | |
135 | + for (var i=0; i<snippets.length; i++) { | |
136 | + if(snippets[i].input == trigger) { | |
137 | + var content = snippets[i].output.replace(/</g,'<'); | |
138 | + content = content.replace(/>/g,'>'); | |
139 | + if(content.indexOf('$0')<0) content += cc; | |
140 | + else content = content.replace(/\$0/,cc); | |
141 | + content = content.replace(/\n/g,'<br>'); | |
142 | + var pattern = new RegExp(trigger+cc,'gi'); | |
143 | + evt.preventDefault(); // prevent the tab key from being added | |
144 | + this.syntaxHighlight('snippets',pattern,content); | |
145 | + } | |
146 | + } | |
147 | + }, | |
148 | + | |
149 | + readOnly : function() { | |
150 | + document.designMode = (arguments[0]) ? 'off' : 'on'; | |
151 | + }, | |
152 | + | |
153 | + complete : function(trigger) { | |
154 | + window.getSelection().getRangeAt(0).deleteContents(); | |
155 | + var complete = Language.complete; | |
156 | + for (var i=0; i<complete.length; i++) { | |
157 | + if(complete[i].input == trigger) { | |
158 | + var pattern = new RegExp('\\'+trigger+cc); | |
159 | + var content = complete[i].output.replace(/\$0/g,cc); | |
160 | + parent.setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen | |
161 | + } | |
162 | + } | |
163 | + }, | |
164 | + | |
165 | + getCompleteChars : function() { | |
166 | + var cChars = ''; | |
167 | + for(var i=0;i<Language.complete.length;i++) | |
168 | + cChars += '|'+Language.complete[i].input; | |
169 | + return cChars+'|'; | |
170 | + }, | |
171 | + | |
172 | + shortcuts : function() { | |
173 | + var cCode = arguments[0]; | |
174 | + if(cCode==13) cCode = '[enter]'; | |
175 | + else if(cCode==32) cCode = '[space]'; | |
176 | + else cCode = '['+String.fromCharCode(charCode).toLowerCase()+']'; | |
177 | + for(var i=0;i<Language.shortcuts.length;i++) | |
178 | + if(Language.shortcuts[i].input == cCode) | |
179 | + this.insertCode(Language.shortcuts[i].output,false); | |
180 | + }, | |
181 | + | |
182 | + getRangeAndCaret : function() { | |
183 | + var range = window.getSelection().getRangeAt(0); | |
184 | + var range2 = range.cloneRange(); | |
185 | + var node = range.endContainer; | |
186 | + var caret = range.endOffset; | |
187 | + range2.selectNode(node); | |
188 | + return [range2.toString(),caret]; | |
189 | + }, | |
190 | + | |
191 | + insertCode : function(code,replaceCursorBefore) { | |
192 | + var range = window.getSelection().getRangeAt(0); | |
193 | + var node = window.document.createTextNode(code); | |
194 | + var selct = window.getSelection(); | |
195 | + var range2 = range.cloneRange(); | |
196 | + // Insert text at cursor position | |
197 | + selct.removeAllRanges(); | |
198 | + range.deleteContents(); | |
199 | + range.insertNode(node); | |
200 | + // Move the cursor to the end of text | |
201 | + range2.selectNode(node); | |
202 | + range2.collapse(replaceCursorBefore); | |
203 | + selct.removeAllRanges(); | |
204 | + selct.addRange(range2); | |
205 | + }, | |
206 | + | |
207 | + // get code from editor | |
208 | + getCode : function() { | |
209 | + var code = editor.innerHTML; | |
210 | + code = code.replace(/<br>/g,'\n'); | |
211 | + code = code.replace(/\u2009/g,''); | |
212 | + code = code.replace(/<.*?>/g,''); | |
213 | + code = code.replace(/</g,'<'); | |
214 | + code = code.replace(/>/g,'>'); | |
215 | + code = code.replace(/&/gi,'&'); | |
216 | + return code; | |
217 | + }, | |
218 | + | |
219 | + // put code inside editor | |
220 | + setCode : function() { | |
221 | + var code = arguments[0]; | |
222 | + code = code.replace(/\u2009/gi,''); | |
223 | + code = code.replace(/&/gi,'&'); | |
224 | + code = code.replace(/</g,'<'); | |
225 | + code = code.replace(/>/g,'>'); | |
226 | + editor.innerHTML = code; | |
227 | + }, | |
228 | + | |
229 | + // undo and redo methods | |
230 | + actions : { | |
231 | + pos : -1, // actual history position | |
232 | + history : [], // history vector | |
233 | + | |
234 | + undo : function() { | |
235 | + if(editor.innerHTML.indexOf(cc)==-1){ | |
236 | + window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc)); | |
237 | + this.history[this.pos] = editor.innerHTML; | |
238 | + } | |
239 | + this.pos--; | |
240 | + if(typeof(this.history[this.pos])=='undefined') this.pos++; | |
241 | + editor.innerHTML = this.history[this.pos]; | |
242 | + CodePress.findString(); | |
243 | + }, | |
244 | + | |
245 | + redo : function() { | |
246 | + this.pos++; | |
247 | + if(typeof(this.history[this.pos])=='undefined') this.pos--; | |
248 | + editor.innerHTML = this.history[this.pos]; | |
249 | + CodePress.findString(); | |
250 | + }, | |
251 | + | |
252 | + next : function() { // get next vector position and clean old ones | |
253 | + if(this.pos>20) this.history[this.pos-21] = undefined; | |
254 | + return ++this.pos; | |
255 | + } | |
256 | + } | |
257 | +} | |
258 | + | |
259 | +Language={}; | |
260 | +window.addEventListener('load', function() { CodePress.initialize('new'); }, true); | ... | ... |
16.2 KB
... | ... | @@ -0,0 +1,443 @@ |
1 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
2 | + | |
3 | +<html> | |
4 | +<head> | |
5 | + <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title> | |
6 | + | |
7 | + <style> | |
8 | + body {color:#000;background-color:white;font:15px georgia, "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; letter-spacing:0.01em;margin:15px;} | |
9 | + p {margin:0 0 15px 0;} | |
10 | + a,a:visited {color:#7f0055;} | |
11 | + select {background:#ffffe1;} | |
12 | + button {margin-top:5px;} | |
13 | + button.actions {width:171px;font-family:arial;} | |
14 | + h1 {color:#7f0055;margin:0;padding:0;font-size:42px;font-weight:normal;} | |
15 | + h1 a {text-decoration:none;} | |
16 | + h2 {margin:0;} | |
17 | + h2 a {text-decoration:none;font-weight:normal;font-size:22px;color:black !important;} | |
18 | + h3 {font-size:20px;font-weight:normal;padding:0;margin:25px 0 5px 0;color:#7f0055;font-weight:bold;border-bottom:2px dotted #d8d8d8;} | |
19 | + h4 {font-size:18px;font-weight:normal;z-index:0;} | |
20 | + code {color:#0080c0;font-size:13px;font-weight:bold;} | |
21 | + ol, ul {padding:5px 0 5px 25px;margin:0;} | |
22 | + ol li, ul li {margin:8px 0 8px 0;} | |
23 | + | |
24 | + #logo {text-align:center;background-color:#d6d6d6;padding:10px;-moz-border-radius:5px;border:1px solid silver;} | |
25 | + #container {width:700px;margin:20px auto;padding:25px;border:3px solid #d9d9d9;-moz-border-radius:10px;background:#f8f8f8;} | |
26 | + #languages {margin:5px 0;} | |
27 | + | |
28 | + #menu {width:100%;background:#7f0055;-moz-border-radius:4px;} | |
29 | + #menu a {font:bold 17px georgia;color:white;padding:4px;display:block;border-left:1px solid white;text-align:center;text-decoration:none;} | |
30 | + #menu a:hover {background:#b9669e;} | |
31 | + | |
32 | + .hidden-code {display:none;} | |
33 | + .copycode {border:1px dotted gray;padding:10px;background:white;font-family:monospace;color:gray} | |
34 | + </style> | |
35 | + | |
36 | +</head> | |
37 | + | |
38 | +<body> | |
39 | +<div id="container"> | |
40 | + | |
41 | +<div id="logo"> | |
42 | + <h1><a href="http://codepress.org/">CodePress</a></h1> | |
43 | + <h2><a href="http://codepress.org/">Online Real Time Syntax Highlighting Editor</a></h2> | |
44 | +</div> | |
45 | + | |
46 | +<br /> | |
47 | + | |
48 | +<table cellpadding="0" cellspacing="0" id="menu"> | |
49 | +<tr> | |
50 | + <td> | |
51 | + <a href="http://www.codepress.org/index.php">Home/Download</a> | |
52 | + </td> | |
53 | + <td> | |
54 | + <a href="http://www.codepress.org/install.php"> Install </a> | |
55 | + </td> | |
56 | + <td> | |
57 | + <a href="http://www.codepress.org/to-do.php"> To-do </a> | |
58 | + </td> | |
59 | + <td> | |
60 | + <a href="http://www.codepress.org/about.php" id="about"> About </a> | |
61 | + </td> | |
62 | +</tr> | |
63 | +</table> | |
64 | + | |
65 | +<h4> | |
66 | + CodePress is web-based source code editor with syntax highlighting written in JavaScript that colors text in real time while it's being typed in the browser. | |
67 | +</h4> | |
68 | + | |
69 | +<p> | |
70 | + Go to <strong><a href="http://codepress.org/">http://codepress.org/</a></strong> for updates. | |
71 | +</p> | |
72 | + | |
73 | +<h3>Demo</h3> | |
74 | +<div id="languages"> | |
75 | + <em>choose example in:</em> | |
76 | + <button onclick="cp1.edit('cp-php','php')">PHP</button> | |
77 | + <button onclick="cp1.edit('cp-javascript','javascript')">JavaScript</button> | |
78 | + <button onclick="cp1.edit('cp-java','java')">Java</button> | |
79 | + <button onclick="cp1.edit('cp-perl','perl')">Perl</button> | |
80 | + <button onclick="cp1.edit('cp-sql','sql')">SQL</button> | |
81 | + <button onclick="cp1.edit('cp-html','html')">HTML</button> | |
82 | + <button onclick="cp1.edit('cp-css','css')">CSS</button> | |
83 | +</div> | |
84 | + | |
85 | +<textarea id="cp1" class="codepress php" style="width:700px;height:300px;" wrap="off"> | |
86 | +<?php | |
87 | +// Very simple implementation of server side script | |
88 | + | |
89 | +if(isset($_GET['file'])) { | |
90 | + $file = basename($_GET['file']); | |
91 | + $full_file = $path['server'].'/'.$path['webdocs'].'/'.$path['files']."/".$file; | |
92 | + if(file_exists($full_file)) { | |
93 | + $code = file_get_contents($full_file); | |
94 | + $code = preg_replace("/>/","&gt;",$code); | |
95 | + $code = preg_replace("/</","&lt;",$code); | |
96 | + $language = getLanguage($file); | |
97 | + } | |
98 | +} | |
99 | +?> | |
100 | + | |
101 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
102 | +<html> | |
103 | +<head> | |
104 | + <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title> | |
105 | + <link type="text/css" href="languages/codepress-<?=$language?>.css" rel="stylesheet" id="cp-lang-style" /> | |
106 | + <script type="text/javascript" src="codepress.js"></script> | |
107 | + <script type="text/javascript"> | |
108 | + CodePress.language = '<?=$language?>'; | |
109 | + </script> | |
110 | +</head> | |
111 | +<body id="ffedt"><pre id="ieedt"><?=$code?></pre></body> | |
112 | +</html> | |
113 | +</textarea> | |
114 | + | |
115 | +<br /><br /> | |
116 | + | |
117 | +<textarea id="codepress2" class="codepress javascript linenumbers-off" style="width:700px;height:200px;" wrap="off"> | |
118 | +//set language | |
119 | +this.setLanguage = function() { | |
120 | + if(arguments[0]) { | |
121 | + language = (typeof(Content.languages[arguments[0]])!='undefined') ? arguments[0] : this.setLanguage(); | |
122 | + cpLanguage.innerHTML = Content.languages[language].name; | |
123 | + if(cpBody.document.designMode=='on') cpBody.document.designMode = 'off'; | |
124 | + CodePress.loadScript(cpBody.document, '../languages/'+language+'.js', function () { cpBody.CodePress.syntaxHighlight('init'); }) | |
125 | + cpBody.document.getElementById('cp-lang-style').href = '../languages/'+language+'.css'; | |
126 | + this.hideMenu(); | |
127 | + } | |
128 | + else { | |
129 | + var extension = filename.replace(/.*\.([^\.]+)$/,'$1'); | |
130 | + var aux = false; | |
131 | + for(lang in Content.languages) { | |
132 | + extensions = ','+Content.languages[lang].extensions+','; | |
133 | + if(extensions.match(','+extension+',')) aux = lang; | |
134 | + } | |
135 | + language = (aux) ? aux : 'generic'; | |
136 | + } | |
137 | +} | |
138 | +</textarea> | |
139 | + | |
140 | +<p> | |
141 | + <button class="actions" onclick="alert(codepress2.getCode())">get code from editor</button> | |
142 | + <button class="actions" onclick="codepress2.toggleEditor()">turn on/off CodePress</button> | |
143 | + <button class="actions" onclick="codepress2.toggleLineNumbers()">show/hide line numbers</button> | |
144 | + <button class="actions" onclick="codepress2.toggleAutoComplete()">turn on/off auto-complete</button> | |
145 | + <button class="actions" onclick="codepress2.toggleReadOnly()">turn on/off read only</button> | |
146 | +</p> | |
147 | + | |
148 | + | |
149 | + | |
150 | +<h3>Installation</h3> | |
151 | +<ol> | |
152 | + <li> | |
153 | + <p> | |
154 | + <a href="http://codepress.org/">Download</a> and uncompress CodePress under a directory inside your webserver.<br> | |
155 | + Example:<strong> http://yourserver/codepress/</strong><br /> | |
156 | + Since CodePress is pure JavaScript and HTML, you can also test it without a webserver. | |
157 | + </p> | |
158 | + </li> | |
159 | + <li> | |
160 | + <p> | |
161 | + Insert CodePress script somewhere in your page inside the <code><head></code> or above the <code></body></code> tag. | |
162 | + </p> | |
163 | + | |
164 | + <p class="copycode"> | |
165 | + <script src="/codepress/codepress.js" type="text/javascript"></script> | |
166 | + </p> | |
167 | + </li> | |
168 | + | |
169 | + <li> | |
170 | + <p> | |
171 | + Add the <code><textarea></code> tag to the place on your page you want CodePress to appear. CodePress will inherit the width and height of your textarea. | |
172 | + When the page loads, it will automatically replace your textarea with a CodePress window. | |
173 | + </p> | |
174 | + <p class="copycode"> | |
175 | + <textarea id="myCpWindow" class="codepress javascript linenumbers-off"><br /> | |
176 | + // your code here<br /> | |
177 | + </textarea> | |
178 | + </p> | |
179 | + <ul> | |
180 | + <li> | |
181 | + The <code>javascript</code> portion of the class="" means that the language being edited is JavaScript. | |
182 | + </li> | |
183 | + <li> | |
184 | + The <code>codepress</code> portion of the class="" is mandatory and indicates a textarea to be replaced for a CodePress window. | |
185 | + </li> | |
186 | + <li> | |
187 | + Other class options are <code>linenumbers-off</code>, <code>autocomplete-off</code> and <code>readonly-on</code>. | |
188 | + </li> | |
189 | + <li> | |
190 | + Careful not to use the same id for two different CodePress windows (<code><textarea id="<strong>xx</strong>"...></code>) | |
191 | + </li> | |
192 | + </ul> | |
193 | + | |
194 | + </li> | |
195 | +</ol> | |
196 | + | |
197 | +<h3>You also can...</h3> | |
198 | +<ol> | |
199 | + <li> | |
200 | + Open/edit code from a different textarea.<br /> | |
201 | + Example: <code>textarea_id.edit('other_textarea_id','language')</code><br> | |
202 | + </li> | |
203 | + <li> | |
204 | + Get code from CodePress window.<br /> | |
205 | + Example: <code>textarea_id.getCode()</code><br> | |
206 | + </li> | |
207 | + <li> | |
208 | + Turn on/off CodePress editor and return to the regular textarea.<br /> | |
209 | + Example: <code>textarea_id.toggleEditor()</code><br> | |
210 | + </li> | |
211 | + <li> | |
212 | + Turn on/off line numbers.<br /> | |
213 | + Example: <code>textarea_id.toggleLineNumbers()</code><br> | |
214 | + </li> | |
215 | + <li> | |
216 | + Turn on/off read only.<br /> | |
217 | + Example: <code>textarea_id.toggleReadOnly()</code><br> | |
218 | + </li> | |
219 | + <li> | |
220 | + Turn on/off auto-complete.<br /> | |
221 | + Example: <code>textarea_id.toggleAutoComplete()</code><br> | |
222 | + </li> | |
223 | + | |
224 | +</ol> | |
225 | + | |
226 | +<!-- p> | |
227 | + You may want to use [id].getCode() to get the content code from CodePress window and save it to your server since CodePress only edit files and do not save them. | |
228 | +</p> | |
229 | +<p> | |
230 | + You may also want to open files from server. You'll have to write a server side script and replace the JavaScript call on codepress.js from codepress.html to codepress.php (if your server side language is PHP, of course). | |
231 | +</p --> | |
232 | + | |
233 | +<h3>License</h3> | |
234 | +<p> | |
235 | + CodePress is distributed under the <a href="http://www.opensource.org/licenses/lgpl-license.php">LGPL</a>. If your software is <a href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">compatible</a> with this licence or it is under <a href="http://creativecommons.org/">Creative Commons</a>, you can use it as you want. Just keep the credits somewhere around. | |
236 | +</p> | |
237 | + | |
238 | + | |
239 | +</div><!--/container--> | |
240 | + | |
241 | + | |
242 | + | |
243 | +<!-- hidden codes for loading --> | |
244 | +<textarea id="cp-php" class="hidden-code"> | |
245 | +<?php | |
246 | +// Very simple implementation of server side script | |
247 | + | |
248 | +if(isset($_GET['file'])) { | |
249 | + $file = basename($_GET['file']); | |
250 | + $full_file = $path['server'].'/'.$path['webdocs'].'/'.$path['files']."/".$file; | |
251 | + if(file_exists($full_file)) { | |
252 | + $code = file_get_contents($full_file); | |
253 | + $code = preg_replace("/>/","&gt;",$code); | |
254 | + $code = preg_replace("/</","&lt;",$code); | |
255 | + $language = getLanguage($file); | |
256 | + } | |
257 | +} | |
258 | +?> | |
259 | + | |
260 | +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> | |
261 | +<html> | |
262 | +<head> | |
263 | + <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title> | |
264 | + <link type="text/css" href="languages/codepress-<?=$language?>.css" rel="stylesheet" id="cp-lang-style" /> | |
265 | + <script type="text/javascript" src="codepress.js"></script> | |
266 | + <script type="text/javascript"> | |
267 | + CodePress.language = '<?=$language?>'; | |
268 | + </script> | |
269 | +</head> | |
270 | +<body id="ffedt"><pre id="ieedt"><?=$code?></pre></body> | |
271 | +</html> | |
272 | +</textarea> | |
273 | + | |
274 | +<textarea id="cp-javascript" class="hidden-code"> | |
275 | +CodePress = function(obj) { | |
276 | + var self = document.createElement('iframe'); | |
277 | + self.textarea = obj; | |
278 | + self.textarea.disabled = true; | |
279 | + self.style.height = self.textarea.clientHeight +'px'; | |
280 | + self.style.width = self.textarea.clientWidth +'px'; | |
281 | + | |
282 | + self.initialize = function() { | |
283 | + self.editor = self.contentWindow.CodePress; | |
284 | + self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0]; | |
285 | + self.editor.setCode(self.textarea.value); | |
286 | + self.editor.syntaxHighlight('init'); | |
287 | + } | |
288 | + | |
289 | + self.edit = function(id,language) { | |
290 | + self.language = (language) ? language : self.textarea.className.replace(/ ?codepress ?/,''); | |
291 | + self.src = cpPath+'modules/codepress.html?engine='+self.getEngine()+'&language='+self.language; | |
292 | + if(self.attachEvent) self.attachEvent('onload',self.initialize); | |
293 | + else self.addEventListener('load',self.initialize,false); | |
294 | + } | |
295 | +} | |
296 | +</textarea> | |
297 | + | |
298 | +<textarea id="cp-autoit" class="hidden-code"> | |
299 | +#include | |
300 | +IsNumber(15) | |
301 | +@Macro | |
302 | +;comment | |
303 | +$var = "string" | |
304 | +</textarea> | |
305 | + | |
306 | +<textarea id="cp-java" class="hidden-code"> | |
307 | +import java.io.FileFilter; | |
308 | +import java.io.IOException; | |
309 | +import java.io.PrintWriter; | |
310 | + | |
311 | +/** | |
312 | + * Project ECCO - File manager class | |
313 | + * @author Fernando M.A.d.S. | |
314 | + */ | |
315 | +public class FileManager extends HttpServlet { | |
316 | + | |
317 | + private static final long serialVersionUID = 1L; | |
318 | + private static String login = "feanndor"; // session var should come here | |
319 | + private static String usersPath = System.getProperty("user.dir")+File.separator+"htdocs"+File.separator+"ecco"+File.separator+"users"+File.separator; | |
320 | + private static File dir = new File(usersPath+login+File.separator); | |
321 | + static boolean existDirectories = false; | |
322 | + static int isDirectory = 0; | |
323 | + | |
324 | + public FileFilter filterFiles(File dir) { | |
325 | + return (new FileFilter() { | |
326 | + public boolean accept(File pathname) { | |
327 | + return !(pathname.isDirectory()); | |
328 | + } | |
329 | + }); | |
330 | + } | |
331 | +} | |
332 | +</textarea> | |
333 | + | |
334 | +<textarea id="cp-perl" class="hidden-code"> | |
335 | +#!/usr/bin/perl | |
336 | +# The first line of the script envokes Perl | |
337 | + | |
338 | +# Scalar variables | |
339 | +$var1 = "Hello World"; | |
340 | +$var2 = 14.6; | |
341 | + | |
342 | +# Array variables | |
343 | +@arr1 = ("zero","one","two","three","four"); | |
344 | + | |
345 | +# Hash variable, or associative array | |
346 | +%hash1 = ("one","Monday","two", "Tuesday","three", "Wednesday","four","Thursday"); | |
347 | + | |
348 | +# Some simple printing | |
349 | +print $var1; | |
350 | + | |
351 | +# Subroutine | |
352 | +sub test() { | |
353 | + print "ok"; | |
354 | +} | |
355 | +</textarea> | |
356 | + | |
357 | +<textarea id="cp-sql" class="hidden-code"> | |
358 | +-- | |
359 | +-- simple select example | |
360 | +-- | |
361 | +SELECT * FROM books | |
362 | + WHERE price > 100.00 and price < 150.00 | |
363 | + ORDER BY title | |
364 | + | |
365 | +SELECT books.title, count(*) AS Authors | |
366 | + FROM books | |
367 | + JOIN book_authors | |
368 | + ON books.book_number = book_authors.book_number | |
369 | + GROUP BY books.title | |
370 | + | |
371 | +-- insert, update and delete examples | |
372 | + | |
373 | +INSERT INTO my_table (field1, field2, field3) VALUES ('test', 'N', NULL); | |
374 | + | |
375 | +BEGIN WORK; | |
376 | + UPDATE inventory SET quantity = quantity - 3 WHERE item = 'pants'; | |
377 | +COMMIT; | |
378 | +</textarea> | |
379 | + | |
380 | +<textarea id="cp-html" class="hidden-code"> | |
381 | +<html> | |
382 | +<head> | |
383 | + <title>CodePress - Online Real Time Syntax Highlighting Editor</title> | |
384 | + | |
385 | + <style type="text/css"> | |
386 | + @import url(styles.css); | |
387 | + </style> | |
388 | + <script type="text/javascript"> | |
389 | + function getCode() { | |
390 | + alert(textWithoutHighlighting); | |
391 | + } | |
392 | + </script> | |
393 | +</head> | |
394 | +<body> | |
395 | +<div id="logo"> | |
396 | + <h1><a href="http://codepress.org/">CodePress</a></h1> | |
397 | + <h2>Online Real Time Syntax Highlighting Editor</h2> | |
398 | + <img src="testimage.gif" /> | |
399 | +</div> | |
400 | +<div id="languages"> | |
401 | + <em>choose language:</em> | |
402 | + <button onclick="edit('codepress.php',this)" id="default">PHP</button> | |
403 | + <button onclick="edit('FileManager.java',this)">Java</button> | |
404 | +</div> | |
405 | +</body> | |
406 | +</html> | |
407 | +</textarea> | |
408 | + | |
409 | +<textarea id="cp-css" class="hidden-code"> | |
410 | +/* CSS comment */ | |
411 | + | |
412 | +body { | |
413 | + color:#000; | |
414 | + background-color:white; | |
415 | + font:15px Georgia, "Lucida Grande", Arial, sans-serif; | |
416 | + letter-spacing:0.01em; | |
417 | + margin:15px; | |
418 | +} | |
419 | + | |
420 | +p { | |
421 | + margin:0 0 15px 0; | |
422 | +} | |
423 | + | |
424 | +a,a:visited { | |
425 | + color:#7f0055; | |
426 | +} | |
427 | + | |
428 | +select { | |
429 | + background:#ffffe1; | |
430 | +} | |
431 | + | |
432 | +h1 { | |
433 | + color:#7f0055; | |
434 | + margin:0; | |
435 | + padding:0; | |
436 | + font-size:42px; | |
437 | +} | |
438 | +</textarea> | |
439 | + | |
440 | + | |
441 | +<script src="codepress.js" type="text/javascript"></script> | |
442 | +</body> | |
443 | +</html> | ... | ... |
... | ... | @@ -0,0 +1,71 @@ |
1 | +/* | |
2 | + * CodePress color styles for ASP-VB syntax highlighting | |
3 | + * By Martin D. Kirk | |
4 | + */ | |
5 | +/* tags */ | |
6 | + | |
7 | +b { | |
8 | + color:#000080; | |
9 | +} | |
10 | +/* comments */ | |
11 | +big, big b, big em, big ins, big s, strong i, strong i b, strong i s, strong i u, strong i a, strong i a u, strong i s u { | |
12 | + color:gray; | |
13 | + font-weight:normal; | |
14 | +} | |
15 | +/* ASP comments */ | |
16 | +strong dfn, strong dfn a,strong dfn var, strong dfn a u, strong dfn u{ | |
17 | + color:gray; | |
18 | + font-weight:normal; | |
19 | +} | |
20 | + /* attributes */ | |
21 | +s, s b, span s u, span s cite, strong span s { | |
22 | + color:#5656fa ; | |
23 | + font-weight:normal; | |
24 | +} | |
25 | + /* strings */ | |
26 | +strong s,strong s b, strong s u, strong s cite { | |
27 | + color:#009900; | |
28 | + font-weight:normal; | |
29 | +} | |
30 | +strong ins{ | |
31 | + color:#000000; | |
32 | + font-weight:bold; | |
33 | +} | |
34 | + /* Syntax */ | |
35 | +strong a, strong a u { | |
36 | + color:#0000FF; | |
37 | + font-weight:; | |
38 | +} | |
39 | + /* Native Keywords */ | |
40 | +strong u { | |
41 | + color:#990099; | |
42 | + font-weight:bold; | |
43 | +} | |
44 | +/* Numbers */ | |
45 | +strong var{ | |
46 | + color:#FF0000; | |
47 | +} | |
48 | +/* ASP Language */ | |
49 | +span{ | |
50 | + color:#990000; | |
51 | + font-weight:bold; | |
52 | +} | |
53 | +strong i,strong a i, strong u i { | |
54 | + color:#009999; | |
55 | +} | |
56 | +/* style */ | |
57 | +em { | |
58 | + color:#800080; | |
59 | + font-style:normal; | |
60 | +} | |
61 | + /* script */ | |
62 | +ins { | |
63 | + color:#800000; | |
64 | + font-weight:bold; | |
65 | +} | |
66 | + | |
67 | +/* <?php and ?> */ | |
68 | +cite, s cite { | |
69 | + color:red; | |
70 | + font-weight:bold; | |
71 | +} | |
0 | 72 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,117 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for ASP-vbscript syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// ASP VBScript | |
6 | +Language.syntax = [ | |
7 | +// all tags | |
8 | + { input : /(<[^!%|!%@]*?>)/g, output : '<b>$1</b>' }, | |
9 | +// style tags | |
10 | + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' }, | |
11 | +// script tags | |
12 | + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '<ins>$1</ins><ins>$2</ins><ins>$3</ins>' }, | |
13 | +// strings "" and attributes | |
14 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, | |
15 | +// ASP Comment | |
16 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<dfn>\'$1$2</dfn>'}, | |
17 | +// <%.* | |
18 | + { input : /(<%)/g, output : '<strong>$1' }, | |
19 | +// .*%> | |
20 | + { input : /(%>)/g, output : '$1</strong>' }, | |
21 | +// <%@...%> | |
22 | + { input : /(<%@)(.+?)(%>)/gi, output : '$1<span>$2</span>$3' }, | |
23 | +//Numbers | |
24 | + { input : /\b([\d]+)\b/g, output : '<var>$1</var>' }, | |
25 | +// Reserved Words 1 (Blue) | |
26 | + { input : /\b(And|As|ByRef|ByVal|Call|Case|Class|Const|Dim|Do|Each|Else|ElseIf|Empty|End|Eqv|Exit|False|For|Function)\b/gi, output : '<a>$1</a>' }, | |
27 | + { input : /\b(Get|GoTo|If|Imp|In|Is|Let|Loop|Me|Mod|Enum|New|Next|Not|Nothing|Null|On|Option|Or|Private|Public|ReDim|Rem)\b/gi, output : '<a>$1</a>' }, | |
28 | + { input : /\b(Resume|Select|Set|Stop|Sub|Then|To|True|Until|Wend|While|With|Xor|Execute|Randomize|Erase|ExecuteGlobal|Explicit|step)\b/gi, output : '<a>$1</a>' }, | |
29 | +// Reserved Words 2 (Purple) | |
30 | + { input : /\b(Abandon|Abs|AbsolutePage|AbsolutePosition|ActiveCommand|ActiveConnection|ActualSize|AddHeader|AddNew|AppendChunk)\b/gi, output : '<u>$1</u>' }, | |
31 | + { input : /\b(AppendToLog|Application|Array|Asc|Atn|Attributes|BeginTrans|BinaryRead|BinaryWrite|BOF|Bookmark|Boolean|Buffer|Byte)\b/gi, output : '<u>$1</u>' }, | |
32 | + { input : /\b(CacheControl|CacheSize|Cancel|CancelBatch|CancelUpdate|CBool|CByte|CCur|CDate|CDbl|Charset|Chr|CInt|Clear)\b/gi, output : '<u>$1</u>' }, | |
33 | + { input : /\b(ClientCertificate|CLng|Clone|Close|CodePage|CommandText|CommandType|CommandTimeout|CommitTrans|CompareBookmarks|ConnectionString|ConnectionTimeout)\b/gi, output : '<u>$1</u>' }, | |
34 | + { input : /\b(Contents|ContentType|Cookies|Cos|CreateObject|CreateParameter|CSng|CStr|CursorLocation|CursorType|DataMember|DataSource|Date|DateAdd|DateDiff)\b/gi, output : '<u>$1</u>' }, | |
35 | + { input : /\b(DatePart|DateSerial|DateValue|Day|DefaultDatabase|DefinedSize|Delete|Description|Double|EditMode|Eof|EOF|err|Error)\b/gi, output : '<u>$1</u>' }, | |
36 | + { input : /\b(Exp|Expires|ExpiresAbsolute|Filter|Find|Fix|Flush|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent)\b/gi, output : '<u>$1</u>' }, | |
37 | + { input : /\b(GetChunk|GetLastError|GetRows|GetString|Global|HelpContext|HelpFile|Hex|Hour|HTMLEncode|IgnoreCase|Index|InStr|InStrRev)\b/gi, output : '<u>$1</u>' }, | |
38 | + { input : /\b(Int|Integer|IsArray|IsClientConnected|IsDate|IsolationLevel|Join|LBound|LCase|LCID|Left|Len|Lock|LockType|Log|Long|LTrim)\b/gi, output : '<u>$1</u>' }, | |
39 | + { input : /\b(MapPath|MarshalOptions|MaxRecords|Mid|Minute|Mode|Month|MonthName|Move|MoveFirst|MoveLast|MoveNext|MovePrevious|Name|NextRecordset)\b/gi, output : '<u>$1</u>' }, | |
40 | + { input : /\b(Now|Number|NumericScale|ObjectContext|Oct|Open|OpenSchema|OriginalValue|PageCount|PageSize|Pattern|PICS|Precision|Prepared|Property)\b/gi, output : '<u>$1</u>' }, | |
41 | + { input : /\b(Provider|QueryString|RecordCount|Redirect|RegExp|Remove|RemoveAll|Replace|Requery|Request|Response|Resync|Right|Rnd)\b/gi, output : '<u>$1</u>' }, | |
42 | + { input : /\b(RollbackTrans|RTrim|Save|ScriptTimeout|Second|Seek|Server|ServerVariables|Session|SessionID|SetAbort|SetComplete|Sgn)\b/gi, output : '<u>$1</u>' }, | |
43 | + { input : /\b(Sin|Size|Sort|Source|Space|Split|Sqr|State|StaticObjects|Status|StayInSync|StrComp|String|StrReverse|Supports|Tan|Time)\b/gi, output : '<u>$1</u>' }, | |
44 | + { input : /\b(Timeout|Timer|TimeSerial|TimeValue|TotalBytes|Transfer|Trim|Type|Type|UBound|UCase|UnderlyingValue|UnLock|Update|UpdateBatch)\b/gi, output : '<u>$1</u>' }, | |
45 | + { input : /\b(URLEncode|Value|Value|Version|Weekday|WeekdayName|Write|Year)\b/gi, output : '<u>$1</u>' }, | |
46 | +// Reserved Words 3 (Turquis) | |
47 | + { input : /\b(vbBlack|vbRed|vbGreen|vbYellow|vbBlue|vbMagenta|vbCyan|vbWhite|vbBinaryCompare|vbTextCompare)\b/gi, output : '<i>$1</i>' }, | |
48 | + { input : /\b(vbSunday|vbMonday|vbTuesday|vbWednesday|vbThursday|vbFriday|vbSaturday|vbUseSystemDayOfWeek)\b/gi, output : '<i>$1</i>' }, | |
49 | + { input : /\b(vbFirstJan1|vbFirstFourDays|vbFirstFullWeek|vbGeneralDate|vbLongDate|vbShortDate|vbLongTime|vbShortTime)\b/gi, output : '<i>$1</i>' }, | |
50 | + { input : /\b(vbObjectError|vbCr|VbCrLf|vbFormFeed|vbLf|vbNewLine|vbNullChar|vbNullString|vbTab|vbVerticalTab|vbUseDefault|vbTrue)\b/gi, output : '<i>$1</i>' }, | |
51 | + { input : /\b(vbFalse|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant)\b/gi, output : '<i>$1</i>' }, | |
52 | + { input : /\b(vbDataObject|vbDecimal|vbByte|vbArray)\b/gi, output : '<i>$1</i>' }, | |
53 | +// html comments | |
54 | + { input : /(<!--.*?-->.)/g, output : '<big>$1</big>' } | |
55 | +] | |
56 | + | |
57 | +Language.Functions = [ | |
58 | + // Output at index 0, must be the desired tagname surrounding a $1 | |
59 | + // Name is the index from the regex that marks the functionname | |
60 | + {input : /(function|sub)([ ]*?)(\w+)([ ]*?\()/gi , output : '<ins>$1</ins>', name : '$3'} | |
61 | +] | |
62 | + | |
63 | +Language.snippets = [ | |
64 | +//Conditional | |
65 | + { input : 'if', output : 'If $0 Then\n\t\nEnd If' }, | |
66 | + { input : 'ifelse', output : 'If $0 Then\n\t\n\nElse\n\t\nEnd If' }, | |
67 | + { input : 'case', output : 'Select Case $0\n\tCase ?\n\tCase Else\nEnd Select'}, | |
68 | +//Response | |
69 | + { input : 'rw', output : 'Response.Write( $0 )' }, | |
70 | + { input : 'resc', output : 'Response.Cookies( $0 )' }, | |
71 | + { input : 'resb', output : 'Response.Buffer'}, | |
72 | + { input : 'resflu', output : 'Response.Flush()'}, | |
73 | + { input : 'resend', output : 'Response.End'}, | |
74 | +//Request | |
75 | + { input : 'reqc', output : 'Request.Cookies( $0 )' }, | |
76 | + { input : 'rq', output : 'Request.Querystring("$0")' }, | |
77 | + { input : 'rf', output : 'Request.Form("$0")' }, | |
78 | +//FSO | |
79 | + { input : 'fso', output : 'Set fso = Server.CreateObject("Scripting.FileSystemObject")\n$0' }, | |
80 | + { input : 'setfo', output : 'Set fo = fso.getFolder($0)' }, | |
81 | + { input : 'setfi', output : 'Set fi = fso.getFile($0)' }, | |
82 | + { input : 'twr', output : 'Set f = fso.CreateTextFile($0,true)\'overwrite\nf.WriteLine()\nf.Close'}, | |
83 | + { input : 'tre', output : 'Set f = fso.OpenTextFile($0, 1)\nf.ReadAll\nf.Close'}, | |
84 | +//Server | |
85 | + { input : 'mapp', output : 'Server.Mappath($0)' }, | |
86 | +//Loops | |
87 | + { input : 'foreach', output : 'For Each $0 in ?\n\t\nNext' }, | |
88 | + { input : 'for', output : 'For $0 to ? step ?\n\t\nNext' }, | |
89 | + { input : 'do', output : 'Do While($0)\n\t\nLoop' }, | |
90 | + { input : 'untilrs', output : 'do until rs.eof\n\t\nrs.movenext\nloop' }, | |
91 | +//ADO | |
92 | + { input : 'adorec', output : 'Set rs = Server.CreateObject("ADODB.Recordset")' }, | |
93 | + { input : 'adocon', output : 'Set Conn = Server.CreateObject("ADODB.Connection")' }, | |
94 | + { input : 'adostr', output : 'Set oStr = Server.CreateObject("ADODB.Stream")' }, | |
95 | +//Http Request | |
96 | + { input : 'xmlhttp', output : 'Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")\nxmlHttp.open("GET", $0, false)\nxmlHttp.send()\n?=xmlHttp.responseText' }, | |
97 | + { input : 'xmldoc', output : 'Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")\nxmldoc.async=false\nxmldoc.load(request)'}, | |
98 | +//Functions | |
99 | + { input : 'func', output : 'Function $0()\n\t\n\nEnd Function'}, | |
100 | + { input : 'sub', output : 'Sub $0()\n\t\nEnd Sub'} | |
101 | + | |
102 | +] | |
103 | + | |
104 | +Language.complete = [ | |
105 | + //{ input : '\'', output : '\'$0\'' }, | |
106 | + { input : '"', output : '"$0"' }, | |
107 | + { input : '(', output : '\($0\)' }, | |
108 | + { input : '[', output : '\[$0\]' }, | |
109 | + { input : '{', output : '{\n\t$0\n}' } | |
110 | +] | |
111 | + | |
112 | +Language.shortcuts = [ | |
113 | + { input : '[space]', output : ' ' }, | |
114 | + { input : '[enter]', output : '<br />' } , | |
115 | + { input : '[j]', output : 'testing' }, | |
116 | + { input : '[7]', output : '&' } | |
117 | +] | |
0 | 118 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +/** | |
2 | + * CodePress color styles for AutoIt syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +u {font-style:normal;color:#000090;font-weight:bold;font-family:Monospace;} | |
6 | +var {color:#AA0000;font-weight:bold;font-style:normal;} | |
7 | +em {color:#FF33FF;} | |
8 | +ins {color:#AC00A9;} | |
9 | +i {color:#F000FF;} | |
10 | +b {color:#FF0000;} | |
11 | +a {color:#0080FF;font-weight:bold;} | |
12 | +s, s u, s b {color:#9999CC;font-weight:normal;} | |
13 | +cite, cite *{color:#009933;font-weight:normal;} | |
0 | 14 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,32 @@ |
1 | +/** | |
2 | + * CodePress regular expressions for AutoIt syntax highlighting | |
3 | + * @author: James Brooks, Michael HURNI | |
4 | + */ | |
5 | + | |
6 | +// AutoIt | |
7 | +Language.syntax = [ | |
8 | + { input : /({|}|\(|\))/g, output : '<b>$1</b>' }, // Brackets | |
9 | + { input : /(\*|\+|-)/g, output : '<b>$1</b>' }, // Operator | |
10 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : "<s>\"$1$2</s>" }, // strings double | |
11 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single | |
12 | + { input : /\b([\d]+)\b/g, output : '<ins>$1</ins>' }, // Numbers | |
13 | + { input : /#(.*?)(<br>|<\/P>)/g, output : '<i>#$1</i>$2' }, // Directives and Includes | |
14 | + { input : /(\$[\w\.]*)/g, output : '<var>$1</var>' }, // vars | |
15 | + { input : /(_[\w\.]*)/g, output : '<a>$1</a>' }, // underscored word | |
16 | + { input : /(\@[\w\.]*)/g, output : '<em>$1</em>' }, // Macros | |
17 | + { input : /\b(Abs|ACos|AdlibDisable|AdlibEnable|Asc|AscW|ASin|Assign|ATan|AutoItSetOption|AutoItWinGetTitle|AutoItWinSetTitle|Beep|Binary|BinaryLen|BinaryMid|BinaryToString|BitAND|BitNOT|BitOR|BitSHIFT|BitXOR|BlockInput|Break|Call|CDTray|Ceiling|Chr|ChrW|ClipGet|ClipPut|ConsoleRead|ConsoleWrite|ConsoleWriteError|ControlClick|ControlCommand|ControlDisable|ControlEnable|ControlFocus|ControlGetFocus|ControlGetHandle|ControlGetPos|ControlGetText|ControlHide|ControlListView|ControlMove|ControlSend|ControlSetText|ControlShow|Cos|Dec|DirCopy|DirCreate|DirGetSize|DirMove|DirRemove|DllCall|DllCall|DllClose|DllOpen|DllStructCreate|DllStructGetData|DllStructGetPtr|DllStructGetSize|DllStructSetData|DriveGetDrive|DriveGetFileSystem|DriveGetLabel|DriveGetSerial|DriveGetType|DriveMapAdd|DriveMapDel|DriveMapGet|DriveSetLabel|DriveSpaceFree|DriveSpaceTotal|DriveStatus|EnvGet|EnvSet|EnvUpdate|Eval|Execute|Exp|FileChangeDir|FileClose|FileCopy|FileCreateNTFS|FileCreateShortcut|FileDelete|FileExists|FileFindFirstFile|FileFindNextFile|FileGetAttrib|FileGetLongName|FileGetShortcut|FileGetShortName|FileGetSize|FileGetTime|FileGetVersion|FileInstall|FileMove|FileOpen|FileOpenDialog|FileRead|FileReadLine|FileRecycle|FileRecycleEmpty|FileSaveDialog|FileSelectFolder|FileSetAttrib|FileSetTime|FileWrite|FileWriteLine|Floor|FtpSetProxy|GuiCreate|GuiCtrlCreateAvi|GuiCtrlCreateButton|GuiCtrlCreateCheckbox|GuiCtrlCreateCombo|GuiCtrlCreateContextMenu|GuiCtrlCreateDate|GuiCtrlCreateDummy|GuiCtrlCreateEdit|GuiCtrlCreateGraphic|GuiCtrlCreateGroup|GuiCtrlCreateIcon|GuiCtrlCreateInput|GuiCtrlCreateLabel|GuiCtrlCreateList|GuiCtrlCreateListView|GuiCtrlCreateListViewItem|GuiCtrlCreateMenu|GuiCtrlCreateMenuItem|GuiCtrlCreateMonthCal|GuiCtrlCreateObj|GuiCtrlCreatePic|GuiCtrlCreateProgress|GuiCtrlCreateRadio|GuiCtrlCreateSlider|GuiCtrlCreateTab|GuiCtrlCreateTabItem|GuiCtrlCreateUpdown|GuiCtrlDelete|GuiCtrlGetHandle|GuiCtrlGetState|GuiCtrlRead|GuiCtrlRecvMsg|GuiCtrlSentMsg|GuiCtrlSendToDummy|GuiCtrlSetBkColor|GuiCtrlSetColor|GuiCtrlSetCursor|GuiCtrlSetData|GuiCtrlSetFont|GuiCtrlSetGraphic|GuiCtrlSetImage|GuiCtrlSetLimit|GuiCtrlSetOnEvent|GuiCtrlSetPos|GuiCtrlResizing|GuiCtrlSetState|GuiCtrlSetTip|GuiDelete|GuiGetCursorInfo|GuiGetMsg|GuiGetStyle|GuiRegisterMsg|GuiSetBkColor|GuiSetCoord|GuiSetCursor|GuiSetFont|GuiSetHelp|GuiSetIcon|GuiSetOnEvent|GuiSetStat|GuiSetStyle|GuiStartGroup|GuiSwitch|Hex|HotKeySet|HttpSetProxy|HWnd|InetGet|InetGetSize|IniDelete|IniRead|IniReadSection|IniReadSectionNames|IniRenameSection|IniWrite|IniWriteSection|InputBox|Int|IsAdmin|IsArray|IsBinary|IsBool|IsDeclared|IsDllStruct|IsFloat|IsHWnd|IsInt|IsKeyword|IsNumber|IsObj|IsString|Log|MemGetStats|Mod|MouseClick|MouseClickDrag|MouseDown|MouseGetCursor|MouseGetPos|MouseMove|MouseUp|MouseWheel|MsgBox|Number|ObjCreate|ObjEvent|ObjGet|ObjName|Ping|PixelCheckSum|PixelGetColor|PixelSearch|ProcessClose|ProcessExists|ProcessList|ProcessSetPriority|ProcessWait|ProcessWaitClose|ProgressOff|ProcessOn|ProgressSet|Random|RegDelete|RegEnumKey|RegEnumVal|RegRead|RegWrite|Round|Run|RunAsSet|RunWait|Send|SetError|SetExtended|ShellExecute|ShellExecuteWait|Shutdown|Sin|Sleep|SoundPlay|SoundSetWaveVolume|SplashImageOn|SplashOff|SplashTextOn|Sqrt|SRandom|StatusbarGetText|StderrRead|StdinWrite|StdoutRead|String|StringAddCR|StringCompare|StringFormat|StringInStr|StringIsAlNum|StringIsAlpha|StringIsASCII|StringIsDigit|StringIsFloat|StringIsInt|StringIsLower|StringIsSpace|StringIsUpper|StringIsXDigit|StringLeft|StringLen|StringLower|StringMid|StringRegExp|StringRegExpReplace|StringReplace|StringRight|StringSplit|StringStripCR|StringStripWS|StringToBinary|StringTrimLeft|StringTrimRight|StringUpper|Tan|TCPAccept|TCPCloseSocket|TCPConnect|TCPListen|TCPNameToIP|TCPrecv|TCPSend|TCPShutdown|TCPStartup|TimerDiff|TimerInit|ToolTip|TrayCreateItem|TrayCreateMenu|TrayGetMenu|TrayGetMsg|TrayItemDelete|TrayItemGetHandle|TrayItemGetState|TrayItemGetText|TrayItemSetOnEvent|TrayItemSetState|TrayItemSetText|TraySetClick|TraySetIcon|TraySetOnEvent|TraySetPauseIcon|TraySetState|TraySetToolTip|TrayTip|UBound|UDPBind|UDPCloseSocket|UDPOpen|UDPRecv|UDPSend|WinActivate|WinActive|WinClose|WinExists|WinFlash|WinGetCaretPos|WinGetClassList|WinGetClientSize|WinGetHandle|WinGetPos|WinGetProcess|WinGetState|WinGetText|WinGetTitle|WinKill|WinList|WinMenuSelectItem|WinMinimizeAll|WinMinimizeAllUndo|WinMove|WinSetOnTop|WinSetState|WinSetTitle|WinSetTrans|WinWait|WinWaitActive|WinWaitClose|WinWaitNotActive)\b/g, output : '<u>$1</u>' } ,// reserved words | |
18 | + { input : /\B;(.*?)(<br>|<\/P>)/g, output : '<cite>;$1</cite>$2' }, // comments | |
19 | + { input : /#CS(.*?)#CE/g, output : '<cite>#CS$1#CE</cite>' } // Block Comments | |
20 | +] | |
21 | + | |
22 | +Language.snippets = [] | |
23 | + | |
24 | +Language.complete = [ | |
25 | +{ input : '\'',output : '\'$0\'' }, | |
26 | +{ input : '"', output : '"$0"' }, | |
27 | +{ input : '(', output : '\($0\)' }, | |
28 | +{ input : '[', output : '\[$0\]' }, | |
29 | +{ input : '{', output : '{\n\t$0\n}' } | |
30 | +] | |
31 | + | |
32 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,9 @@ |
1 | +/* | |
2 | + * CodePress color styles for Java syntax highlighting | |
3 | + * By Edwin de Jonge | |
4 | + */ | |
5 | + | |
6 | +b {color:#7F0055;font-weight:bold;font-style:normal;} /* reserved words */ | |
7 | +a {color:#2A0088;font-weight:bold;font-style:normal;} /* types */ | |
8 | +i, i b, i s {color:#3F7F5F;font-weight:bold;} /* comments */ | |
9 | +s, s b {color:#2A00FF;font-weight:normal;} /* strings */ | |
0 | 10 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,25 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for C# syntax highlighting | |
3 | + * By Edwin de Jonge | |
4 | + */ | |
5 | + | |
6 | +Language.syntax = [ // C# | |
7 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote | |
8 | + { input : /\'(.?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single quote | |
9 | + { input : /\b(abstract|as|base|break|case|catch|checked|continue|default|delegate|do|else|event|explicit|extern|false|finally|fixed|for|foreach|get|goto|if|implicit|in|interface|internal|is|lock|namespace|new|null|object|operator|out|override|params|partial|private|protected|public|readonly|ref|return|set|sealed|sizeof|static|stackalloc|switch|this|throw|true|try|typeof|unchecked|unsafe|using|value|virtual|while)\b/g, output : '<b>$1</b>' }, // reserved words | |
10 | + { input : /\b(bool|byte|char|class|double|float|int|interface|long|string|struct|void)\b/g, output : '<a>$1</a>' }, // types | |
11 | + { input : /([^:]|^)\/\/(.*?)(<br|<\/P)/g, output : '$1<i>//$2</i>$3' }, // comments // | |
12 | + { input : /\/\*(.*?)\*\//g, output : '<i>/*$1*/</i>' } // comments /* */ | |
13 | +]; | |
14 | + | |
15 | +Language.snippets = []; | |
16 | + | |
17 | +Language.complete = [ // Auto complete only for 1 character | |
18 | + {input : '\'',output : '\'$0\'' }, | |
19 | + {input : '"', output : '"$0"' }, | |
20 | + {input : '(', output : '\($0\)' }, | |
21 | + {input : '[', output : '\[$0\]' }, | |
22 | + {input : '{', output : '{\n\t$0\n}' } | |
23 | +]; | |
24 | + | |
25 | +Language.shortcuts = []; | |
0 | 26 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +/* | |
2 | + * CodePress color styles for CSS syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b, b a, b u {color:#000080;} /* tags, ids, classes */ | |
6 | +i, i b, i s, i a, i u {color:gray;} /* comments */ | |
7 | +s, s b {color:#a0a0dd;} /* parameters */ | |
8 | +a {color:#0000ff;} /* keys */ | |
9 | +u {color:red;} /* values */ | |
10 | + | ... | ... |
... | ... | @@ -0,0 +1,23 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for CSS syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// CSS | |
6 | +Language.syntax = [ | |
7 | + { input : /(.*?){(.*?)}/g,output : '<b>$1</b>{<u>$2</u>}' }, // tags, ids, classes, values | |
8 | + { input : /([\w-]*?):([^\/])/g,output : '<a>$1</a>:$2' }, // keys | |
9 | + { input : /\((.*?)\)/g,output : '(<s>$1</s>)' }, // parameters | |
10 | + { input : /\/\*(.*?)\*\//g,output : '<i>/*$1*/</i>'} // comments | |
11 | +] | |
12 | + | |
13 | +Language.snippets = [] | |
14 | + | |
15 | +Language.complete = [ | |
16 | + { input : '\'',output : '\'$0\'' }, | |
17 | + { input : '"', output : '"$0"' }, | |
18 | + { input : '(', output : '\($0\)' }, | |
19 | + { input : '[', output : '\[$0\]' }, | |
20 | + { input : '{', output : '{\n\t$0\n}' } | |
21 | +] | |
22 | + | |
23 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,9 @@ |
1 | +/* | |
2 | + * CodePress color styles for generic syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b {color:#7F0055;font-weight:bold;} /* reserved words */ | |
6 | +u {color:darkblue;font-weight:bold;} /* special words */ | |
7 | +i, i b, i s, i u, i em {color:green;font-weight:normal;} /* comments */ | |
8 | +s, s b, s em {color:#2A00FF;font-weight:normal;} /* strings */ | |
9 | +em {font-weight:bold;} /* special chars */ | |
0 | 10 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,25 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for generic syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// generic languages | |
6 | +Language.syntax = [ | |
7 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote | |
8 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single quote | |
9 | + { input : /\b(abstract|continue|for|new|switch|default|goto|boolean|do|if|private|this|break|double|protected|throw|byte|else|import|public|throws|case|return|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|const|float|while|function|label)\b/g, output : '<b>$1</b>' }, // reserved words | |
10 | + { input : /([\(\){}])/g, output : '<em>$1</em>' }, // special chars; | |
11 | + { input : /([^:]|^)\/\/(.*?)(<br|<\/P)/g, output : '$1<i>//$2</i>$3' }, // comments // | |
12 | + { input : /\/\*(.*?)\*\//g, output : '<i>/*$1*/</i>' } // comments /* */ | |
13 | +] | |
14 | + | |
15 | +Language.snippets = [] | |
16 | + | |
17 | +Language.complete = [ | |
18 | + { input : '\'', output : '\'$0\'' }, | |
19 | + { input : '"', output : '"$0"' }, | |
20 | + { input : '(', output : '\($0\)' }, | |
21 | + { input : '[', output : '\[$0\]' }, | |
22 | + { input : '{', output : '{\n\t$0\n}' } | |
23 | +] | |
24 | + | |
25 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,13 @@ |
1 | +/* | |
2 | + * CodePress color styles for HTML syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b {color:#000080;} /* tags */ | |
6 | +ins, ins b, ins s, ins em {color:gray;} /* comments */ | |
7 | +s, s b {color:#7777e4;} /* attribute values */ | |
8 | +a {color:green;} /* links */ | |
9 | +u {color:#E67300;} /* forms */ | |
10 | +big {color:#db0000;} /* images */ | |
11 | +em, em b {color:#800080;} /* style */ | |
12 | +strong {color:#800000;} /* script */ | |
13 | +tt i {color:darkblue;font-weight:bold;} /* script reserved words */ | ... | ... |
... | ... | @@ -0,0 +1,59 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for HTML syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// HTML | |
6 | +Language.syntax = [ | |
7 | + { input : /(<[^!]*?>)/g, output : '<b>$1</b>' }, // all tags | |
8 | + { input : /(<a .*?>|<\/a>)/g, output : '<a>$1</a>' }, // links | |
9 | + { input : /(<img .*?>)/g, output : '<big>$1</big>' }, // images | |
10 | + { input : /(<\/?(button|textarea|form|input|select|option|label).*?>)/g, output : '<u>$1</u>' }, // forms | |
11 | + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' }, // style tags | |
12 | + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '<strong>$1</strong><tt>$2</tt><strong>$3</strong>' }, // script tags | |
13 | + { input : /=(".*?")/g, output : '=<s>$1</s>' }, // atributes double quote | |
14 | + { input : /=('.*?')/g, output : '=<s>$1</s>' }, // atributes single quote | |
15 | + { input : /(<!--.*?-->.)/g, output : '<ins>$1</ins>' }, // comments | |
16 | + { input : /\b(alert|window|document|break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, output : '<i>$1</i>' } // script reserved words | |
17 | +] | |
18 | + | |
19 | +Language.snippets = [ | |
20 | + { input : 'aref', output : '<a href="$0"></a>' }, | |
21 | + { input : 'h1', output : '<h1>$0</h1>' }, | |
22 | + { input : 'h2', output : '<h2>$0</h2>' }, | |
23 | + { input : 'h3', output : '<h3>$0</h3>' }, | |
24 | + { input : 'h4', output : '<h4>$0</h4>' }, | |
25 | + { input : 'h5', output : '<h5>$0</h5>' }, | |
26 | + { input : 'h6', output : '<h6>$0</h6>' }, | |
27 | + { input : 'html', output : '<html>\n\t$0\n</html>' }, | |
28 | + { input : 'head', output : '<head>\n\t<meta http-equiv="content-type" content="text/html; charset=utf-8" />\n\t<title>$0</title>\n\t\n</head>' }, | |
29 | + { input : 'img', output : '<img src="$0" alt="" />' }, | |
30 | + { input : 'input', output : '<input name="$0" id="" type="" value="" />' }, | |
31 | + { input : 'label', output : '<label for="$0"></label>' }, | |
32 | + { input : 'legend', output : '<legend>\n\t$0\n</legend>' }, | |
33 | + { input : 'link', output : '<link rel="stylesheet" href="$0" type="text/css" media="screen" charset="utf-8" />' }, | |
34 | + { input : 'base', output : '<base href="$0" />' }, | |
35 | + { input : 'body', output : '<body>\n\t$0\n</body>' }, | |
36 | + { input : 'css', output : '<link rel="stylesheet" href="$0" type="text/css" media="screen" charset="utf-8" />' }, | |
37 | + { input : 'div', output : '<div>\n\t$0\n</div>' }, | |
38 | + { input : 'divid', output : '<div id="$0">\n\t\n</div>' }, | |
39 | + { input : 'dl', output : '<dl>\n\t<dt>\n\t\t$0\n\t</dt>\n\t<dd></dd>\n</dl>' }, | |
40 | + { input : 'fieldset', output : '<fieldset>\n\t$0\n</fieldset>' }, | |
41 | + { input : 'form', output : '<form action="$0" method="" name="">\n\t\n</form>' }, | |
42 | + { input : 'meta', output : '<meta name="$0" content="" />' }, | |
43 | + { input : 'p', output : '<p>$0</p>' }, | |
44 | + { input : 'script', output : '<script type="text/javascript" language="javascript" charset="utf-8">\n\t$0\t\n</script>' }, | |
45 | + { input : 'scriptsrc', output : '<script src="$0" type="text/javascript" language="javascript" charset="utf-8"></script>' }, | |
46 | + { input : 'span', output : '<span>$0</span>' }, | |
47 | + { input : 'table', output : '<table border="$0" cellspacing="" cellpadding="">\n\t<tr><th></th></tr>\n\t<tr><td></td></tr>\n</table>' }, | |
48 | + { input : 'style', output : '<style type="text/css" media="screen">\n\t$0\n</style>' } | |
49 | +] | |
50 | + | |
51 | +Language.complete = [ | |
52 | + { input : '\'',output : '\'$0\'' }, | |
53 | + { input : '"', output : '"$0"' }, | |
54 | + { input : '(', output : '\($0\)' }, | |
55 | + { input : '[', output : '\[$0\]' }, | |
56 | + { input : '{', output : '{\n\t$0\n}' } | |
57 | +] | |
58 | + | |
59 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,7 @@ |
1 | +/* | |
2 | + * CodePress color styles for Java syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b {color:#7F0055;font-weight:bold;font-style:normal;} /* reserved words */ | |
6 | +i, i b, i s {color:#3F7F5F;font-weight:bold;} /* comments */ | |
7 | +s, s b {color:#2A00FF;font-weight:normal;} /* strings */ | ... | ... |
... | ... | @@ -0,0 +1,24 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for Java syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// Java | |
6 | +Language.syntax = [ | |
7 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>'}, // strings double quote | |
8 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>'}, // strings single quote | |
9 | + { input : /\b(abstract|continue|for|new|switch|assert|default|goto|package|synchronized|boolean|do|if|private|this|break|double|implements|protected|throw|byte|else|import|public|throws|case|enum|instanceof|return|transient|catch|extends|int|short|try|char|final|interface|static|void|class|finally|long|strictfp|volatile|const|float|native|super|while)\b/g, output : '<b>$1</b>'}, // reserved words | |
10 | + { input : /([^:]|^)\/\/(.*?)(<br|<\/P)/g, output : '$1<i>//$2</i>$3'}, // comments // | |
11 | + { input : /\/\*(.*?)\*\//g, output : '<i>/*$1*/</i>' }// comments /* */ | |
12 | +] | |
13 | + | |
14 | +Language.snippets = [] | |
15 | + | |
16 | +Language.complete = [ | |
17 | + { input : '\'',output : '\'$0\'' }, | |
18 | + { input : '"', output : '"$0"' }, | |
19 | + { input : '(', output : '\($0\)' }, | |
20 | + { input : '[', output : '\[$0\]' }, | |
21 | + { input : '{', output : '{\n\t$0\n}' } | |
22 | +] | |
23 | + | |
24 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,8 @@ |
1 | +/* | |
2 | + * CodePress color styles for JavaScript syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b {color:#7F0055;font-weight:bold;} /* reserved words */ | |
6 | +u {color:darkblue;font-weight:bold;} /* special words */ | |
7 | +i, i b, i s, i u {color:green;font-weight:normal;} /* comments */ | |
8 | +s, s b, s u {color:#2A00FF;font-weight:normal;} /* strings */ | ... | ... |
... | ... | @@ -0,0 +1,30 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for JavaScript syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// JavaScript | |
6 | +Language.syntax = [ | |
7 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote | |
8 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single quote | |
9 | + { input : /\b(break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, output : '<b>$1</b>' }, // reserved words | |
10 | + { input : /\b(alert|isNaN|parent|Array|parseFloat|parseInt|blur|clearTimeout|prompt|prototype|close|confirm|length|Date|location|Math|document|element|name|self|elements|setTimeout|navigator|status|String|escape|Number|submit|eval|Object|event|onblur|focus|onerror|onfocus|onclick|top|onload|toString|onunload|unescape|open|valueOf|window|onmouseover)\b/g, output : '<u>$1</u>' }, // special words | |
11 | + { input : /([^:]|^)\/\/(.*?)(<br|<\/P)/g, output : '$1<i>//$2</i>$3' }, // comments // | |
12 | + { input : /\/\*(.*?)\*\//g, output : '<i>/*$1*/</i>' } // comments /* */ | |
13 | +] | |
14 | + | |
15 | +Language.snippets = [ | |
16 | + { input : 'dw', output : 'document.write(\'$0\');' }, | |
17 | + { input : 'getid', output : 'document.getElementById(\'$0\')' }, | |
18 | + { input : 'fun', output : 'function $0(){\n\t\n}' }, | |
19 | + { input : 'func', output : 'function $0(){\n\t\n}' } | |
20 | +] | |
21 | + | |
22 | +Language.complete = [ | |
23 | + { input : '\'',output : '\'$0\'' }, | |
24 | + { input : '"', output : '"$0"' }, | |
25 | + { input : '(', output : '\($0\)' }, | |
26 | + { input : '[', output : '\[$0\]' }, | |
27 | + { input : '{', output : '{\n\t$0\n}' } | |
28 | +] | |
29 | + | |
30 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,11 @@ |
1 | +/* | |
2 | + * CodePress color styles for Perl syntax highlighting | |
3 | + * By J. Nick Koston | |
4 | + */ | |
5 | + | |
6 | +b {color:#7F0055;font-weight:bold;} /* reserved words */ | |
7 | +i, i b, i s, i em, i a, i u {color:gray;font-weight:normal;} /* comments */ | |
8 | +s, s b, s a, s em, s u {color:#2A00FF;font-weight:normal;} /* strings */ | |
9 | +a {color:#006700;font-weight:bold;} /* variables */ | |
10 | +em {color:darkblue;font-weight:bold;} /* functions */ | |
11 | +u {font-weight:bold;} /* special chars */ | |
0 | 12 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,27 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for Perl syntax highlighting | |
3 | + * By J. Nick Koston | |
4 | + */ | |
5 | + | |
6 | +// Perl | |
7 | +Language.syntax = [ | |
8 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote | |
9 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single quote | |
10 | + { input : /([\$\@\%][\w\.]*)/g, output : '<a>$1</a>' }, // vars | |
11 | + { input : /(sub\s+)([\w\.]*)/g, output : '$1<em>$2</em>' }, // functions | |
12 | + { input : /\b(abs|accept|alarm|atan2|bind|binmode|bless|caller|chdir|chmod|chomp|chop|chown|chr|chroot|close|closedir|connect|continue|cos|crypt|dbmclose|dbmopen|defined|delete|die|do|dump|each|else|elsif|endgrent|endhostent|endnetent|endprotoent|endpwent|eof|eval|exec|exists|exit|fcntl|fileno|find|flock|for|foreach|fork|format|formlinegetc|getgrent|getgrgid|getgrnam|gethostbyaddr|gethostbyname|gethostent|getlogin|getnetbyaddr|getnetbyname|getnetent|getpeername|getpgrp|getppid|getpriority|getprotobyname|getprotobynumber|getprotoent|getpwent|getpwnam|getpwuid|getservbyaddr|getservbyname|getservbyport|getservent|getsockname|getsockopt|glob|gmtime|goto|grep|hex|hostname|if|import|index|int|ioctl|join|keys|kill|last|lc|lcfirst|length|link|listen|LoadExternals|local|localtime|log|lstat|map|mkdir|msgctl|msgget|msgrcv|msgsnd|my|next|no|oct|open|opendir|ordpack|package|pipe|pop|pos|print|printf|push|pwd|qq|quotemeta|qw|rand|read|readdir|readlink|recv|redo|ref|rename|require|reset|return|reverse|rewinddir|rindex|rmdir|scalar|seek|seekdir|select|semctl|semget|semop|send|setgrent|sethostent|setnetent|setpgrp|setpriority|setprotoent|setpwent|setservent|setsockopt|shift|shmctl|shmget|shmread|shmwrite|shutdown|sin|sleep|socket|socketpair|sort|splice|split|sprintf|sqrt|srand|stat|stty|study|sub|substr|symlink|syscall|sysopen|sysread|system|syswritetell|telldir|tie|tied|time|times|tr|truncate|uc|ucfirst|umask|undef|unless|unlink|until|unpack|unshift|untie|use|utime|values|vec|waitpid|wantarray|warn|while|write)\b/g, output : '<b>$1</b>' }, // reserved words | |
13 | + { input : /([\(\){}])/g, output : '<u>$1</u>' }, // special chars | |
14 | + { input : /#(.*?)(<br>|<\/P>)/g, output : '<i>#$1</i>$2' } // comments | |
15 | +] | |
16 | + | |
17 | +Language.snippets = [] | |
18 | + | |
19 | +Language.complete = [ | |
20 | + { input : '\'',output : '\'$0\'' }, | |
21 | + { input : '"', output : '"$0"' }, | |
22 | + { input : '(', output : '\($0\)' }, | |
23 | + { input : '[', output : '\[$0\]' }, | |
24 | + { input : '{', output : '{\n\t$0\n}' } | |
25 | +] | |
26 | + | |
27 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,12 @@ |
1 | +/* | |
2 | + * CodePress color styles for PHP syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b {color:#000080;} /* tags */ | |
6 | +big, big b, big em, big ins, big s, strong i, strong i b, strong i s, strong i u, strong i a, strong i a u, strong i s u {color:gray;font-weight:normal;} /* comments */ | |
7 | +s, s b, strong s u, strong s cite {color:#5656fa;font-weight:normal;} /* attributes and strings */ | |
8 | +strong a, strong a u {color:#006700;font-weight:bold;} /* variables */ | |
9 | +em {color:#800080;font-style:normal;} /* style */ | |
10 | +ins {color:#800000;} /* script */ | |
11 | +strong u {color:#7F0055;font-weight:bold;} /* reserved words */ | |
12 | +cite, s cite {color:red;font-weight:bold;} /* <?php and ?> */ | ... | ... |
... | ... | @@ -0,0 +1,61 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for PHP syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// PHP | |
6 | +Language.syntax = [ | |
7 | + { input : /(<[^!\?]*?>)/g, output : '<b>$1</b>' }, // all tags | |
8 | + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' }, // style tags | |
9 | + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '<ins>$1</ins><ins>$2</ins><ins>$3</ins>' }, // script tags | |
10 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote | |
11 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>'}, // strings single quote | |
12 | + { input : /(<\?)/g, output : '<strong>$1' }, // <?.* | |
13 | + { input : /(\?>)/g, output : '$1</strong>' }, // .*?> | |
14 | + { input : /(<\?php|<\?=|<\?|\?>)/g, output : '<cite>$1</cite>' }, // php tags | |
15 | + { input : /(\$[\w\.]*)/g, output : '<a>$1</a>' }, // vars | |
16 | + { input : /\b(false|true|and|or|xor|__FILE__|exception|__LINE__|array|as|break|case|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|print|require|require_once|return|static|switch|unset|use|while|__FUNCTION__|__CLASS__|__METHOD__|final|php_user_filter|interface|implements|extends|public|private|protected|abstract|clone|try|catch|throw|this)\b/g, output : '<u>$1</u>' }, // reserved words | |
17 | + { input : /([^:])\/\/(.*?)(<br|<\/P)/g, output : '$1<i>//$2</i>$3' }, // php comments // | |
18 | + { input : /([^:])#(.*?)(<br|<\/P)/g, output : '$1<i>#$2</i>$3' }, // php comments # | |
19 | + { input : /\/\*(.*?)\*\//g, output : '<i>/*$1*/</i>' }, // php comments /* */ | |
20 | + { input : /(<!--.*?-->.)/g, output : '<big>$1</big>' } // html comments | |
21 | +] | |
22 | + | |
23 | +Language.snippets = [ | |
24 | + { input : 'if', output : 'if($0){\n\t\n}' }, | |
25 | + { input : 'ifelse', output : 'if($0){\n\t\n}\nelse{\n\t\n}' }, | |
26 | + { input : 'else', output : '}\nelse {\n\t' }, | |
27 | + { input : 'elseif', output : '}\nelseif($0) {\n\t' }, | |
28 | + { input : 'do', output : 'do{\n\t$0\n}\nwhile();' }, | |
29 | + { input : 'inc', output : 'include_once("$0");' }, | |
30 | + { input : 'fun', output : 'function $0(){\n\t\n}' }, | |
31 | + { input : 'func', output : 'function $0(){\n\t\n}' }, | |
32 | + { input : 'while', output : 'while($0){\n\t\n}' }, | |
33 | + { input : 'for', output : 'for($0,,){\n\t\n}' }, | |
34 | + { input : 'fore', output : 'foreach($0 as ){\n\t\n}' }, | |
35 | + { input : 'foreach', output : 'foreach($0 as ){\n\t\n}' }, | |
36 | + { input : 'echo', output : 'echo \'$0\';' }, | |
37 | + { input : 'switch', output : 'switch($0) {\n\tcase "": break;\n\tdefault: ;\n}' }, | |
38 | + { input : 'case', output : 'case "$0" : break;' }, | |
39 | + { input : 'ret0', output : 'return false;' }, | |
40 | + { input : 'retf', output : 'return false;' }, | |
41 | + { input : 'ret1', output : 'return true;' }, | |
42 | + { input : 'rett', output : 'return true;' }, | |
43 | + { input : 'ret', output : 'return $0;' }, | |
44 | + { input : 'def', output : 'define(\'$0\',\'\');' }, | |
45 | + { input : '<?', output : 'php\n$0\n?>' } | |
46 | +] | |
47 | + | |
48 | +Language.complete = [ | |
49 | + { input : '\'', output : '\'$0\'' }, | |
50 | + { input : '"', output : '"$0"' }, | |
51 | + { input : '(', output : '\($0\)' }, | |
52 | + { input : '[', output : '\[$0\]' }, | |
53 | + { input : '{', output : '{\n\t$0\n}' } | |
54 | +] | |
55 | + | |
56 | +Language.shortcuts = [ | |
57 | + { input : '[space]', output : ' ' }, | |
58 | + { input : '[enter]', output : '<br />' } , | |
59 | + { input : '[j]', output : 'testing' }, | |
60 | + { input : '[7]', output : '&' } | |
61 | +] | |
0 | 62 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +/* | |
2 | + * CodePress color styles for Ruby syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +b {color:#7F0055;font-weight:bold;} /* reserved words */ | |
6 | +i, i b, i s, i em, i a, i u {color:gray;font-weight:normal;} /* comments */ | |
7 | +s, s b, s a, s em, s u {color:#2A00FF;font-weight:normal;} /* strings */ | |
8 | +a {color:#006700;font-weight:bold;} /* variables */ | |
9 | +em {color:darkblue;font-weight:bold;} /* functions */ | |
10 | +u {font-weight:bold;} /* special chars */ | |
0 | 11 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,26 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for Perl syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// Ruby | |
6 | +Language.syntax = [ | |
7 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote | |
8 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single quote | |
9 | + { input : /([\$\@\%]+)([\w\.]*)/g, output : '<a>$1$2</a>' }, // vars | |
10 | + { input : /(def\s+)([\w\.]*)/g, output : '$1<em>$2</em>' }, // functions | |
11 | + { input : /\b(alias|and|BEGIN|begin|break|case|class|def|defined|do|else|elsif|END|end|ensure|false|for|if|in|module|next|nil|not|or|redo|rescue|retry|return|self|super|then|true|undef|unless|until|when|while|yield)\b/g, output : '<b>$1</b>' }, // reserved words | |
12 | + { input : /([\(\){}])/g, output : '<u>$1</u>' }, // special chars | |
13 | + { input : /#(.*?)(<br>|<\/P>)/g, output : '<i>#$1</i>$2' } // comments | |
14 | +]; | |
15 | + | |
16 | +Language.snippets = [] | |
17 | + | |
18 | +Language.complete = [ | |
19 | + { input : '\'',output : '\'$0\'' }, | |
20 | + { input : '"', output : '"$0"' }, | |
21 | + { input : '(', output : '\($0\)' }, | |
22 | + { input : '[', output : '\[$0\]' }, | |
23 | + { input : '{', output : '{\n\t$0\n}' } | |
24 | +] | |
25 | + | |
26 | +Language.shortcuts = [] | ... | ... |
... | ... | @@ -0,0 +1,10 @@ |
1 | +/* | |
2 | + * CodePress color styles for SQL syntax highlighting | |
3 | + * By Merlin Moncure | |
4 | + */ | |
5 | + | |
6 | +b {color:#0000FF;font-style:normal;font-weight:bold;} /* reserved words */ | |
7 | +u {color:#FF0000;font-style:normal;} /* types */ | |
8 | +a {color:#CD6600;font-style:normal;font-weight:bold;} /* commands */ | |
9 | +i, i b, i u, i a, i s {color:#A9A9A9;font-weight:normal;font-style:italic;} /* comments */ | |
10 | +s, s b, s u, s a, s i {color:#2A00FF;font-weight:normal;} /* strings */ | ... | ... |
... | ... | @@ -0,0 +1,30 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for SQL syntax highlighting | |
3 | + * By Merlin Moncure | |
4 | + */ | |
5 | + | |
6 | +// SQL | |
7 | +Language.syntax = [ | |
8 | + { input : /\'(.*?)(\')/g, output : '<s>\'$1$2</s>' }, // strings single quote | |
9 | + { input : /\b(add|after|aggregate|alias|all|and|as|authorization|between|by|cascade|cache|cache|called|case|check|column|comment|constraint|createdb|createuser|cycle|database|default|deferrable|deferred|diagnostics|distinct|domain|each|else|elseif|elsif|encrypted|except|exception|for|foreign|from|from|full|function|get|group|having|if|immediate|immutable|in|increment|initially|increment|index|inherits|inner|input|intersect|into|invoker|is|join|key|language|left|like|limit|local|loop|match|maxvalue|minvalue|natural|nextval|no|nocreatedb|nocreateuser|not|null|of|offset|oids|on|only|operator|or|order|outer|owner|partial|password|perform|plpgsql|primary|record|references|replace|restrict|return|returns|right|row|rule|schema|security|sequence|session|sql|stable|statistics|table|temp|temporary|then|time|to|transaction|trigger|type|unencrypted|union|unique|user|using|valid|value|values|view|volatile|when|where|with|without|zone)\b/gi, output : '<b>$1</b>' }, // reserved words | |
10 | + { input : /\b(bigint|bigserial|bit|boolean|box|bytea|char|character|cidr|circle|date|decimal|double|float4|float8|inet|int2|int4|int8|integer|interval|line|lseg|macaddr|money|numeric|oid|path|point|polygon|precision|real|refcursor|serial|serial4|serial8|smallint|text|timestamp|varbit|varchar)\b/gi, output : '<u>$1</u>' }, // types | |
11 | + { input : /\b(abort|alter|analyze|begin|checkpoint|close|cluster|comment|commit|copy|create|deallocate|declare|delete|drop|end|execute|explain|fetch|grant|insert|listen|load|lock|move|notify|prepare|reindex|reset|restart|revoke|rollback|select|set|show|start|truncate|unlisten|update)\b/gi, output : '<a>$1</a>' }, // commands | |
12 | + { input : /([^:]|^)\-\-(.*?)(<br|<\/P)/g, output: '$1<i>--$2</i>$3' } // comments // | |
13 | +] | |
14 | + | |
15 | +Language.snippets = [ | |
16 | + { input : 'select', output : 'select $0 from where ' } | |
17 | +] | |
18 | + | |
19 | +Language.complete = [ | |
20 | + { input : '\'', output : '\'$0\'' }, | |
21 | + { input : '"', output : '"$0"' }, | |
22 | + { input : '(', output : '\($0\)' }, | |
23 | + { input : '[', output : '\[$0\]' }, | |
24 | + { input : '{', output : '{\n\t$0\n}' } | |
25 | +] | |
26 | + | |
27 | +Language.shortcuts = [] | |
28 | + | |
29 | + | |
30 | + | ... | ... |
... | ... | @@ -0,0 +1,71 @@ |
1 | +/* | |
2 | + * CodePress color styles for ASP-VB syntax highlighting | |
3 | + * By Martin D. Kirk | |
4 | + */ | |
5 | + | |
6 | +/* tags */ | |
7 | +b { | |
8 | + color:#000080; | |
9 | +} | |
10 | +/* comments */ | |
11 | +big, big b, big em, big ins, big s, strong i, strong i b, strong i s, strong i u, strong i a, strong i a u, strong i s u { | |
12 | + color:gray; | |
13 | + font-weight:normal; | |
14 | +} | |
15 | +/* ASP comments */ | |
16 | +strong dfn, strong dfn a,strong dfn var, strong dfn a u, strong dfn u{ | |
17 | + color:gray; | |
18 | + font-weight:normal; | |
19 | +} | |
20 | + /* attributes */ | |
21 | +s, s b, span s u, span s cite, strong span s { | |
22 | + color:#5656fa ; | |
23 | + font-weight:normal; | |
24 | +} | |
25 | + /* strings */ | |
26 | +strong s,strong s b, strong s u, strong s cite { | |
27 | + color:#009900; | |
28 | + font-weight:normal; | |
29 | +} | |
30 | +strong ins{ | |
31 | + color:#000000; | |
32 | + font-weight:bold; | |
33 | +} | |
34 | + /* Syntax */ | |
35 | +strong a, strong a u { | |
36 | + color:#0000FF; | |
37 | + font-weight:; | |
38 | +} | |
39 | + /* Native Keywords */ | |
40 | +strong u { | |
41 | + color:#990099; | |
42 | + font-weight:bold; | |
43 | +} | |
44 | +/* Numbers */ | |
45 | +strong var{ | |
46 | + color:#FF0000; | |
47 | +} | |
48 | +/* ASP Language */ | |
49 | +span{ | |
50 | + color:#990000; | |
51 | + font-weight:bold; | |
52 | +} | |
53 | +strong i,strong a i, strong u i { | |
54 | + color:#009999; | |
55 | +} | |
56 | +/* style */ | |
57 | +em { | |
58 | + color:#800080; | |
59 | + font-style:normal; | |
60 | +} | |
61 | + /* script */ | |
62 | +ins { | |
63 | + color:#800000; | |
64 | + font-weight:bold; | |
65 | +} | |
66 | + | |
67 | +/* <?php and ?> */ | |
68 | +cite, s cite { | |
69 | + color:red; | |
70 | + font-weight:bold; | |
71 | +} | |
0 | 72 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,117 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for ASP-vbscript syntax highlighting | |
3 | + */ | |
4 | + | |
5 | +// ASP VBScript | |
6 | +Language.syntax = [ | |
7 | +// all tags | |
8 | + { input : /(<[^!%|!%@]*?>)/g, output : '<b>$1</b>' }, | |
9 | +// style tags | |
10 | + { input : /(<style.*?>)(.*?)(<\/style>)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' }, | |
11 | +// script tags | |
12 | + { input : /(<script.*?>)(.*?)(<\/script>)/g, output : '<ins>$1</ins><ins>$2</ins><ins>$3</ins>' }, | |
13 | +// strings "" and attributes | |
14 | + { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, | |
15 | +// ASP Comment | |
16 | + { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<dfn>\'$1$2</dfn>'}, | |
17 | +// <%.* | |
18 | + { input : /(<%)/g, output : '<strong>$1' }, | |
19 | +// .*%> | |
20 | + { input : /(%>)/g, output : '$1</strong>' }, | |
21 | +// <%@...%> | |
22 | + { input : /(<%@)(.+?)(%>)/gi, output : '$1<span>$2</span>$3' }, | |
23 | +//Numbers | |
24 | + { input : /\b([\d]+)\b/g, output : '<var>$1</var>' }, | |
25 | +// Reserved Words 1 (Blue) | |
26 | + { input : /\b(And|As|ByRef|ByVal|Call|Case|Class|Const|Dim|Do|Each|Else|ElseIf|Empty|End|Eqv|Exit|False|For|Function)\b/gi, output : '<a>$1</a>' }, | |
27 | + { input : /\b(Get|GoTo|If|Imp|In|Is|Let|Loop|Me|Mod|Enum|New|Next|Not|Nothing|Null|On|Option|Or|Private|Public|ReDim|Rem)\b/gi, output : '<a>$1</a>' }, | |
28 | + { input : /\b(Resume|Select|Set|Stop|Sub|Then|To|True|Until|Wend|While|With|Xor|Execute|Randomize|Erase|ExecuteGlobal|Explicit|step)\b/gi, output : '<a>$1</a>' }, | |
29 | +// Reserved Words 2 (Purple) | |
30 | + { input : /\b(Abandon|Abs|AbsolutePage|AbsolutePosition|ActiveCommand|ActiveConnection|ActualSize|AddHeader|AddNew|AppendChunk)\b/gi, output : '<u>$1</u>' }, | |
31 | + { input : /\b(AppendToLog|Application|Array|Asc|Atn|Attributes|BeginTrans|BinaryRead|BinaryWrite|BOF|Bookmark|Boolean|Buffer|Byte)\b/gi, output : '<u>$1</u>' }, | |
32 | + { input : /\b(CacheControl|CacheSize|Cancel|CancelBatch|CancelUpdate|CBool|CByte|CCur|CDate|CDbl|Charset|Chr|CInt|Clear)\b/gi, output : '<u>$1</u>' }, | |
33 | + { input : /\b(ClientCertificate|CLng|Clone|Close|CodePage|CommandText|CommandType|CommandTimeout|CommitTrans|CompareBookmarks|ConnectionString|ConnectionTimeout)\b/gi, output : '<u>$1</u>' }, | |
34 | + { input : /\b(Contents|ContentType|Cookies|Cos|CreateObject|CreateParameter|CSng|CStr|CursorLocation|CursorType|DataMember|DataSource|Date|DateAdd|DateDiff)\b/gi, output : '<u>$1</u>' }, | |
35 | + { input : /\b(DatePart|DateSerial|DateValue|Day|DefaultDatabase|DefinedSize|Delete|Description|Double|EditMode|Eof|EOF|err|Error)\b/gi, output : '<u>$1</u>' }, | |
36 | + { input : /\b(Exp|Expires|ExpiresAbsolute|Filter|Find|Fix|Flush|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent)\b/gi, output : '<u>$1</u>' }, | |
37 | + { input : /\b(GetChunk|GetLastError|GetRows|GetString|Global|HelpContext|HelpFile|Hex|Hour|HTMLEncode|IgnoreCase|Index|InStr|InStrRev)\b/gi, output : '<u>$1</u>' }, | |
38 | + { input : /\b(Int|Integer|IsArray|IsClientConnected|IsDate|IsolationLevel|Join|LBound|LCase|LCID|Left|Len|Lock|LockType|Log|Long|LTrim)\b/gi, output : '<u>$1</u>' }, | |
39 | + { input : /\b(MapPath|MarshalOptions|MaxRecords|Mid|Minute|Mode|Month|MonthName|Move|MoveFirst|MoveLast|MoveNext|MovePrevious|Name|NextRecordset)\b/gi, output : '<u>$1</u>' }, | |
40 | + { input : /\b(Now|Number|NumericScale|ObjectContext|Oct|Open|OpenSchema|OriginalValue|PageCount|PageSize|Pattern|PICS|Precision|Prepared|Property)\b/gi, output : '<u>$1</u>' }, | |
41 | + { input : /\b(Provider|QueryString|RecordCount|Redirect|RegExp|Remove|RemoveAll|Replace|Requery|Request|Response|Resync|Right|Rnd)\b/gi, output : '<u>$1</u>' }, | |
42 | + { input : /\b(RollbackTrans|RTrim|Save|ScriptTimeout|Second|Seek|Server|ServerVariables|Session|SessionID|SetAbort|SetComplete|Sgn)\b/gi, output : '<u>$1</u>' }, | |
43 | + { input : /\b(Sin|Size|Sort|Source|Space|Split|Sqr|State|StaticObjects|Status|StayInSync|StrComp|String|StrReverse|Supports|Tan|Time)\b/gi, output : '<u>$1</u>' }, | |
44 | + { input : /\b(Timeout|Timer|TimeSerial|TimeValue|TotalBytes|Transfer|Trim|Type|Type|UBound|UCase|UnderlyingValue|UnLock|Update|UpdateBatch)\b/gi, output : '<u>$1</u>' }, | |
45 | + { input : /\b(URLEncode|Value|Value|Version|Weekday|WeekdayName|Write|Year)\b/gi, output : '<u>$1</u>' }, | |
46 | +// Reserved Words 3 (Turquis) | |
47 | + { input : /\b(vbBlack|vbRed|vbGreen|vbYellow|vbBlue|vbMagenta|vbCyan|vbWhite|vbBinaryCompare|vbTextCompare)\b/gi, output : '<i>$1</i>' }, | |
48 | + { input : /\b(vbSunday|vbMonday|vbTuesday|vbWednesday|vbThursday|vbFriday|vbSaturday|vbUseSystemDayOfWeek)\b/gi, output : '<i>$1</i>' }, | |
49 | + { input : /\b(vbFirstJan1|vbFirstFourDays|vbFirstFullWeek|vbGeneralDate|vbLongDate|vbShortDate|vbLongTime|vbShortTime)\b/gi, output : '<i>$1</i>' }, | |
50 | + { input : /\b(vbObjectError|vbCr|VbCrLf|vbFormFeed|vbLf|vbNewLine|vbNullChar|vbNullString|vbTab|vbVerticalTab|vbUseDefault|vbTrue)\b/gi, output : '<i>$1</i>' }, | |
51 | + { input : /\b(vbFalse|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant)\b/gi, output : '<i>$1</i>' }, | |
52 | + { input : /\b(vbDataObject|vbDecimal|vbByte|vbArray)\b/gi, output : '<i>$1</i>' }, | |
53 | +// html comments | |
54 | + { input : /(<!--.*?-->.)/g, output : '<big>$1</big>' } | |
55 | +] | |
56 | + | |
57 | +Language.Functions = [ | |
58 | + // Output at index 0, must be the desired tagname surrounding a $1 | |
59 | + // Name is the index from the regex that marks the functionname | |
60 | + {input : /(function|sub)([ ]*?)(\w+)([ ]*?\()/gi , output : '<ins>$1</ins>', name : '$3'} | |
61 | +] | |
62 | + | |
63 | +Language.snippets = [ | |
64 | +//Conditional | |
65 | + { input : 'if', output : 'If $0 Then\n\t\nEnd If' }, | |
66 | + { input : 'ifelse', output : 'If $0 Then\n\t\n\nElse\n\t\nEnd If' }, | |
67 | + { input : 'case', output : 'Select Case $0\n\tCase ?\n\tCase Else\nEnd Select'}, | |
68 | +//Response | |
69 | + { input : 'rw', output : 'Response.Write( $0 )' }, | |
70 | + { input : 'resc', output : 'Response.Cookies( $0 )' }, | |
71 | + { input : 'resb', output : 'Response.Buffer'}, | |
72 | + { input : 'resflu', output : 'Response.Flush()'}, | |
73 | + { input : 'resend', output : 'Response.End'}, | |
74 | +//Request | |
75 | + { input : 'reqc', output : 'Request.Cookies( $0 )' }, | |
76 | + { input : 'rq', output : 'Request.Querystring("$0")' }, | |
77 | + { input : 'rf', output : 'Request.Form("$0")' }, | |
78 | +//FSO | |
79 | + { input : 'fso', output : 'Set fso = Server.CreateObject("Scripting.FileSystemObject")\n$0' }, | |
80 | + { input : 'setfo', output : 'Set fo = fso.getFolder($0)' }, | |
81 | + { input : 'setfi', output : 'Set fi = fso.getFile($0)' }, | |
82 | + { input : 'twr', output : 'Set f = fso.CreateTextFile($0,true)\'overwrite\nf.WriteLine()\nf.Close'}, | |
83 | + { input : 'tre', output : 'Set f = fso.OpenTextFile($0, 1)\nf.ReadAll\nf.Close'}, | |
84 | +//Server | |
85 | + { input : 'mapp', output : 'Server.Mappath($0)' }, | |
86 | +//Loops | |
87 | + { input : 'foreach', output : 'For Each $0 in ?\n\t\nNext' }, | |
88 | + { input : 'for', output : 'For $0 to ? step ?\n\t\nNext' }, | |
89 | + { input : 'do', output : 'Do While($0)\n\t\nLoop' }, | |
90 | + { input : 'untilrs', output : 'do until rs.eof\n\t\nrs.movenext\nloop' }, | |
91 | +//ADO | |
92 | + { input : 'adorec', output : 'Set rs = Server.CreateObject("ADODB.Recordset")' }, | |
93 | + { input : 'adocon', output : 'Set Conn = Server.CreateObject("ADODB.Connection")' }, | |
94 | + { input : 'adostr', output : 'Set oStr = Server.CreateObject("ADODB.Stream")' }, | |
95 | +//Http Request | |
96 | + { input : 'xmlhttp', output : 'Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")\nxmlHttp.open("GET", $0, false)\nxmlHttp.send()\n?=xmlHttp.responseText' }, | |
97 | + { input : 'xmldoc', output : 'Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")\nxmldoc.async=false\nxmldoc.load(request)'}, | |
98 | +//Functions | |
99 | + { input : 'func', output : 'Function $0()\n\t\n\nEnd Function'}, | |
100 | + { input : 'sub', output : 'Sub $0()\n\t\nEnd Sub'} | |
101 | + | |
102 | +] | |
103 | + | |
104 | +Language.complete = [ | |
105 | + //{ input : '\'', output : '\'$0\'' }, | |
106 | + { input : '"', output : '"$0"' }, | |
107 | + { input : '(', output : '\($0\)' }, | |
108 | + { input : '[', output : '\[$0\]' }, | |
109 | + { input : '{', output : '{\n\t$0\n}' } | |
110 | +] | |
111 | + | |
112 | +Language.shortcuts = [ | |
113 | + { input : '[space]', output : ' ' }, | |
114 | + { input : '[enter]', output : '<br />' } , | |
115 | + { input : '[j]', output : 'testing' }, | |
116 | + { input : '[7]', output : '&' } | |
117 | +] | |
0 | 118 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,15 @@ |
1 | +/* | |
2 | + * CodePress color styles for HTML syntax highlighting | |
3 | + * By RJ Bruneel | |
4 | + */ | |
5 | + | |
6 | +b {color:#000080;} /* tags */ | |
7 | +ins, ins b, ins s, ins em {color:gray;} /* comments */ | |
8 | +s, s b {color:#7777e4;} /* attribute values */ | |
9 | +a {color:#E67300;} /* links */ | |
10 | +u {color:#CC66CC;} /* forms */ | |
11 | +big {color:#db0000;} /* images */ | |
12 | +em, em b {color:#800080;} /* style */ | |
13 | +strong {color:#800000;} /* script */ | |
14 | +tt i {color:darkblue;font-weight:bold;} /* script reserved words */ | |
15 | +xsl {color:green;} /* xsl */ | ... | ... |
... | ... | @@ -0,0 +1,103 @@ |
1 | +/* | |
2 | + * CodePress regular expressions for XSL syntax highlighting | |
3 | + * By RJ Bruneel | |
4 | + */ | |
5 | + | |
6 | +Language.syntax = [ // XSL | |
7 | + { | |
8 | + input : /(<[^!]*?>)/g, | |
9 | + output : '<b>$1</b>' // all tags | |
10 | + },{ | |
11 | + input : /(<a.*?>|<\/a>)/g, | |
12 | + output : '<a>$1</a>' // links | |
13 | + },{ | |
14 | + input : /(<img .*?>)/g, | |
15 | + output : '<big>$1</big>' // images | |
16 | + },{ | |
17 | + input : /(<\/?(button|textarea|form|input|select|option|label).*?>)/g, | |
18 | + output : '<u>$1</u>' // forms | |
19 | + },{ | |
20 | + input : /(<style.*?>)(.*?)(<\/style>)/g, | |
21 | + output : '<em>$1</em><em>$2</em><em>$3</em>' // style tags | |
22 | + },{ | |
23 | + input : /(<script.*?>)(.*?)(<\/script>)/g, | |
24 | + output : '<strong>$1</strong><tt>$2</tt><strong>$3</strong>' // script tags | |
25 | + },{ | |
26 | + input : /(<xsl.*?>|<\/xsl.*?>)/g, | |
27 | + output : '<xsl>$1</xsl>' // xsl | |
28 | + },{ | |
29 | + input : /=(".*?")/g, | |
30 | + output : '=<s>$1</s>' // atributes double quote | |
31 | + },{ | |
32 | + input : /=('.*?')/g, | |
33 | + output : '=<s>$1</s>' // atributes single quote | |
34 | + },{ | |
35 | + input : /(<!--.*?-->.)/g, | |
36 | + output : '<ins>$1</ins>' // comments | |
37 | + },{ | |
38 | + input : /\b(alert|window|document|break|continue|do|for|new|this|void|case|default|else|function|return|typeof|while|if|label|switch|var|with|catch|boolean|int|try|false|throws|null|true|goto)\b/g, | |
39 | + output : '<i>$1</i>' // script reserved words | |
40 | + } | |
41 | +]; | |
42 | + | |
43 | +Language.snippets = [ | |
44 | + {input : 'aref', output : '<a href="$0"></a>' }, | |
45 | + {input : 'h1', output : '<h1>$0</h1>' }, | |
46 | + {input : 'h2', output : '<h2>$0</h2>' }, | |
47 | + {input : 'h3', output : '<h3>$0</h3>' }, | |
48 | + {input : 'h4', output : '<h4>$0</h4>' }, | |
49 | + {input : 'h5', output : '<h5>$0</h5>' }, | |
50 | + {input : 'h6', output : '<h6>$0</h6>' }, | |
51 | + {input : 'html', output : '<html>\n\t$0\n</html>' }, | |
52 | + {input : 'head', output : '<head>\n\t<meta http-equiv="content-type" content="text/html; charset=utf-8" />\n\t<title>$0</title>\n\t\n</head>' }, | |
53 | + {input : 'img', output : '<img src="$0" width="" height="" alt="" border="0" />' }, | |
54 | + {input : 'input', output : '<input name="$0" id="" type="" value="" />' }, | |
55 | + {input : 'label', output : '<label for="$0"></label>' }, | |
56 | + {input : 'legend', output : '<legend>\n\t$0\n</legend>' }, | |
57 | + {input : 'link', output : '<link rel="stylesheet" href="$0" type="text/css" media="screen" charset="utf-8" />' }, | |
58 | + {input : 'base', output : '<base href="$0" />' }, | |
59 | + {input : 'body', output : '<body>\n\t$0\n</body>' }, | |
60 | + {input : 'css', output : '<link rel="stylesheet" href="$0" type="text/css" media="screen" charset="utf-8" />' }, | |
61 | + {input : 'div', output : '<div>\n\t$0\n</div>' }, | |
62 | + {input : 'divid', output : '<div id="$0">\n\t\n</div>' }, | |
63 | + {input : 'dl', output : '<dl>\n\t<dt>\n\t\t$0\n\t</dt>\n\t<dd></dd>\n</dl>' }, | |
64 | + {input : 'fieldset', output : '<fieldset>\n\t$0\n</fieldset>' }, | |
65 | + {input : 'form', output : '<form action="$0" method="" name="">\n\t\n</form>' }, | |
66 | + {input : 'meta', output : '<meta name="$0" content="" />' }, | |
67 | + {input : 'p', output : '<p>$0</p>' }, | |
68 | + {input : 'b', output : '<b>$0</b>' }, | |
69 | + {input : 'li', output : '<li>$0</li>' }, | |
70 | + {input : 'ul', output : '<ul>$0</ul>' }, | |
71 | + {input : 'ol', output : '<ol>$0</ol>' }, | |
72 | + {input : 'strong', output : '<strong>$0</strong>' }, | |
73 | + {input : 'br', output : '<br />' }, | |
74 | + {input : 'script', output : '<script type="text/javascript" language="javascript" charset="utf-8">\n\t$0\t\n</script>' }, | |
75 | + {input : 'scriptsrc', output : '<script src="$0" type="text/javascript" language="javascript" charset="utf-8"></script>' }, | |
76 | + {input : 'span', output : '<span>$0</span>' }, | |
77 | + {input : 'table', output : '<table border="$0" cellspacing="" cellpadding="">\n\t<tr><th></th></tr>\n\t<tr><td></td></tr>\n</table>' }, | |
78 | + {input : 'style', output : '<style type="text/css" media="screen">\n\t$0\n</style>' }, | |
79 | + {input : 'xsl:stylesheet', output : '<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">' }, | |
80 | + {input : 'xsl:template', output : '<xsl:template>$0</xsl:template>' }, | |
81 | + {input : 'xsl:for-each', output : '<xsl:for-each select="$0"></xsl:for-each>' }, | |
82 | + {input : 'xsl:choose', output : '<xsl:choose>$0<\xsl:choose>' }, | |
83 | + {input : 'xsl:param', output : '<xsl:param name="$0" />' }, | |
84 | + {input : 'xsl:variable', output : '<xsl:variable name="$0"></xsl:variable>' }, | |
85 | + {input : 'xsl:if', output : '<xsl:if test="$0"></xsl:if>' }, | |
86 | + {input : 'xsl:when', output : '<xsl:when test="$0"></xsl:when>' }, | |
87 | + {input : 'xsl:otherwise', output : '<xsl:otherwise>$0</xsl:otherwise>' }, | |
88 | + {input : 'xsl:attribute', output : '<xsl:attribute name="$0"></xsl:attribute>' }, | |
89 | + {input : 'xsl:value-of', output : '<xsl:value-of select="$0"/>' }, | |
90 | + {input : 'xsl:with-param', output : '<xsl:with-param name="$0" select="" />' }, | |
91 | + {input : 'xsl:call-template', output : '<xsl:call-template name="$0">' } | |
92 | + | |
93 | +]; | |
94 | + | |
95 | +Language.complete = [ // Auto complete only for 1 character | |
96 | + {input : '\'',output : '\'$0\'' }, | |
97 | + {input : '"', output : '"$0"' }, | |
98 | + {input : '(', output : '\($0\)' }, | |
99 | + {input : '[', output : '\[$0\]' }, | |
100 | + {input : '{', output : '{\n\t$0\n}' } | |
101 | +]; | |
102 | + | |
103 | +Language.shortcuts = []; | |
0 | 104 | \ No newline at end of file | ... | ... |
... | ... | @@ -0,0 +1,458 @@ |
1 | + GNU LESSER GENERAL PUBLIC LICENSE | |
2 | + Version 2.1, February 1999 | |
3 | + | |
4 | + Copyright (C) 1991, 1999 Free Software Foundation, Inc. | |
5 | + 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
6 | + Everyone is permitted to copy and distribute verbatim copies | |
7 | + of this license document, but changing it is not allowed. | |
8 | + | |
9 | +[This is the first released version of the Lesser GPL. It also counts | |
10 | + as the successor of the GNU Library Public License, version 2, hence | |
11 | + the version number 2.1.] | |
12 | + | |
13 | + Preamble | |
14 | + | |
15 | + The licenses for most software are designed to take away your | |
16 | +freedom to share and change it. By contrast, the GNU General Public | |
17 | +Licenses are intended to guarantee your freedom to share and change | |
18 | +free software--to make sure the software is free for all its users. | |
19 | + | |
20 | + This license, the Lesser General Public License, applies to some | |
21 | +specially designated software packages--typically libraries--of the | |
22 | +Free Software Foundation and other authors who decide to use it. You | |
23 | +can use it too, but we suggest you first think carefully about whether | |
24 | +this license or the ordinary General Public License is the better | |
25 | +strategy to use in any particular case, based on the explanations below. | |
26 | + | |
27 | + When we speak of free software, we are referring to freedom of use, | |
28 | +not price. Our General Public Licenses are designed to make sure that | |
29 | +you have the freedom to distribute copies of free software (and charge | |
30 | +for this service if you wish); that you receive source code or can get | |
31 | +it if you want it; that you can change the software and use pieces of | |
32 | +it in new free programs; and that you are informed that you can do | |
33 | +these things. | |
34 | + | |
35 | + To protect your rights, we need to make restrictions that forbid | |
36 | +distributors to deny you these rights or to ask you to surrender these | |
37 | +rights. These restrictions translate to certain responsibilities for | |
38 | +you if you distribute copies of the library or if you modify it. | |
39 | + | |
40 | + For example, if you distribute copies of the library, whether gratis | |
41 | +or for a fee, you must give the recipients all the rights that we gave | |
42 | +you. You must make sure that they, too, receive or can get the source | |
43 | +code. If you link other code with the library, you must provide | |
44 | +complete object files to the recipients, so that they can relink them | |
45 | +with the library after making changes to the library and recompiling | |
46 | +it. And you must show them these terms so they know their rights. | |
47 | + | |
48 | + We protect your rights with a two-step method: (1) we copyright the | |
49 | +library, and (2) we offer you this license, which gives you legal | |
50 | +permission to copy, distribute and/or modify the library. | |
51 | + | |
52 | + To protect each distributor, we want to make it very clear that | |
53 | +there is no warranty for the free library. Also, if the library is | |
54 | +modified by someone else and passed on, the recipients should know | |
55 | +that what they have is not the original version, so that the original | |
56 | +author's reputation will not be affected by problems that might be | |
57 | +introduced by others. | |
58 | + | |
59 | + Finally, software patents pose a constant threat to the existence of | |
60 | +any free program. We wish to make sure that a company cannot | |
61 | +effectively restrict the users of a free program by obtaining a | |
62 | +restrictive license from a patent holder. Therefore, we insist that | |
63 | +any patent license obtained for a version of the library must be | |
64 | +consistent with the full freedom of use specified in this license. | |
65 | + | |
66 | + Most GNU software, including some libraries, is covered by the | |
67 | +ordinary GNU General Public License. This license, the GNU Lesser | |
68 | +General Public License, applies to certain designated libraries, and | |
69 | +is quite different from the ordinary General Public License. We use | |
70 | +this license for certain libraries in order to permit linking those | |
71 | +libraries into non-free programs. | |
72 | + | |
73 | + When a program is linked with a library, whether statically or using | |
74 | +a shared library, the combination of the two is legally speaking a | |
75 | +combined work, a derivative of the original library. The ordinary | |
76 | +General Public License therefore permits such linking only if the | |
77 | +entire combination fits its criteria of freedom. The Lesser General | |
78 | +Public License permits more lax criteria for linking other code with | |
79 | +the library. | |
80 | + | |
81 | + We call this license the "Lesser" General Public License because it | |
82 | +does Less to protect the user's freedom than the ordinary General | |
83 | +Public License. It also provides other free software developers Less | |
84 | +of an advantage over competing non-free programs. These disadvantages | |
85 | +are the reason we use the ordinary General Public License for many | |
86 | +libraries. However, the Lesser license provides advantages in certain | |
87 | +special circumstances. | |
88 | + | |
89 | + For example, on rare occasions, there may be a special need to | |
90 | +encourage the widest possible use of a certain library, so that it becomes | |
91 | +a de-facto standard. To achieve this, non-free programs must be | |
92 | +allowed to use the library. A more frequent case is that a free | |
93 | +library does the same job as widely used non-free libraries. In this | |
94 | +case, there is little to gain by limiting the free library to free | |
95 | +software only, so we use the Lesser General Public License. | |
96 | + | |
97 | + In other cases, permission to use a particular library in non-free | |
98 | +programs enables a greater number of people to use a large body of | |
99 | +free software. For example, permission to use the GNU C Library in | |
100 | +non-free programs enables many more people to use the whole GNU | |
101 | +operating system, as well as its variant, the GNU/Linux operating | |
102 | +system. | |
103 | + | |
104 | + Although the Lesser General Public License is Less protective of the | |
105 | +users' freedom, it does ensure that the user of a program that is | |
106 | +linked with the Library has the freedom and the wherewithal to run | |
107 | +that program using a modified version of the Library. | |
108 | + | |
109 | + The precise terms and conditions for copying, distribution and | |
110 | +modification follow. Pay close attention to the difference between a | |
111 | +"work based on the library" and a "work that uses the library". The | |
112 | +former contains code derived from the library, whereas the latter must | |
113 | +be combined with the library in order to run. | |
114 | + | |
115 | + GNU LESSER GENERAL PUBLIC LICENSE | |
116 | + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION | |
117 | + | |
118 | + 0. This License Agreement applies to any software library or other | |
119 | +program which contains a notice placed by the copyright holder or | |
120 | +other authorized party saying it may be distributed under the terms of | |
121 | +this Lesser General Public License (also called "this License"). | |
122 | +Each licensee is addressed as "you". | |
123 | + | |
124 | + A "library" means a collection of software functions and/or data | |
125 | +prepared so as to be conveniently linked with application programs | |
126 | +(which use some of those functions and data) to form executables. | |
127 | + | |
128 | + The "Library", below, refers to any such software library or work | |
129 | +which has been distributed under these terms. A "work based on the | |
130 | +Library" means either the Library or any derivative work under | |
131 | +copyright law: that is to say, a work containing the Library or a | |
132 | +portion of it, either verbatim or with modifications and/or translated | |
133 | +straightforwardly into another language. (Hereinafter, translation is | |
134 | +included without limitation in the term "modification".) | |
135 | + | |
136 | + "Source code" for a work means the preferred form of the work for | |
137 | +making modifications to it. For a library, complete source code means | |
138 | +all the source code for all modules it contains, plus any associated | |
139 | +interface definition files, plus the scripts used to control compilation | |
140 | +and installation of the library. | |
141 | + | |
142 | + Activities other than copying, distribution and modification are not | |
143 | +covered by this License; they are outside its scope. The act of | |
144 | +running a program using the Library is not restricted, and output from | |
145 | +such a program is covered only if its contents constitute a work based | |
146 | +on the Library (independent of the use of the Library in a tool for | |
147 | +writing it). Whether that is true depends on what the Library does | |
148 | +and what the program that uses the Library does. | |
149 | + | |
150 | + 1. You may copy and distribute verbatim copies of the Library's | |
151 | +complete source code as you receive it, in any medium, provided that | |
152 | +you conspicuously and appropriately publish on each copy an | |
153 | +appropriate copyright notice and disclaimer of warranty; keep intact | |
154 | +all the notices that refer to this License and to the absence of any | |
155 | +warranty; and distribute a copy of this License along with the | |
156 | +Library. | |
157 | + | |
158 | + You may charge a fee for the physical act of transferring a copy, | |
159 | +and you may at your option offer warranty protection in exchange for a | |
160 | +fee. | |
161 | + | |
162 | + 2. You may modify your copy or copies of the Library or any portion | |
163 | +of it, thus forming a work based on the Library, and copy and | |
164 | +distribute such modifications or work under the terms of Section 1 | |
165 | +above, provided that you also meet all of these conditions: | |
166 | + | |
167 | + a) The modified work must itself be a software library. | |
168 | + | |
169 | + b) You must cause the files modified to carry prominent notices | |
170 | + stating that you changed the files and the date of any change. | |
171 | + | |
172 | + c) You must cause the whole of the work to be licensed at no | |
173 | + charge to all third parties under the terms of this License. | |
174 | + | |
175 | + d) If a facility in the modified Library refers to a function or a | |
176 | + table of data to be supplied by an application program that uses | |
177 | + the facility, other than as an argument passed when the facility | |
178 | + is invoked, then you must make a good faith effort to ensure that, | |
179 | + in the event an application does not supply such function or | |
180 | + table, the facility still operates, and performs whatever part of | |
181 | + its purpose remains meaningful. | |
182 | + | |
183 | + (For example, a function in a library to compute square roots has | |
184 | + a purpose that is entirely well-defined independent of the | |
185 | + application. Therefore, Subsection 2d requires that any | |
186 | + application-supplied function or table used by this function must | |
187 | + be optional: if the application does not supply it, the square | |
188 | + root function must still compute square roots.) | |
189 | + | |
190 | +These requirements apply to the modified work as a whole. If | |
191 | +identifiable sections of that work are not derived from the Library, | |
192 | +and can be reasonably considered independent and separate works in | |
193 | +themselves, then this License, and its terms, do not apply to those | |
194 | +sections when you distribute them as separate works. But when you | |
195 | +distribute the same sections as part of a whole which is a work based | |
196 | +on the Library, the distribution of the whole must be on the terms of | |
197 | +this License, whose permissions for other licensees extend to the | |
198 | +entire whole, and thus to each and every part regardless of who wrote | |
199 | +it. | |
200 | + | |
201 | +Thus, it is not the intent of this section to claim rights or contest | |
202 | +your rights to work written entirely by you; rather, the intent is to | |
203 | +exercise the right to control the distribution of derivative or | |
204 | +collective works based on the Library. | |
205 | + | |
206 | +In addition, mere aggregation of another work not based on the Library | |
207 | +with the Library (or with a work based on the Library) on a volume of | |
208 | +a storage or distribution medium does not bring the other work under | |
209 | +the scope of this License. | |
210 | + | |
211 | + 3. You may opt to apply the terms of the ordinary GNU General Public | |
212 | +License instead of this License to a given copy of the Library. To do | |
213 | +this, you must alter all the notices that refer to this License, so | |
214 | +that they refer to the ordinary GNU General Public License, version 2, | |
215 | +instead of to this License. (If a newer version than version 2 of the | |
216 | +ordinary GNU General Public License has appeared, then you can specify | |
217 | +that version instead if you wish.) Do not make any other change in | |
218 | +these notices. | |
219 | + | |
220 | + Once this change is made in a given copy, it is irreversible for | |
221 | +that copy, so the ordinary GNU General Public License applies to all | |
222 | +subsequent copies and derivative works made from that copy. | |
223 | + | |
224 | + This option is useful when you wish to copy part of the code of | |
225 | +the Library into a program that is not a library. | |
226 | + | |
227 | + 4. You may copy and distribute the Library (or a portion or | |
228 | +derivative of it, under Section 2) in object code or executable form | |
229 | +under the terms of Sections 1 and 2 above provided that you accompany | |
230 | +it with the complete corresponding machine-readable source code, which | |
231 | +must be distributed under the terms of Sections 1 and 2 above on a | |
232 | +medium customarily used for software interchange. | |
233 | + | |
234 | + If distribution of object code is made by offering access to copy | |
235 | +from a designated place, then offering equivalent access to copy the | |
236 | +source code from the same place satisfies the requirement to | |
237 | +distribute the source code, even though third parties are not | |
238 | +compelled to copy the source along with the object code. | |
239 | + | |
240 | + 5. A program that contains no derivative of any portion of the | |
241 | +Library, but is designed to work with the Library by being compiled or | |
242 | +linked with it, is called a "work that uses the Library". Such a | |
243 | +work, in isolation, is not a derivative work of the Library, and | |
244 | +therefore falls outside the scope of this License. | |
245 | + | |
246 | + However, linking a "work that uses the Library" with the Library | |
247 | +creates an executable that is a derivative of the Library (because it | |
248 | +contains portions of the Library), rather than a "work that uses the | |
249 | +library". The executable is therefore covered by this License. | |
250 | +Section 6 states terms for distribution of such executables. | |
251 | + | |
252 | + When a "work that uses the Library" uses material from a header file | |
253 | +that is part of the Library, the object code for the work may be a | |
254 | +derivative work of the Library even though the source code is not. | |
255 | +Whether this is true is especially significant if the work can be | |
256 | +linked without the Library, or if the work is itself a library. The | |
257 | +threshold for this to be true is not precisely defined by law. | |
258 | + | |
259 | + If such an object file uses only numerical parameters, data | |
260 | +structure layouts and accessors, and small macros and small inline | |
261 | +functions (ten lines or less in length), then the use of the object | |
262 | +file is unrestricted, regardless of whether it is legally a derivative | |
263 | +work. (Executables containing this object code plus portions of the | |
264 | +Library will still fall under Section 6.) | |
265 | + | |
266 | + Otherwise, if the work is a derivative of the Library, you may | |
267 | +distribute the object code for the work under the terms of Section 6. | |
268 | +Any executables containing that work also fall under Section 6, | |
269 | +whether or not they are linked directly with the Library itself. | |
270 | + | |
271 | + 6. As an exception to the Sections above, you may also combine or | |
272 | +link a "work that uses the Library" with the Library to produce a | |
273 | +work containing portions of the Library, and distribute that work | |
274 | +under terms of your choice, provided that the terms permit | |
275 | +modification of the work for the customer's own use and reverse | |
276 | +engineering for debugging such modifications. | |
277 | + | |
278 | + You must give prominent notice with each copy of the work that the | |
279 | +Library is used in it and that the Library and its use are covered by | |
280 | +this License. You must supply a copy of this License. If the work | |
281 | +during execution displays copyright notices, you must include the | |
282 | +copyright notice for the Library among them, as well as a reference | |
283 | +directing the user to the copy of this License. Also, you must do one | |
284 | +of these things: | |
285 | + | |
286 | + a) Accompany the work with the complete corresponding | |
287 | + machine-readable source code for the Library including whatever | |
288 | + changes were used in the work (which must be distributed under | |
289 | + Sections 1 and 2 above); and, if the work is an executable linked | |
290 | + with the Library, with the complete machine-readable "work that | |
291 | + uses the Library", as object code and/or source code, so that the | |
292 | + user can modify the Library and then relink to produce a modified | |
293 | + executable containing the modified Library. (It is understood | |
294 | + that the user who changes the contents of definitions files in the | |
295 | + Library will not necessarily be able to recompile the application | |
296 | + to use the modified definitions.) | |
297 | + | |
298 | + b) Use a suitable shared library mechanism for linking with the | |
299 | + Library. A suitable mechanism is one that (1) uses at run time a | |
300 | + copy of the library already present on the user's computer system, | |
301 | + rather than copying library functions into the executable, and (2) | |
302 | + will operate properly with a modified version of the library, if | |
303 | + the user installs one, as long as the modified version is | |
304 | + interface-compatible with the version that the work was made with. | |
305 | + | |
306 | + c) Accompany the work with a written offer, valid for at | |
307 | + least three years, to give the same user the materials | |
308 | + specified in Subsection 6a, above, for a charge no more | |
309 | + than the cost of performing this distribution. | |
310 | + | |
311 | + d) If distribution of the work is made by offering access to copy | |
312 | + from a designated place, offer equivalent access to copy the above | |
313 | + specified materials from the same place. | |
314 | + | |
315 | + e) Verify that the user has already received a copy of these | |
316 | + materials or that you have already sent this user a copy. | |
317 | + | |
318 | + For an executable, the required form of the "work that uses the | |
319 | +Library" must include any data and utility programs needed for | |
320 | +reproducing the executable from it. However, as a special exception, | |
321 | +the materials to be distributed need not include anything that is | |
322 | +normally distributed (in either source or binary form) with the major | |
323 | +components (compiler, kernel, and so on) of the operating system on | |
324 | +which the executable runs, unless that component itself accompanies | |
325 | +the executable. | |
326 | + | |
327 | + It may happen that this requirement contradicts the license | |
328 | +restrictions of other proprietary libraries that do not normally | |
329 | +accompany the operating system. Such a contradiction means you cannot | |
330 | +use both them and the Library together in an executable that you | |
331 | +distribute. | |
332 | + | |
333 | + 7. You may place library facilities that are a work based on the | |
334 | +Library side-by-side in a single library together with other library | |
335 | +facilities not covered by this License, and distribute such a combined | |
336 | +library, provided that the separate distribution of the work based on | |
337 | +the Library and of the other library facilities is otherwise | |
338 | +permitted, and provided that you do these two things: | |
339 | + | |
340 | + a) Accompany the combined library with a copy of the same work | |
341 | + based on the Library, uncombined with any other library | |
342 | + facilities. This must be distributed under the terms of the | |
343 | + Sections above. | |
344 | + | |
345 | + b) Give prominent notice with the combined library of the fact | |
346 | + that part of it is a work based on the Library, and explaining | |
347 | + where to find the accompanying uncombined form of the same work. | |
348 | + | |
349 | + 8. You may not copy, modify, sublicense, link with, or distribute | |
350 | +the Library except as expressly provided under this License. Any | |
351 | +attempt otherwise to copy, modify, sublicense, link with, or | |
352 | +distribute the Library is void, and will automatically terminate your | |
353 | +rights under this License. However, parties who have received copies, | |
354 | +or rights, from you under this License will not have their licenses | |
355 | +terminated so long as such parties remain in full compliance. | |
356 | + | |
357 | + 9. You are not required to accept this License, since you have not | |
358 | +signed it. However, nothing else grants you permission to modify or | |
359 | +distribute the Library or its derivative works. These actions are | |
360 | +prohibited by law if you do not accept this License. Therefore, by | |
361 | +modifying or distributing the Library (or any work based on the | |
362 | +Library), you indicate your acceptance of this License to do so, and | |
363 | +all its terms and conditions for copying, distributing or modifying | |
364 | +the Library or works based on it. | |
365 | + | |
366 | + 10. Each time you redistribute the Library (or any work based on the | |
367 | +Library), the recipient automatically receives a license from the | |
368 | +original licensor to copy, distribute, link with or modify the Library | |
369 | +subject to these terms and conditions. You may not impose any further | |
370 | +restrictions on the recipients' exercise of the rights granted herein. | |
371 | +You are not responsible for enforcing compliance by third parties with | |
372 | +this License. | |
373 | + | |
374 | + 11. If, as a consequence of a court judgment or allegation of patent | |
375 | +infringement or for any other reason (not limited to patent issues), | |
376 | +conditions are imposed on you (whether by court order, agreement or | |
377 | +otherwise) that contradict the conditions of this License, they do not | |
378 | +excuse you from the conditions of this License. If you cannot | |
379 | +distribute so as to satisfy simultaneously your obligations under this | |
380 | +License and any other pertinent obligations, then as a consequence you | |
381 | +may not distribute the Library at all. For example, if a patent | |
382 | +license would not permit royalty-free redistribution of the Library by | |
383 | +all those who receive copies directly or indirectly through you, then | |
384 | +the only way you could satisfy both it and this License would be to | |
385 | +refrain entirely from distribution of the Library. | |
386 | + | |
387 | +If any portion of this section is held invalid or unenforceable under any | |
388 | +particular circumstance, the balance of the section is intended to apply, | |
389 | +and the section as a whole is intended to apply in other circumstances. | |
390 | + | |
391 | +It is not the purpose of this section to induce you to infringe any | |
392 | +patents or other property right claims or to contest validity of any | |
393 | +such claims; this section has the sole purpose of protecting the | |
394 | +integrity of the free software distribution system which is | |
395 | +implemented by public license practices. Many people have made | |
396 | +generous contributions to the wide range of software distributed | |
397 | +through that system in reliance on consistent application of that | |
398 | +system; it is up to the author/donor to decide if he or she is willing | |
399 | +to distribute software through any other system and a licensee cannot | |
400 | +impose that choice. | |
401 | + | |
402 | +This section is intended to make thoroughly clear what is believed to | |
403 | +be a consequence of the rest of this License. | |
404 | + | |
405 | + 12. If the distribution and/or use of the Library is restricted in | |
406 | +certain countries either by patents or by copyrighted interfaces, the | |
407 | +original copyright holder who places the Library under this License may add | |
408 | +an explicit geographical distribution limitation excluding those countries, | |
409 | +so that distribution is permitted only in or among countries not thus | |
410 | +excluded. In such case, this License incorporates the limitation as if | |
411 | +written in the body of this License. | |
412 | + | |
413 | + 13. The Free Software Foundation may publish revised and/or new | |
414 | +versions of the Lesser General Public License from time to time. | |
415 | +Such new versions will be similar in spirit to the present version, | |
416 | +but may differ in detail to address new problems or concerns. | |
417 | + | |
418 | +Each version is given a distinguishing version number. If the Library | |
419 | +specifies a version number of this License which applies to it and | |
420 | +"any later version", you have the option of following the terms and | |
421 | +conditions either of that version or of any later version published by | |
422 | +the Free Software Foundation. If the Library does not specify a | |
423 | +license version number, you may choose any version ever published by | |
424 | +the Free Software Foundation. | |
425 | + | |
426 | + 14. If you wish to incorporate parts of the Library into other free | |
427 | +programs whose distribution conditions are incompatible with these, | |
428 | +write to the author to ask for permission. For software which is | |
429 | +copyrighted by the Free Software Foundation, write to the Free | |
430 | +Software Foundation; we sometimes make exceptions for this. Our | |
431 | +decision will be guided by the two goals of preserving the free status | |
432 | +of all derivatives of our free software and of promoting the sharing | |
433 | +and reuse of software generally. | |
434 | + | |
435 | + NO WARRANTY | |
436 | + | |
437 | + 15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO | |
438 | +WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. | |
439 | +EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR | |
440 | +OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY | |
441 | +KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE | |
442 | +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | |
443 | +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE | |
444 | +LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME | |
445 | +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | |
446 | + | |
447 | + 16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN | |
448 | +WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY | |
449 | +AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU | |
450 | +FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR | |
451 | +CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE | |
452 | +LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING | |
453 | +RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A | |
454 | +FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF | |
455 | +SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH | |
456 | +DAMAGES. | |
457 | + | |
458 | + END OF TERMS AND CONDITIONS | ... | ... |