Commit e5caad0535d100d8b511702d93241285334f1033

Authored by AntonioTerceiro
1 parent 63861f76

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
public/javascripts/codepress/codepress.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/codepress.html 0 → 100644
... ... @@ -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>
... ...
public/javascripts/codepress/codepress.js 0 → 100644
... ... @@ -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);
... ...
public/javascripts/codepress/engines/gecko.js 0 → 100644
... ... @@ -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,'&lt;');
  138 + content = content.replace(/>/g,'&gt;');
  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(/&lt;/g,'<');
  241 + code = code.replace(/&gt;/g,'>');
  242 + code = code.replace(/&amp;/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,'&amp;');
  251 + code = code.replace(/</g,'&lt;');
  252 + code = code.replace(/>/g,'&gt;');
  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
... ...
public/javascripts/codepress/engines/khtml.js 0 → 100644
public/javascripts/codepress/engines/msie.js 0 → 100644
... ... @@ -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(/&nbsp;/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,'&lt;');
  147 + content = content.replace(/>/g,'&gt;');
  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(/&nbsp;/gi,'');
  254 + code = code.replace(/\u2009/g,'');
  255 + code = code.replace(/<.*?>/g,'');
  256 + code = code.replace(/&lt;/g,'<');
  257 + code = code.replace(/&gt;/g,'>');
  258 + code = code.replace(/&amp;/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,'&amp;');
  267 + code = code.replace(/</g,'&lt;');
  268 + code = code.replace(/>/g,'&gt;');
  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
... ...
public/javascripts/codepress/engines/older.js 0 → 100644
public/javascripts/codepress/engines/opera.js 0 → 100644
... ... @@ -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,'&lt;');
  138 + content = content.replace(/>/g,'&gt;');
  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(/&lt;/g,'<');
  214 + code = code.replace(/&gt;/g,'>');
  215 + code = code.replace(/&amp;/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,'&amp;');
  224 + code = code.replace(/</g,'&lt;');
  225 + code = code.replace(/>/g,'&gt;');
  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);
... ...
public/javascripts/codepress/images/line-numbers.png 0 → 100644

16.2 KB

public/javascripts/codepress/index.html 0 → 100644
... ... @@ -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">&nbsp;&nbsp;Install&nbsp;&nbsp;</a>
  55 + </td>
  56 + <td>
  57 + <a href="http://www.codepress.org/to-do.php">&nbsp;&nbsp;To-do&nbsp;&nbsp;</a>
  58 + </td>
  59 + <td>
  60 + <a href="http://www.codepress.org/about.php" id="about">&nbsp;&nbsp;About&nbsp;&nbsp;</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("/>/","&amp;gt;",$code);
  95 + $code = preg_replace("/</","&amp;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>&lt;head&gt;</code> or above the <code>&lt;/body&gt;</code> tag.
  162 + </p>
  163 +
  164 + <p class="copycode">
  165 + &lt;script src="/codepress/codepress.js" type="text/javascript"&gt;&lt;/script&gt;
  166 + </p>
  167 + </li>
  168 +
  169 + <li>
  170 + <p>
  171 + Add the <code>&lt;textarea&gt;</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 + &lt;textarea id="myCpWindow" class="codepress javascript linenumbers-off"&gt;<br />
  176 + &nbsp;&nbsp;&nbsp;// your code here<br />
  177 + &lt;/textarea&gt;
  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>&lt;textarea id="<strong>xx</strong>"...&gt;</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("/>/","&amp;gt;",$code);
  254 + $code = preg_replace("/</","&amp;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>
... ...
public/javascripts/codepress/languages/asp.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/asp.js 0 → 100644
... ... @@ -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 : /(&lt;[^!%|!%@]*?&gt;)/g, output : '<b>$1</b>' },
  9 +// style tags
  10 + { input : /(&lt;style.*?&gt;)(.*?)(&lt;\/style&gt;)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' },
  11 +// script tags
  12 + { input : /(&lt;script.*?&gt;)(.*?)(&lt;\/script&gt;)/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 : /(&lt;%)/g, output : '<strong>$1' },
  19 +// .*%>
  20 + { input : /(%&gt;)/g, output : '$1</strong>' },
  21 +// <%@...%>
  22 + { input : /(&lt;%@)(.+?)(%&gt;)/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 : /(&lt;!--.*?--&gt.)/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 : '&nbsp;' },
  114 + { input : '[enter]', output : '<br />' } ,
  115 + { input : '[j]', output : 'testing' },
  116 + { input : '[7]', output : '&amp;' }
  117 +]
0 118 \ No newline at end of file
... ...
public/javascripts/codepress/languages/autoit.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/autoit.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/csharp.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/csharp.js 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/css.css 0 → 100644
... ... @@ -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 +
... ...
public/javascripts/codepress/languages/css.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/generic.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/generic.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/html.css 0 → 100644
... ... @@ -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 */
... ...
public/javascripts/codepress/languages/html.js 0 → 100644
... ... @@ -0,0 +1,59 @@
  1 +/*
  2 + * CodePress regular expressions for HTML syntax highlighting
  3 + */
  4 +
  5 +// HTML
  6 +Language.syntax = [
  7 + { input : /(&lt;[^!]*?&gt;)/g, output : '<b>$1</b>' }, // all tags
  8 + { input : /(&lt;a .*?&gt;|&lt;\/a&gt;)/g, output : '<a>$1</a>' }, // links
  9 + { input : /(&lt;img .*?&gt;)/g, output : '<big>$1</big>' }, // images
  10 + { input : /(&lt;\/?(button|textarea|form|input|select|option|label).*?&gt;)/g, output : '<u>$1</u>' }, // forms
  11 + { input : /(&lt;style.*?&gt;)(.*?)(&lt;\/style&gt;)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' }, // style tags
  12 + { input : /(&lt;script.*?&gt;)(.*?)(&lt;\/script&gt;)/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 : /(&lt;!--.*?--&gt.)/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 = []
... ...
public/javascripts/codepress/languages/java.css 0 → 100644
... ... @@ -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 */
... ...
public/javascripts/codepress/languages/java.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/javascript.css 0 → 100644
... ... @@ -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 */
... ...
public/javascripts/codepress/languages/javascript.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/perl.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/perl.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/php.css 0 → 100644
... ... @@ -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 ?> */
... ...
public/javascripts/codepress/languages/php.js 0 → 100644
... ... @@ -0,0 +1,61 @@
  1 +/*
  2 + * CodePress regular expressions for PHP syntax highlighting
  3 + */
  4 +
  5 +// PHP
  6 +Language.syntax = [
  7 + { input : /(&lt;[^!\?]*?&gt;)/g, output : '<b>$1</b>' }, // all tags
  8 + { input : /(&lt;style.*?&gt;)(.*?)(&lt;\/style&gt;)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' }, // style tags
  9 + { input : /(&lt;script.*?&gt;)(.*?)(&lt;\/script&gt;)/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 : /(&lt;\?)/g, output : '<strong>$1' }, // <?.*
  13 + { input : /(\?&gt;)/g, output : '$1</strong>' }, // .*?>
  14 + { input : /(&lt;\?php|&lt;\?=|&lt;\?|\?&gt;)/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 : /(&lt;!--.*?--&gt.)/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 : '&nbsp;' },
  58 + { input : '[enter]', output : '<br />' } ,
  59 + { input : '[j]', output : 'testing' },
  60 + { input : '[7]', output : '&amp;' }
  61 +]
0 62 \ No newline at end of file
... ...
public/javascripts/codepress/languages/ruby.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/ruby.js 0 → 100644
... ... @@ -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 = []
... ...
public/javascripts/codepress/languages/sql.css 0 → 100644
... ... @@ -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 */
... ...
public/javascripts/codepress/languages/sql.js 0 → 100644
... ... @@ -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 +
... ...
public/javascripts/codepress/languages/text.css 0 → 100644
... ... @@ -0,0 +1,5 @@
  1 +/*
  2 + * CodePress color styles for Text syntax highlighting
  3 + */
  4 +
  5 +/* do nothing as expected */
... ...
public/javascripts/codepress/languages/text.js 0 → 100644
... ... @@ -0,0 +1,9 @@
  1 +/*
  2 + * CodePress regular expressions for Text syntax highlighting
  3 + */
  4 +
  5 +// plain text
  6 +Language.syntax = []
  7 +Language.snippets = []
  8 +Language.complete = []
  9 +Language.shortcuts = []
... ...
public/javascripts/codepress/languages/vbscript.css 0 → 100644
... ... @@ -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
... ...
public/javascripts/codepress/languages/vbscript.js 0 → 100644
... ... @@ -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 : /(&lt;[^!%|!%@]*?&gt;)/g, output : '<b>$1</b>' },
  9 +// style tags
  10 + { input : /(&lt;style.*?&gt;)(.*?)(&lt;\/style&gt;)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' },
  11 +// script tags
  12 + { input : /(&lt;script.*?&gt;)(.*?)(&lt;\/script&gt;)/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 : /(&lt;%)/g, output : '<strong>$1' },
  19 +// .*%>
  20 + { input : /(%&gt;)/g, output : '$1</strong>' },
  21 +// <%@...%>
  22 + { input : /(&lt;%@)(.+?)(%&gt;)/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 : /(&lt;!--.*?--&gt.)/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 : '&nbsp;' },
  114 + { input : '[enter]', output : '<br />' } ,
  115 + { input : '[j]', output : 'testing' },
  116 + { input : '[7]', output : '&amp;' }
  117 +]
0 118 \ No newline at end of file
... ...
public/javascripts/codepress/languages/xsl.css 0 → 100644
... ... @@ -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 */
... ...
public/javascripts/codepress/languages/xsl.js 0 → 100644
... ... @@ -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 : /(&lt;[^!]*?&gt;)/g,
  9 + output : '<b>$1</b>' // all tags
  10 + },{
  11 + input : /(&lt;a.*?&gt;|&lt;\/a&gt;)/g,
  12 + output : '<a>$1</a>' // links
  13 + },{
  14 + input : /(&lt;img .*?&gt;)/g,
  15 + output : '<big>$1</big>' // images
  16 + },{
  17 + input : /(&lt;\/?(button|textarea|form|input|select|option|label).*?&gt;)/g,
  18 + output : '<u>$1</u>' // forms
  19 + },{
  20 + input : /(&lt;style.*?&gt;)(.*?)(&lt;\/style&gt;)/g,
  21 + output : '<em>$1</em><em>$2</em><em>$3</em>' // style tags
  22 + },{
  23 + input : /(&lt;script.*?&gt;)(.*?)(&lt;\/script&gt;)/g,
  24 + output : '<strong>$1</strong><tt>$2</tt><strong>$3</strong>' // script tags
  25 + },{
  26 + input : /(&lt;xsl.*?&gt;|&lt;\/xsl.*?&gt;)/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 : /(&lt;!--.*?--&gt.)/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
... ...
public/javascripts/codepress/license.txt 0 → 100644
... ... @@ -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
... ...