Browse files

API CHANGE Moved tinymce-advcode plugin from jsparty/tinymce_advcode …

…to sapphire/thirdparty/tinymce-advcode

git-svn-id: svn://svn.silverstripe.com/silverstripe/open/modules/sapphire/trunk@92500 467b73ca-7a2a-4603-9d3b-597d59a354a9
  • Loading branch information...
1 parent 3b97ce1 commit 678502e2c943628a5a76ab09ed78ded4e30bef2d @chillu chillu committed Nov 21, 2009
Showing with 3,089 additions and 0 deletions.
  1. +8 −0 thirdparty/tinymce-advcode/.piston.yml
  2. +11 −0 thirdparty/tinymce-advcode/README
  3. +3 −0 thirdparty/tinymce-advcode/README.txt
  4. +29 −0 thirdparty/tinymce-advcode/dialog.html
  5. +41 −0 thirdparty/tinymce-advcode/editor_plugin.js
  6. +41 −0 thirdparty/tinymce-advcode/editor_plugin_src.js
  7. BIN thirdparty/tinymce-advcode/img/html.png
  8. +21 −0 thirdparty/tinymce-advcode/js/codepress/codepress.css
  9. +35 −0 thirdparty/tinymce-advcode/js/codepress/codepress.html
  10. +138 −0 thirdparty/tinymce-advcode/js/codepress/codepress.js
  11. +293 −0 thirdparty/tinymce-advcode/js/codepress/engines/gecko.js
  12. 0 thirdparty/tinymce-advcode/js/codepress/engines/khtml.js
  13. +304 −0 thirdparty/tinymce-advcode/js/codepress/engines/msie.js
  14. 0 thirdparty/tinymce-advcode/js/codepress/engines/older.js
  15. +260 −0 thirdparty/tinymce-advcode/js/codepress/engines/opera.js
  16. BIN thirdparty/tinymce-advcode/js/codepress/images/line-numbers.png
  17. +443 −0 thirdparty/tinymce-advcode/js/codepress/index.html
  18. +71 −0 thirdparty/tinymce-advcode/js/codepress/languages/asp.css
  19. +117 −0 thirdparty/tinymce-advcode/js/codepress/languages/asp.js
  20. +13 −0 thirdparty/tinymce-advcode/js/codepress/languages/autoit.css
  21. +32 −0 thirdparty/tinymce-advcode/js/codepress/languages/autoit.js
  22. +9 −0 thirdparty/tinymce-advcode/js/codepress/languages/csharp.css
  23. +25 −0 thirdparty/tinymce-advcode/js/codepress/languages/csharp.js
  24. +10 −0 thirdparty/tinymce-advcode/js/codepress/languages/css.css
  25. +23 −0 thirdparty/tinymce-advcode/js/codepress/languages/css.js
  26. +9 −0 thirdparty/tinymce-advcode/js/codepress/languages/generic.css
  27. +25 −0 thirdparty/tinymce-advcode/js/codepress/languages/generic.js
  28. +13 −0 thirdparty/tinymce-advcode/js/codepress/languages/html.css
  29. +59 −0 thirdparty/tinymce-advcode/js/codepress/languages/html.js
  30. +7 −0 thirdparty/tinymce-advcode/js/codepress/languages/java.css
  31. +24 −0 thirdparty/tinymce-advcode/js/codepress/languages/java.js
  32. +8 −0 thirdparty/tinymce-advcode/js/codepress/languages/javascript.css
  33. +30 −0 thirdparty/tinymce-advcode/js/codepress/languages/javascript.js
  34. +11 −0 thirdparty/tinymce-advcode/js/codepress/languages/perl.css
  35. +27 −0 thirdparty/tinymce-advcode/js/codepress/languages/perl.js
  36. +12 −0 thirdparty/tinymce-advcode/js/codepress/languages/php.css
  37. +61 −0 thirdparty/tinymce-advcode/js/codepress/languages/php.js
  38. +10 −0 thirdparty/tinymce-advcode/js/codepress/languages/ruby.css
  39. +26 −0 thirdparty/tinymce-advcode/js/codepress/languages/ruby.js
  40. +10 −0 thirdparty/tinymce-advcode/js/codepress/languages/sql.css
  41. +30 −0 thirdparty/tinymce-advcode/js/codepress/languages/sql.js
  42. +5 −0 thirdparty/tinymce-advcode/js/codepress/languages/text.css
  43. +9 −0 thirdparty/tinymce-advcode/js/codepress/languages/text.js
  44. +71 −0 thirdparty/tinymce-advcode/js/codepress/languages/vbscript.css
  45. +117 −0 thirdparty/tinymce-advcode/js/codepress/languages/vbscript.js
  46. +15 −0 thirdparty/tinymce-advcode/js/codepress/languages/xsl.css
  47. +103 −0 thirdparty/tinymce-advcode/js/codepress/languages/xsl.js
  48. +458 −0 thirdparty/tinymce-advcode/js/codepress/license.txt
  49. +15 −0 thirdparty/tinymce-advcode/js/dialog.js
  50. +3 −0 thirdparty/tinymce-advcode/langs/en.js
  51. +4 −0 thirdparty/tinymce-advcode/langs/en_dlg.js
View
8 thirdparty/tinymce-advcode/.piston.yml
@@ -0,0 +1,8 @@
+---
+format: 1
+handler:
+ commit: 1af68f76ab6bd5008a06706a3cfa02feb7bd4835
+ branch: master
+lock: false
+repository_url: git://github.com/dinsley/tinymce-codepress.git
+repository_class: Piston::Git::Repository
View
11 thirdparty/tinymce-advcode/README
@@ -0,0 +1,11 @@
+tinymce-codepress
+---------------------
+
+Provides syntax highlighting in the HTML source editing dialog with Codepress.
+
+Installation:
+ * Rename directory to 'advcode' in TinyMCE plugins directory.
+ * Add 'advcode' plugin to TinyMCE init configuration.
+ * Replace the existing source editing button with 'advcode' in your toolbar configuration.
+
+
View
3 thirdparty/tinymce-advcode/README.txt
@@ -0,0 +1,3 @@
+# SilverStripe Update Instructions
+
+Copy editor_plugin.js to editor_plugin_src.js to adhere to TinyMCE conventions, see http://wiki.moxiecode.com/index.php/TinyMCE:Create_plugin/3.x
View
29 thirdparty/tinymce-advcode/dialog.html
@@ -0,0 +1,29 @@
+<html>
+ <head>
+ <title>{#advcode_dlg.title}</title>
+ <script type="text/javascript" src="../../tiny_mce_popup.js"></script>
+ <script type="text/javascript" src="js/dialog.js"></script>
+ <script type="text/javascript" src="js/codepress/codepress.js"></script>
+ </head>
+
+ <body>
+ <form name="source" onsubmit="CodeDialog.insert();return false;">
+ <textarea id="codepress" class="codepress html linenumbers-on" cols="100" rows="25"></textarea>
+ </form>
+
+ <div>
+ <input type="checkbox" value="1" checked="checked" onclick="codepress.toggleLineNumbers()"/>
+ <label>{#advcode_dlg.number_toggle}</label>
+ </div>
+
+ <div class="mceActionPanel">
+ <div style="float: left">
+ <input type="button" id="insert" name="insert" value="{#insert}" onclick="CodeDialog.insert();" />
+ </div>
+
+ <div style="float: right">
+ <input type="button" id="cancel" name="cancel" value="{#cancel}" onclick="tinyMCEPopup.close();" />
+ </div>
+ </div>
+ </body>
+</html>
View
41 thirdparty/tinymce-advcode/editor_plugin.js
@@ -0,0 +1,41 @@
+(function() {
+ tinymce.PluginManager.requireLangPack('advcode');
+
+ tinymce.create('tinymce.plugins.AdvancedCodePlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceAdvancedCode', function() {
+ ed.windowManager.open({
+ file : url + '/dialog.html',
+ width : 750 + parseInt(ed.getLang('advcode.delta_width', 0)),
+ height : 450 + parseInt(ed.getLang('advcode.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.addButton('advcode', {
+ title : ed.getLang('advcode.desc', 0),
+ cmd : 'mceAdvancedCode',
+ image : url + '/img/html.png'
+ });
+
+ ed.onNodeChange.add(function(ed, cm, n) {});
+ },
+
+ getInfo : function() {
+ return {
+ longname : 'Advanced Code Editor',
+ author : 'Daniel Insley',
+ authorurl : 'http://www.danielinsley.com',
+ infourl : 'http://github.com/dinsley/tinymce-codepress/tree/master',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('advcode', tinymce.plugins.AdvancedCodePlugin);
+})();
View
41 thirdparty/tinymce-advcode/editor_plugin_src.js
@@ -0,0 +1,41 @@
+(function() {
+ tinymce.PluginManager.requireLangPack('advcode');
+
+ tinymce.create('tinymce.plugins.AdvancedCodePlugin', {
+ init : function(ed, url) {
+ // Register commands
+ ed.addCommand('mceAdvancedCode', function() {
+ ed.windowManager.open({
+ file : url + '/dialog.html',
+ width : 750 + parseInt(ed.getLang('advcode.delta_width', 0)),
+ height : 450 + parseInt(ed.getLang('advcode.delta_height', 0)),
+ inline : 1
+ }, {
+ plugin_url : url
+ });
+ });
+
+ // Register buttons
+ ed.addButton('advcode', {
+ title : ed.getLang('advcode.desc', 0),
+ cmd : 'mceAdvancedCode',
+ image : url + '/img/html.png'
+ });
+
+ ed.onNodeChange.add(function(ed, cm, n) {});
+ },
+
+ getInfo : function() {
+ return {
+ longname : 'Advanced Code Editor',
+ author : 'Daniel Insley',
+ authorurl : 'http://www.danielinsley.com',
+ infourl : 'http://github.com/dinsley/tinymce-codepress/tree/master',
+ version : tinymce.majorVersion + "." + tinymce.minorVersion
+ };
+ }
+ });
+
+ // Register plugin
+ tinymce.PluginManager.add('advcode', tinymce.plugins.AdvancedCodePlugin);
+})();
View
BIN thirdparty/tinymce-advcode/img/html.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
21 thirdparty/tinymce-advcode/js/codepress/codepress.css
@@ -0,0 +1,21 @@
+body {
+ margin-top:13px;
+ _margin-top:14px;
+ background:white;
+ margin-left:32px;
+ font-family:monospace;
+ font-size:13px;
+ white-space:pre;
+ background-image:url("images/line-numbers.png");
+ background-repeat:repeat-y;
+ background-position:0 3px;
+ line-height:16px;
+ height:100%;
+}
+pre {margin:0;}
+html>body{background-position:0 2px;}
+P {margin:0;padding:0;border:0;outline:0;display:block;white-space:pre;}
+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;}
+
+body.hide-line-numbers {background:white;margin-left:16px;}
+body.show-line-numbers {background-image:url("images/line-numbers.png");margin-left:32px;}
View
35 thirdparty/tinymce-advcode/js/codepress/codepress.html
@@ -0,0 +1,35 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+ <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title>
+ <meta name="description" content="CodePress - source code editor window" />
+
+ <script type="text/javascript">
+ var language = 'generic';
+ var engine = 'older';
+ var ua = navigator.userAgent;
+ var ts = (new Date).getTime(); // timestamp to avoid cache
+ var lh = location.href;
+
+ if(ua.match('MSIE')) engine = 'msie';
+ else if(ua.match('KHTML')) engine = 'khtml';
+ else if(ua.match('Opera')) engine = 'opera';
+ else if(ua.match('Gecko')) engine = 'gecko';
+
+ if(lh.match('language=')) language = lh.replace(/.*language=(.*?)(&.*)?$/,'$1');
+
+ document.write('<link type="text/css" href="codepress.css?ts='+ts+'" rel="stylesheet" />');
+ document.write('<link type="text/css" href="languages/'+language+'.css?ts='+ts+'" rel="stylesheet" id="cp-lang-style" />');
+ document.write('<scr'+'ipt type="text/javascript" src="engines/'+engine+'.js?ts='+ts+'"></scr'+'ipt>');
+ document.write('<scr'+'ipt type="text/javascript" src="languages/'+language+'.js?ts='+ts+'"></scr'+'ipt>');
+ </script>
+
+</head>
+
+<script type="text/javascript">
+if(engine == "msie" || engine == "gecko") document.write('<body><pre> </pre></body>');
+else if(engine == "opera") document.write('<body></body>');
+// else if(engine == "khtml") document.write('<body> </body>');
+</script>
+
+</html>
View
138 thirdparty/tinymce-advcode/js/codepress/codepress.js
@@ -0,0 +1,138 @@
+/*
+ * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
+ *
+ * Copyright (C) 2006 Fernando M.A.d.S. <fermads@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License as published by the Free Software Foundation.
+ *
+ * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
+ */
+
+CodePress = function(obj) {
+ var self = document.createElement('iframe');
+ self.textarea = obj;
+ self.textarea.disabled = true;
+ self.textarea.style.overflow = 'hidden';
+ self.style.height = '85%';
+ self.style.width = '100%';
+ self.textarea.style.overflow = 'auto';
+ //self.style.border = '1px solid gray';
+ self.frameBorder = 0; // remove IE internal iframe border
+ self.style.visibility = 'hidden';
+ self.style.position = 'absolute';
+ self.options = self.textarea.className;
+
+ self.initialize = function() {
+ self.editor = self.contentWindow.CodePress;
+ self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0];
+ self.editor.setCode(self.textarea.value);
+ self.setOptions();
+ self.editor.syntaxHighlight('init');
+ self.textarea.style.display = 'none';
+ self.style.position = 'static';
+ self.style.visibility = 'visible';
+ self.style.display = 'inline';
+ }
+
+ // obj can by a textarea id or a string (code)
+ self.edit = function(obj,language) {
+ if(obj) self.textarea.value = document.getElementById(obj) ? document.getElementById(obj).value : obj;
+ if(!self.textarea.disabled) return;
+ self.language = language ? language : self.getLanguage();
+ self.src = CodePress.path+'codepress.html?language='+self.language+'&ts='+(new Date).getTime();
+ if(self.attachEvent) self.attachEvent('onload',self.initialize);
+ else self.addEventListener('load',self.initialize,false);
+ }
+
+ self.getLanguage = function() {
+ for (language in CodePress.languages)
+ if(self.options.match('\\b'+language+'\\b'))
+ return CodePress.languages[language] ? language : 'generic';
+ }
+
+ self.setOptions = function() {
+ if(self.options.match('autocomplete-off')) self.toggleAutoComplete();
+ if(self.options.match('readonly-on')) self.toggleReadOnly();
+ if(self.options.match('linenumbers-off')) self.toggleLineNumbers();
+ }
+
+ self.getCode = function() {
+ return self.textarea.disabled ? self.editor.getCode() : self.textarea.value;
+ }
+
+ self.setCode = function(code) {
+ self.textarea.disabled ? self.editor.setCode(code) : self.textarea.value = code;
+ }
+
+ self.toggleAutoComplete = function() {
+ self.editor.autocomplete = (self.editor.autocomplete) ? false : true;
+ }
+
+ self.toggleReadOnly = function() {
+ self.textarea.readOnly = (self.textarea.readOnly) ? false : true;
+ if(self.style.display != 'none') // prevent exception on FF + iframe with display:none
+ self.editor.readOnly(self.textarea.readOnly ? true : false);
+ }
+
+ self.toggleLineNumbers = function() {
+ var cn = self.editor.body.className;
+ self.editor.body.className = (cn==''||cn=='show-line-numbers') ? 'hide-line-numbers' : 'show-line-numbers';
+ }
+
+ self.toggleEditor = function() {
+ if(self.textarea.disabled) {
+ self.textarea.value = self.getCode();
+ self.textarea.disabled = false;
+ self.style.display = 'none';
+ self.textarea.style.display = 'inline';
+ }
+ else {
+ self.textarea.disabled = true;
+ self.setCode(self.textarea.value);
+ self.editor.syntaxHighlight('init');
+ self.style.display = 'inline';
+ self.textarea.style.display = 'none';
+ }
+ }
+
+ self.edit();
+ return self;
+}
+
+CodePress.languages = {
+ csharp : 'C#',
+ css : 'CSS',
+ generic : 'Generic',
+ html : 'HTML',
+ java : 'Java',
+ javascript : 'JavaScript',
+ perl : 'Perl',
+ ruby : 'Ruby',
+ php : 'PHP',
+ text : 'Text',
+ sql : 'SQL',
+ vbscript : 'VBScript'
+}
+
+
+CodePress.run = function() {
+ s = document.getElementsByTagName('script');
+ for(var i=0,n=s.length;i<n;i++) {
+ if(s[i].src.match('codepress.js')) {
+ CodePress.path = s[i].src.replace('codepress.js','');
+ }
+ }
+ t = document.getElementsByTagName('textarea');
+ for(var i=0,n=t.length;i<n;i++) {
+ if(t[i].className.match('codepress')) {
+ id = t[i].id;
+ t[i].id = id+'_cp';
+ eval(id+' = new CodePress(t[i])');
+ t[i].parentNode.insertBefore(eval(id), t[i]);
+ }
+ }
+}
+
+if(window.attachEvent) window.attachEvent('onload',CodePress.run);
+else window.addEventListener('DOMContentLoaded',CodePress.run,false);
View
293 thirdparty/tinymce-advcode/js/codepress/engines/gecko.js
@@ -0,0 +1,293 @@
+/*
+ * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
+ *
+ * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com>
+ *
+ * Developers:
+ * Fernando M.A.d.S. <fermads@gmail.com>
+ * Michael Hurni <michael.hurni@gmail.com>
+ * Contributors:
+ * Martin D. Kirk
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License as published by the Free Software Foundation.
+ *
+ * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
+ */
+
+CodePress = {
+ scrolling : false,
+ autocomplete : true,
+
+ // set initial vars and start sh
+ initialize : function() {
+ if(typeof(editor)=='undefined' && !arguments[0]) return;
+ body = document.getElementsByTagName('body')[0];
+ body.innerHTML = body.innerHTML.replace(/\n/g,"");
+ chars = '|32|46|62|8|'; // charcodes that trigger syntax highlighting
+ cc = '\u2009'; // carret char
+ editor = document.getElementsByTagName('pre')[0];
+ document.designMode = 'on';
+ document.addEventListener('keypress', this.keyHandler, true);
+ window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false);
+ completeChars = this.getCompleteChars();
+ completeEndingChars = this.getCompleteEndingChars();
+ },
+
+ // treat key bindings
+ keyHandler : function(evt) {
+ keyCode = evt.keyCode;
+ charCode = evt.charCode;
+ fromChar = String.fromCharCode(charCode);
+
+ if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo)
+ CodePress.shortcuts(charCode?charCode:keyCode);
+ }
+ else if( (completeEndingChars.indexOf('|'+fromChar+'|')!= -1 || completeChars.indexOf('|'+fromChar+'|')!=-1) && CodePress.autocomplete) { // auto complete
+ if(!CodePress.completeEnding(fromChar))
+ CodePress.complete(fromChar);
+ }
+ else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting
+ top.setTimeout(function(){CodePress.syntaxHighlight('generic');},100);
+ }
+ else if(keyCode==9 || evt.tabKey) { // snippets activation (tab)
+ CodePress.snippets(evt);
+ }
+ else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed
+ CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML;
+ }
+ else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo
+ (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo();
+ evt.preventDefault();
+ }
+ else if(charCode==118 && evt.ctrlKey) { // handle paste
+ top.setTimeout(function(){CodePress.syntaxHighlight('generic');},100);
+ }
+ else if(charCode==99 && evt.ctrlKey) { // handle cut
+ //alert(window.getSelection().getRangeAt(0).toString().replace(/\t/g,'FFF'));
+ }
+
+ },
+
+ // put cursor back to its original position after every parsing
+ findString : function() {
+ if(self.find(cc))
+ window.getSelection().getRangeAt(0).deleteContents();
+ },
+
+ // split big files, highlighting parts of it
+ split : function(code,flag) {
+ if(flag=='scroll') {
+ this.scrolling = true;
+ return code;
+ }
+ else {
+ this.scrolling = false;
+ mid = code.indexOf(cc);
+ if(mid-2000<0) {ini=0;end=4000;}
+ else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;}
+ else {ini=mid-2000;end=mid+2000;}
+ code = code.substring(ini,end);
+ return code;
+ }
+ },
+
+ getEditor : function() {
+ if(!document.getElementsByTagName('pre')[0]) {
+ body = document.getElementsByTagName('body')[0];
+ if(!body.innerHTML) return body;
+ if(body.innerHTML=="<br>") body.innerHTML = "<pre> </pre>";
+ else body.innerHTML = "<pre>"+body.innerHTML+"</pre>";
+ }
+ return document.getElementsByTagName('pre')[0];
+ },
+
+ // syntax highlighting parser
+ syntaxHighlight : function(flag) {
+ //if(document.designMode=='off') document.designMode='on'
+ if(flag != 'init') { window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));}
+ editor = CodePress.getEditor();
+ o = editor.innerHTML;
+ o = o.replace(/<br>/g,'\n');
+ o = o.replace(/<.*?>/g,'');
+ x = z = this.split(o,flag);
+ x = x.replace(/\n/g,'<br>');
+
+ if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]);
+
+ for(i=0;i<Language.syntax.length;i++)
+ x = x.replace(Language.syntax[i].input,Language.syntax[i].output);
+
+ editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.split(z).join(x);
+ if(flag!='init') this.findString();
+ },
+
+ getLastWord : function() {
+ var rangeAndCaret = CodePress.getRangeAndCaret();
+ words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]);
+ words = words.replace(/[\s\n\r\);\W]/g,'\n').split('\n');
+ return words[words.length-1].replace(/[\W]/gi,'').toLowerCase();
+ },
+
+ snippets : function(evt) {
+ var snippets = Language.snippets;
+ var trigger = this.getLastWord();
+ for (var i=0; i<snippets.length; i++) {
+ if(snippets[i].input == trigger) {
+ var content = snippets[i].output.replace(/</g,'&lt;');
+ content = content.replace(/>/g,'&gt;');
+ if(content.indexOf('$0')<0) content += cc;
+ else content = content.replace(/\$0/,cc);
+ content = content.replace(/\n/g,'<br>');
+ var pattern = new RegExp(trigger+cc,'gi');
+ evt.preventDefault(); // prevent the tab key from being added
+ this.syntaxHighlight('snippets',pattern,content);
+ }
+ }
+ },
+
+ readOnly : function() {
+ document.designMode = (arguments[0]) ? 'off' : 'on';
+ },
+
+ complete : function(trigger) {
+ window.getSelection().getRangeAt(0).deleteContents();
+ var complete = Language.complete;
+ for (var i=0; i<complete.length; i++) {
+ if(complete[i].input == trigger) {
+ var pattern = new RegExp('\\'+trigger+cc);
+ var content = complete[i].output.replace(/\$0/g,cc);
+ parent.setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen
+ }
+ }
+ },
+
+ getCompleteChars : function() {
+ var cChars = '';
+ for(var i=0;i<Language.complete.length;i++)
+ cChars += '|'+Language.complete[i].input;
+ return cChars+'|';
+ },
+
+ getCompleteEndingChars : function() {
+ var cChars = '';
+ for(var i=0;i<Language.complete.length;i++)
+ cChars += '|'+Language.complete[i].output.charAt(Language.complete[i].output.length-1);
+ return cChars+'|';
+ },
+
+ completeEnding : function(trigger) {
+ var range = window.getSelection().getRangeAt(0);
+ try {
+ range.setEnd(range.endContainer, range.endOffset+1)
+ }
+ catch(e) {
+ return false;
+ }
+ var next_character = range.toString()
+ range.setEnd(range.endContainer, range.endOffset-1)
+ if(next_character != trigger) return false;
+ else {
+ range.setEnd(range.endContainer, range.endOffset+1)
+ range.deleteContents();
+ return true;
+ }
+ },
+
+ shortcuts : function() {
+ var cCode = arguments[0];
+ if(cCode==13) cCode = '[enter]';
+ else if(cCode==32) cCode = '[space]';
+ else cCode = '['+String.fromCharCode(charCode).toLowerCase()+']';
+ for(var i=0;i<Language.shortcuts.length;i++)
+ if(Language.shortcuts[i].input == cCode)
+ this.insertCode(Language.shortcuts[i].output,false);
+ },
+
+ getRangeAndCaret : function() {
+ var range = window.getSelection().getRangeAt(0);
+ var range2 = range.cloneRange();
+ var node = range.endContainer;
+ var caret = range.endOffset;
+ range2.selectNode(node);
+ return [range2.toString(),caret];
+ },
+
+ insertCode : function(code,replaceCursorBefore) {
+ var range = window.getSelection().getRangeAt(0);
+ var node = window.document.createTextNode(code);
+ var selct = window.getSelection();
+ var range2 = range.cloneRange();
+ // Insert text at cursor position
+ selct.removeAllRanges();
+ range.deleteContents();
+ range.insertNode(node);
+ // Move the cursor to the end of text
+ range2.selectNode(node);
+ range2.collapse(replaceCursorBefore);
+ selct.removeAllRanges();
+ selct.addRange(range2);
+ },
+
+ // get code from editor
+ getCode : function() {
+ if(!document.getElementsByTagName('pre')[0] || editor.innerHTML == '')
+ editor = CodePress.getEditor();
+ var code = editor.innerHTML;
+ code = code.replace(/<br>/g,'\n');
+ code = code.replace(/\u2009/g,'');
+ code = code.replace(/<.*?>/g,'');
+ code = code.replace(/&lt;/g,'<');
+ code = code.replace(/&gt;/g,'>');
+ code = code.replace(/&amp;/gi,'&');
+ return code;
+ },
+
+ // put code inside editor
+ setCode : function() {
+ var code = arguments[0];
+ code = code.replace(/\u2009/gi,'');
+ code = code.replace(/&/gi,'&amp;');
+ code = code.replace(/</g,'&lt;');
+ code = code.replace(/>/g,'&gt;');
+ editor.innerHTML = code;
+ if (code == '')
+ document.getElementsByTagName('body')[0].innerHTML = '';
+ },
+
+ // undo and redo methods
+ actions : {
+ pos : -1, // actual history position
+ history : [], // history vector
+
+ undo : function() {
+ editor = CodePress.getEditor();
+ if(editor.innerHTML.indexOf(cc)==-1){
+ if(editor.innerHTML != " ")
+ window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));
+ this.history[this.pos] = editor.innerHTML;
+ }
+ this.pos --;
+ if(typeof(this.history[this.pos])=='undefined') this.pos ++;
+ editor.innerHTML = this.history[this.pos];
+ if(editor.innerHTML.indexOf(cc)>-1) editor.innerHTML+=cc;
+ CodePress.findString();
+ },
+
+ redo : function() {
+ // editor = CodePress.getEditor();
+ this.pos++;
+ if(typeof(this.history[this.pos])=='undefined') this.pos--;
+ editor.innerHTML = this.history[this.pos];
+ CodePress.findString();
+ },
+
+ next : function() { // get next vector position and clean old ones
+ if(this.pos>20) this.history[this.pos-21] = undefined;
+ return ++this.pos;
+ }
+ }
+}
+
+Language={};
+window.addEventListener('load', function() { CodePress.initialize('new'); }, true);
View
0 thirdparty/tinymce-advcode/js/codepress/engines/khtml.js
No changes.
View
304 thirdparty/tinymce-advcode/js/codepress/engines/msie.js
@@ -0,0 +1,304 @@
+/*
+ * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
+ *
+ * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com>
+ *
+ * Developers:
+ * Fernando M.A.d.S. <fermads@gmail.com>
+ * Michael Hurni <michael.hurni@gmail.com>
+ * Contributors:
+ * Martin D. Kirk
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License as published by the Free Software Foundation.
+ *
+ * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
+ */
+
+CodePress = {
+ scrolling : false,
+ autocomplete : true,
+
+ // set initial vars and start sh
+ initialize : function() {
+ if(typeof(editor)=='undefined' && !arguments[0]) return;
+ chars = '|32|46|62|'; // charcodes that trigger syntax highlighting
+ cc = '\u2009'; // carret char
+ editor = document.getElementsByTagName('pre')[0];
+ editor.contentEditable = 'true';
+ document.getElementsByTagName('body')[0].onfocus = function() {editor.focus();}
+ document.attachEvent('onkeydown', this.metaHandler);
+ document.attachEvent('onkeypress', this.keyHandler);
+ window.attachEvent('onscroll', function() { if(!CodePress.scrolling) setTimeout(function(){CodePress.syntaxHighlight('scroll')},1)});
+ completeChars = this.getCompleteChars();
+ completeEndingChars = this.getCompleteEndingChars();
+ setTimeout(function() { window.scroll(0,0) },50); // scroll IE to top
+ },
+
+ // treat key bindings
+ keyHandler : function(evt) {
+ charCode = evt.keyCode;
+ fromChar = String.fromCharCode(charCode);
+
+ if( (completeEndingChars.indexOf('|'+fromChar+'|')!= -1 || completeChars.indexOf('|'+fromChar+'|')!=-1 )&& CodePress.autocomplete) { // auto complete
+ if(!CodePress.completeEnding(fromChar))
+ CodePress.complete(fromChar);
+ }
+ else if(chars.indexOf('|'+charCode+'|')!=-1||charCode==13) { // syntax highlighting
+ CodePress.syntaxHighlight('generic');
+ }
+ },
+
+ metaHandler : function(evt) {
+ keyCode = evt.keyCode;
+
+ if(keyCode==9 || evt.tabKey) {
+ CodePress.snippets();
+ }
+ else if((keyCode==122||keyCode==121||keyCode==90) && evt.ctrlKey) { // undo and redo
+ (keyCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo();
+ evt.returnValue = false;
+ }
+ else if(keyCode==34||keyCode==33) { // handle page up/down for IE
+ self.scrollBy(0, (keyCode==34) ? 200 : -200);
+ evt.returnValue = false;
+ }
+ else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed
+ CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML;
+ }
+ else if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && keyCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo)
+ CodePress.shortcuts(keyCode);
+ evt.returnValue = false;
+ }
+ else if(keyCode==86 && evt.ctrlKey) { // handle paste
+ window.clipboardData.setData('Text',window.clipboardData.getData('Text').replace(/\t/g,'\u2008'));
+ top.setTimeout(function(){CodePress.syntaxHighlight('paste');},10);
+ }
+ else if(keyCode==67 && evt.ctrlKey) { // handle cut
+ // window.clipboardData.setData('Text',x[0]);
+ // code = window.clipboardData.getData('Text');
+ }
+ },
+
+ // put cursor back to its original position after every parsing
+
+
+ findString : function() {
+ range = self.document.body.createTextRange();
+ if(range.findText(cc)){
+ range.select();
+ range.text = '';
+ }
+ },
+
+ // split big files, highlighting parts of it
+ split : function(code,flag) {
+ if(flag=='scroll') {
+ this.scrolling = true;
+ return code;
+ }
+ else {
+ this.scrolling = false;
+ mid = code.indexOf(cc);
+ if(mid-2000<0) {ini=0;end=4000;}
+ else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;}
+ else {ini=mid-2000;end=mid+2000;}
+ code = code.substring(ini,end);
+ return code.substring(code.indexOf('<P>'),code.lastIndexOf('</P>')+4);
+ }
+ },
+
+ // syntax highlighting parser
+ syntaxHighlight : function(flag) {
+ if(flag!='init') document.selection.createRange().text = cc;
+ o = editor.innerHTML;
+ if(flag=='paste') { // fix pasted text
+ o = o.replace(/<BR>/g,'\r\n');
+ o = o.replace(/\u2008/g,'\t');
+ }
+ o = o.replace(/<P>/g,'\n');
+ o = o.replace(/<\/P>/g,'\r');
+ o = o.replace(/<.*?>/g,'');
+ o = o.replace(/&nbsp;/g,'');
+ o = '<PRE><P>'+o+'</P></PRE>';
+ o = o.replace(/\n\r/g,'<P></P>');
+ o = o.replace(/\n/g,'<P>');
+ o = o.replace(/\r/g,'<\/P>');
+ o = o.replace(/<P>(<P>)+/,'<P>');
+ o = o.replace(/<\/P>(<\/P>)+/,'</P>');
+ o = o.replace(/<P><\/P>/g,'<P><BR/></P>');
+ x = z = this.split(o,flag);
+
+ if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]);
+
+ for(i=0;i<Language.syntax.length;i++)
+ x = x.replace(Language.syntax[i].input,Language.syntax[i].output);
+
+ editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.replace(z,x);
+ if(flag!='init') this.findString();
+ },
+
+ snippets : function(evt) {
+ var snippets = Language.snippets;
+ var trigger = this.getLastWord();
+ for (var i=0; i<snippets.length; i++) {
+ if(snippets[i].input == trigger) {
+ var content = snippets[i].output.replace(/</g,'&lt;');
+ content = content.replace(/>/g,'&gt;');
+ if(content.indexOf('$0')<0) content += cc;
+ else content = content.replace(/\$0/,cc);
+ content = content.replace(/\n/g,'</P><P>');
+ var pattern = new RegExp(trigger+cc,"gi");
+ this.syntaxHighlight('snippets',pattern,content);
+ }
+ }
+ },
+
+ readOnly : function() {
+ editor.contentEditable = (arguments[0]) ? 'false' : 'true';
+ },
+
+ complete : function(trigger) {
+ var complete = Language.complete;
+ for (var i=0; i<complete.length; i++) {
+ if(complete[i].input == trigger) {
+ var pattern = new RegExp('\\'+trigger+cc);
+ var content = complete[i].output.replace(/\$0/g,cc);
+ setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen
+ }
+ }
+ },
+
+ getCompleteChars : function() {
+ var cChars = '';
+ for(var i=0;i<Language.complete.length;i++)
+ cChars += '|'+Language.complete[i].input;
+ return cChars+'|';
+ },
+
+ getCompleteEndingChars : function() {
+ var cChars = '';
+ for(var i=0;i<Language.complete.length;i++)
+ cChars += '|'+Language.complete[i].output.charAt(Language.complete[i].output.length-1);
+ return cChars+'|';
+ },
+
+ completeEnding : function(trigger) {
+ var range = document.selection.createRange();
+ try {
+ range.moveEnd('character', 1)
+ }
+ catch(e) {
+ return false;
+ }
+ var next_character = range.text
+ range.moveEnd('character', -1)
+ if(next_character != trigger ) return false;
+ else {
+ range.moveEnd('character', 1)
+ range.text=''
+ return true;
+ }
+ },
+
+ shortcuts : function() {
+ var cCode = arguments[0];
+ if(cCode==13) cCode = '[enter]';
+ else if(cCode==32) cCode = '[space]';
+ else cCode = '['+String.fromCharCode(keyCode).toLowerCase()+']';
+ for(var i=0;i<Language.shortcuts.length;i++)
+ if(Language.shortcuts[i].input == cCode)
+ this.insertCode(Language.shortcuts[i].output,false);
+ },
+
+ getLastWord : function() {
+ var rangeAndCaret = CodePress.getRangeAndCaret();
+ words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]);
+ words = words.replace(/[\s\n\r\);\W]/g,'\n').split('\n');
+ return words[words.length-1].replace(/[\W]/gi,'').toLowerCase();
+ },
+
+ getRangeAndCaret : function() {
+ var range = document.selection.createRange();
+ var caret = Math.abs(range.moveStart('character', -1000000)+1);
+ range = this.getCode();
+ range = range.replace(/\n\r/gi,' ');
+ range = range.replace(/\n/gi,'');
+ return [range.toString(),caret];
+ },
+
+ insertCode : function(code,replaceCursorBefore) {
+ var repdeb = '';
+ var repfin = '';
+
+ if(replaceCursorBefore) { repfin = code; }
+ else { repdeb = code; }
+
+ if(typeof document.selection != 'undefined') {
+ var range = document.selection.createRange();
+ range.text = repdeb + repfin;
+ range = document.selection.createRange();
+ range.move('character', -repfin.length);
+ range.select();
+ }
+ },
+
+ // get code from editor
+ getCode : function() {
+ var code = editor.innerHTML;
+ code = code.replace(/<br>/g,'\n');
+ code = code.replace(/<\/p>/gi,'\r');
+ code = code.replace(/<p>/i,''); // IE first line fix
+ code = code.replace(/<p>/gi,'\n');
+ code = code.replace(/&nbsp;/gi,'');
+ code = code.replace(/\u2009/g,'');
+ code = code.replace(/<.*?>/g,'');
+ code = code.replace(/&lt;/g,'<');
+ code = code.replace(/&gt;/g,'>');
+ code = code.replace(/&amp;/gi,'&');
+ return code;
+ },
+
+ // put code inside editor
+ setCode : function() {
+ var code = arguments[0];
+ code = code.replace(/\u2009/gi,'');
+ code = code.replace(/&/gi,'&amp;');
+ code = code.replace(/</g,'&lt;');
+ code = code.replace(/>/g,'&gt;');
+ editor.innerHTML = '<pre>'+code+'</pre>';
+ },
+
+
+ // undo and redo methods
+ actions : {
+ pos : -1, // actual history position
+ history : [], // history vector
+
+ undo : function() {
+ if(editor.innerHTML.indexOf(cc)==-1){
+ document.selection.createRange().text = cc;
+ this.history[this.pos] = editor.innerHTML;
+ }
+ this.pos--;
+ if(typeof(this.history[this.pos])=='undefined') this.pos++;
+ editor.innerHTML = this.history[this.pos];
+ CodePress.findString();
+ },
+
+ redo : function() {
+ this.pos++;
+ if(typeof(this.history[this.pos])=='undefined') this.pos--;
+ editor.innerHTML = this.history[this.pos];
+ CodePress.findString();
+ },
+
+ next : function() { // get next vector position and clean old ones
+ if(this.pos>20) this.history[this.pos-21] = undefined;
+ return ++this.pos;
+ }
+ }
+}
+
+Language={};
+window.attachEvent('onload', function() { CodePress.initialize('new');});
View
0 thirdparty/tinymce-advcode/js/codepress/engines/older.js
No changes.
View
260 thirdparty/tinymce-advcode/js/codepress/engines/opera.js
@@ -0,0 +1,260 @@
+/*
+ * CodePress - Real Time Syntax Highlighting Editor written in JavaScript - http://codepress.org/
+ *
+ * Copyright (C) 2007 Fernando M.A.d.S. <fermads@gmail.com>
+ *
+ * Contributors :
+ *
+ * Michael Hurni <michael.hurni@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify it under the terms of the
+ * GNU Lesser General Public License as published by the Free Software Foundation.
+ *
+ * Read the full licence: http://www.opensource.org/licenses/lgpl-license.php
+ */
+
+
+CodePress = {
+ scrolling : false,
+ autocomplete : true,
+
+ // set initial vars and start sh
+ initialize : function() {
+ if(typeof(editor)=='undefined' && !arguments[0]) return;
+ chars = '|32|46|62|'; // charcodes that trigger syntax highlighting
+ cc = '\u2009'; // control char
+ editor = document.getElementsByTagName('body')[0];
+ document.designMode = 'on';
+ document.addEventListener('keyup', this.keyHandler, true);
+ window.addEventListener('scroll', function() { if(!CodePress.scrolling) CodePress.syntaxHighlight('scroll') }, false);
+ completeChars = this.getCompleteChars();
+// CodePress.syntaxHighlight('init');
+ },
+
+ // treat key bindings
+ keyHandler : function(evt) {
+ keyCode = evt.keyCode;
+ charCode = evt.charCode;
+
+ if((evt.ctrlKey || evt.metaKey) && evt.shiftKey && charCode!=90) { // shortcuts = ctrl||appleKey+shift+key!=z(undo)
+ CodePress.shortcuts(charCode?charCode:keyCode);
+ }
+ else if(completeChars.indexOf('|'+String.fromCharCode(charCode)+'|')!=-1 && CodePress.autocomplete) { // auto complete
+ CodePress.complete(String.fromCharCode(charCode));
+ }
+ else if(chars.indexOf('|'+charCode+'|')!=-1||keyCode==13) { // syntax highlighting
+ CodePress.syntaxHighlight('generic');
+ }
+ else if(keyCode==9 || evt.tabKey) { // snippets activation (tab)
+ CodePress.snippets(evt);
+ }
+ else if(keyCode==46||keyCode==8) { // save to history when delete or backspace pressed
+ CodePress.actions.history[CodePress.actions.next()] = editor.innerHTML;
+ }
+ else if((charCode==122||charCode==121||charCode==90) && evt.ctrlKey) { // undo and redo
+ (charCode==121||evt.shiftKey) ? CodePress.actions.redo() : CodePress.actions.undo();
+ evt.preventDefault();
+ }
+ else if(keyCode==86 && evt.ctrlKey) { // paste
+ // TODO: pasted text should be parsed and highlighted
+ }
+ },
+
+ // put cursor back to its original position after every parsing
+ findString : function() {
+ var sel = window.getSelection();
+ var range = window.document.createRange();
+ var span = window.document.getElementsByTagName('span')[0];
+
+ range.selectNode(span);
+ sel.removeAllRanges();
+ sel.addRange(range);
+ span.parentNode.removeChild(span);
+ //if(self.find(cc))
+ //window.getSelection().getRangeAt(0).deleteContents();
+ },
+
+ // split big files, highlighting parts of it
+ split : function(code,flag) {
+ if(flag=='scroll') {
+ this.scrolling = true;
+ return code;
+ }
+ else {
+ this.scrolling = false;
+ mid = code.indexOf('<SPAN>');
+ if(mid-2000<0) {ini=0;end=4000;}
+ else if(mid+2000>code.length) {ini=code.length-4000;end=code.length;}
+ else {ini=mid-2000;end=mid+2000;}
+ code = code.substring(ini,end);
+ return code;
+ }
+ },
+
+ // syntax highlighting parser
+ syntaxHighlight : function(flag) {
+ //if(document.designMode=='off') document.designMode='on'
+ if(flag!='init') {
+ var span = document.createElement('span');
+ window.getSelection().getRangeAt(0).insertNode(span);
+ }
+
+ o = editor.innerHTML;
+// o = o.replace(/<br>/g,'\r\n');
+// o = o.replace(/<(b|i|s|u|a|em|tt|ins|big|cite|strong)?>/g,'');
+ //alert(o)
+ o = o.replace(/<(?!span|\/span|br).*?>/gi,'');
+// alert(o)
+// x = o;
+ x = z = this.split(o,flag);
+ //alert(z)
+// x = x.replace(/\r\n/g,'<br>');
+ x = x.replace(/\t/g, ' ');
+
+
+ if(arguments[1]&&arguments[2]) x = x.replace(arguments[1],arguments[2]);
+
+ for(i=0;i<Language.syntax.length;i++)
+ x = x.replace(Language.syntax[i].input,Language.syntax[i].output);
+
+ editor.innerHTML = this.actions.history[this.actions.next()] = (flag=='scroll') ? x : o.split(z).join(x);
+
+ if(flag!='init') this.findString();
+ },
+
+ getLastWord : function() {
+ var rangeAndCaret = CodePress.getRangeAndCaret();
+ words = rangeAndCaret[0].substring(rangeAndCaret[1]-40,rangeAndCaret[1]);
+ words = words.replace(/[\s\n\r\);\W]/g,'\n').split('\n');
+ return words[words.length-1].replace(/[\W]/gi,'').toLowerCase();
+ },
+
+ snippets : function(evt) {
+ var snippets = Language.snippets;
+ var trigger = this.getLastWord();
+ for (var i=0; i<snippets.length; i++) {
+ if(snippets[i].input == trigger) {
+ var content = snippets[i].output.replace(/</g,'&lt;');
+ content = content.replace(/>/g,'&gt;');
+ if(content.indexOf('$0')<0) content += cc;
+ else content = content.replace(/\$0/,cc);
+ content = content.replace(/\n/g,'<br>');
+ var pattern = new RegExp(trigger+cc,'gi');
+ evt.preventDefault(); // prevent the tab key from being added
+ this.syntaxHighlight('snippets',pattern,content);
+ }
+ }
+ },
+
+ readOnly : function() {
+ document.designMode = (arguments[0]) ? 'off' : 'on';
+ },
+
+ complete : function(trigger) {
+ window.getSelection().getRangeAt(0).deleteContents();
+ var complete = Language.complete;
+ for (var i=0; i<complete.length; i++) {
+ if(complete[i].input == trigger) {
+ var pattern = new RegExp('\\'+trigger+cc);
+ var content = complete[i].output.replace(/\$0/g,cc);
+ parent.setTimeout(function () { CodePress.syntaxHighlight('complete',pattern,content)},0); // wait for char to appear on screen
+ }
+ }
+ },
+
+ getCompleteChars : function() {
+ var cChars = '';
+ for(var i=0;i<Language.complete.length;i++)
+ cChars += '|'+Language.complete[i].input;
+ return cChars+'|';
+ },
+
+ shortcuts : function() {
+ var cCode = arguments[0];
+ if(cCode==13) cCode = '[enter]';
+ else if(cCode==32) cCode = '[space]';
+ else cCode = '['+String.fromCharCode(charCode).toLowerCase()+']';
+ for(var i=0;i<Language.shortcuts.length;i++)
+ if(Language.shortcuts[i].input == cCode)
+ this.insertCode(Language.shortcuts[i].output,false);
+ },
+
+ getRangeAndCaret : function() {
+ var range = window.getSelection().getRangeAt(0);
+ var range2 = range.cloneRange();
+ var node = range.endContainer;
+ var caret = range.endOffset;
+ range2.selectNode(node);
+ return [range2.toString(),caret];
+ },
+
+ insertCode : function(code,replaceCursorBefore) {
+ var range = window.getSelection().getRangeAt(0);
+ var node = window.document.createTextNode(code);
+ var selct = window.getSelection();
+ var range2 = range.cloneRange();
+ // Insert text at cursor position
+ selct.removeAllRanges();
+ range.deleteContents();
+ range.insertNode(node);
+ // Move the cursor to the end of text
+ range2.selectNode(node);
+ range2.collapse(replaceCursorBefore);
+ selct.removeAllRanges();
+ selct.addRange(range2);
+ },
+
+ // get code from editor
+ getCode : function() {
+ var code = editor.innerHTML;
+ code = code.replace(/<br>/g,'\n');
+ code = code.replace(/\u2009/g,'');
+ code = code.replace(/<.*?>/g,'');
+ code = code.replace(/&lt;/g,'<');
+ code = code.replace(/&gt;/g,'>');
+ code = code.replace(/&amp;/gi,'&');
+ return code;
+ },
+
+ // put code inside editor
+ setCode : function() {
+ var code = arguments[0];
+ code = code.replace(/\u2009/gi,'');
+ code = code.replace(/&/gi,'&amp;');
+ code = code.replace(/</g,'&lt;');
+ code = code.replace(/>/g,'&gt;');
+ editor.innerHTML = code;
+ },
+
+ // undo and redo methods
+ actions : {
+ pos : -1, // actual history position
+ history : [], // history vector
+
+ undo : function() {
+ if(editor.innerHTML.indexOf(cc)==-1){
+ window.getSelection().getRangeAt(0).insertNode(document.createTextNode(cc));
+ this.history[this.pos] = editor.innerHTML;
+ }
+ this.pos--;
+ if(typeof(this.history[this.pos])=='undefined') this.pos++;
+ editor.innerHTML = this.history[this.pos];
+ CodePress.findString();
+ },
+
+ redo : function() {
+ this.pos++;
+ if(typeof(this.history[this.pos])=='undefined') this.pos--;
+ editor.innerHTML = this.history[this.pos];
+ CodePress.findString();
+ },
+
+ next : function() { // get next vector position and clean old ones
+ if(this.pos>20) this.history[this.pos-21] = undefined;
+ return ++this.pos;
+ }
+ }
+}
+
+Language={};
+window.addEventListener('load', function() { CodePress.initialize('new'); }, true);
View
BIN thirdparty/tinymce-advcode/js/codepress/images/line-numbers.png
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View
443 thirdparty/tinymce-advcode/js/codepress/index.html
@@ -0,0 +1,443 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+
+<html>
+<head>
+ <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title>
+
+ <style>
+ body {color:#000;background-color:white;font:15px georgia, "Lucida Grande", "Lucida Sans Unicode", Arial, Helvetica, sans-serif; letter-spacing:0.01em;margin:15px;}
+ p {margin:0 0 15px 0;}
+ a,a:visited {color:#7f0055;}
+ select {background:#ffffe1;}
+ button {margin-top:5px;}
+ button.actions {width:171px;font-family:arial;}
+ h1 {color:#7f0055;margin:0;padding:0;font-size:42px;font-weight:normal;}
+ h1 a {text-decoration:none;}
+ h2 {margin:0;}
+ h2 a {text-decoration:none;font-weight:normal;font-size:22px;color:black !important;}
+ h3 {font-size:20px;font-weight:normal;padding:0;margin:25px 0 5px 0;color:#7f0055;font-weight:bold;border-bottom:2px dotted #d8d8d8;}
+ h4 {font-size:18px;font-weight:normal;z-index:0;}
+ code {color:#0080c0;font-size:13px;font-weight:bold;}
+ ol, ul {padding:5px 0 5px 25px;margin:0;}
+ ol li, ul li {margin:8px 0 8px 0;}
+
+ #logo {text-align:center;background-color:#d6d6d6;padding:10px;-moz-border-radius:5px;border:1px solid silver;}
+ #container {width:700px;margin:20px auto;padding:25px;border:3px solid #d9d9d9;-moz-border-radius:10px;background:#f8f8f8;}
+ #languages {margin:5px 0;}
+
+ #menu {width:100%;background:#7f0055;-moz-border-radius:4px;}
+ #menu a {font:bold 17px georgia;color:white;padding:4px;display:block;border-left:1px solid white;text-align:center;text-decoration:none;}
+ #menu a:hover {background:#b9669e;}
+
+ .hidden-code {display:none;}
+ .copycode {border:1px dotted gray;padding:10px;background:white;font-family:monospace;color:gray}
+ </style>
+
+</head>
+
+<body>
+<div id="container">
+
+<div id="logo">
+ <h1><a href="http://codepress.org/">CodePress</a></h1>
+ <h2><a href="http://codepress.org/">Online Real Time Syntax Highlighting Editor</a></h2>
+</div>
+
+<br />
+
+<table cellpadding="0" cellspacing="0" id="menu">
+<tr>
+ <td>
+ <a href="http://www.codepress.org/index.php">Home/Download</a>
+ </td>
+ <td>
+ <a href="http://www.codepress.org/install.php">&nbsp;&nbsp;Install&nbsp;&nbsp;</a>
+ </td>
+ <td>
+ <a href="http://www.codepress.org/to-do.php">&nbsp;&nbsp;To-do&nbsp;&nbsp;</a>
+ </td>
+ <td>
+ <a href="http://www.codepress.org/about.php" id="about">&nbsp;&nbsp;About&nbsp;&nbsp;</a>
+ </td>
+</tr>
+</table>
+
+<h4>
+ 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.
+</h4>
+
+<p>
+ Go to <strong><a href="http://codepress.org/">http://codepress.org/</a></strong> for updates.
+</p>
+
+<h3>Demo</h3>
+<div id="languages">
+ <em>choose example in:</em>
+ <button onclick="cp1.edit('cp-php','php')">PHP</button>
+ <button onclick="cp1.edit('cp-javascript','javascript')">JavaScript</button>
+ <button onclick="cp1.edit('cp-java','java')">Java</button>
+ <button onclick="cp1.edit('cp-perl','perl')">Perl</button>
+ <button onclick="cp1.edit('cp-sql','sql')">SQL</button>
+ <button onclick="cp1.edit('cp-html','html')">HTML</button>
+ <button onclick="cp1.edit('cp-css','css')">CSS</button>
+</div>
+
+<textarea id="cp1" class="codepress php" style="width:700px;height:300px;" wrap="off">
+<?php
+// Very simple implementation of server side script
+
+if(isset($_GET['file'])) {
+ $file = basename($_GET['file']);
+ $full_file = $path['server'].'/'.$path['webdocs'].'/'.$path['files']."/".$file;
+ if(file_exists($full_file)) {
+ $code = file_get_contents($full_file);
+ $code = preg_replace("/>/","&amp;gt;",$code);
+ $code = preg_replace("/</","&amp;lt;",$code);
+ $language = getLanguage($file);
+ }
+}
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+ <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title>
+ <link type="text/css" href="languages/codepress-<?=$language?>.css" rel="stylesheet" id="cp-lang-style" />
+ <script type="text/javascript" src="codepress.js"></script>
+ <script type="text/javascript">
+ CodePress.language = '<?=$language?>';
+ </script>
+</head>
+<body id="ffedt"><pre id="ieedt"><?=$code?></pre></body>
+</html>
+</textarea>
+
+<br /><br />
+
+<textarea id="codepress2" class="codepress javascript linenumbers-off" style="width:700px;height:200px;" wrap="off">
+//set language
+this.setLanguage = function() {
+ if(arguments[0]) {
+ language = (typeof(Content.languages[arguments[0]])!='undefined') ? arguments[0] : this.setLanguage();
+ cpLanguage.innerHTML = Content.languages[language].name;
+ if(cpBody.document.designMode=='on') cpBody.document.designMode = 'off';
+ CodePress.loadScript(cpBody.document, '../languages/'+language+'.js', function () { cpBody.CodePress.syntaxHighlight('init'); })
+ cpBody.document.getElementById('cp-lang-style').href = '../languages/'+language+'.css';
+ this.hideMenu();
+ }
+ else {
+ var extension = filename.replace(/.*\.([^\.]+)$/,'$1');
+ var aux = false;
+ for(lang in Content.languages) {
+ extensions = ','+Content.languages[lang].extensions+',';
+ if(extensions.match(','+extension+',')) aux = lang;
+ }
+ language = (aux) ? aux : 'generic';
+ }
+}
+</textarea>
+
+<p>
+ <button class="actions" onclick="alert(codepress2.getCode())">get code from editor</button>
+ <button class="actions" onclick="codepress2.toggleEditor()">turn on/off CodePress</button>
+ <button class="actions" onclick="codepress2.toggleLineNumbers()">show/hide line numbers</button>
+ <button class="actions" onclick="codepress2.toggleAutoComplete()">turn on/off auto-complete</button>
+ <button class="actions" onclick="codepress2.toggleReadOnly()">turn on/off read only</button>
+</p>
+
+
+
+<h3>Installation</h3>
+<ol>
+ <li>
+ <p>
+ <a href="http://codepress.org/">Download</a> and uncompress CodePress under a directory inside your webserver.<br>
+ Example:<strong> http://yourserver/codepress/</strong><br />
+ Since CodePress is pure JavaScript and HTML, you can also test it without a webserver.
+ </p>
+ </li>
+ <li>
+ <p>
+ Insert CodePress script somewhere in your page inside the <code>&lt;head&gt;</code> or above the <code>&lt;/body&gt;</code> tag.
+ </p>
+
+ <p class="copycode">
+ &lt;script src="/codepress/codepress.js" type="text/javascript"&gt;&lt;/script&gt;
+ </p>
+ </li>
+
+ <li>
+ <p>
+ 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.
+ When the page loads, it will automatically replace your textarea with a CodePress window.
+ </p>
+ <p class="copycode">
+ &lt;textarea id="myCpWindow" class="codepress javascript linenumbers-off"&gt;<br />
+ &nbsp;&nbsp;&nbsp;// your code here<br />
+ &lt;/textarea&gt;
+ </p>
+ <ul>
+ <li>
+ The <code>javascript</code> portion of the class="" means that the language being edited is JavaScript.
+ </li>
+ <li>
+ The <code>codepress</code> portion of the class="" is mandatory and indicates a textarea to be replaced for a CodePress window.
+ </li>
+ <li>
+ Other class options are <code>linenumbers-off</code>, <code>autocomplete-off</code> and <code>readonly-on</code>.
+ </li>
+ <li>
+ Careful not to use the same id for two different CodePress windows (<code>&lt;textarea id="<strong>xx</strong>"...&gt;</code>)
+ </li>
+ </ul>
+
+ </li>
+</ol>
+
+<h3>You also can...</h3>
+<ol>
+ <li>
+ Open/edit code from a different textarea.<br />
+ Example: <code>textarea_id.edit('other_textarea_id','language')</code><br>
+ </li>
+ <li>
+ Get code from CodePress window.<br />
+ Example: <code>textarea_id.getCode()</code><br>
+ </li>
+ <li>
+ Turn on/off CodePress editor and return to the regular textarea.<br />
+ Example: <code>textarea_id.toggleEditor()</code><br>
+ </li>
+ <li>
+ Turn on/off line numbers.<br />
+ Example: <code>textarea_id.toggleLineNumbers()</code><br>
+ </li>
+ <li>
+ Turn on/off read only.<br />
+ Example: <code>textarea_id.toggleReadOnly()</code><br>
+ </li>
+ <li>
+ Turn on/off auto-complete.<br />
+ Example: <code>textarea_id.toggleAutoComplete()</code><br>
+ </li>
+
+</ol>
+
+<!-- p>
+ 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.
+</p>
+<p>
+ 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).
+</p -->
+
+<h3>License</h3>
+<p>
+ 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.
+</p>
+
+
+</div><!--/container-->
+
+
+
+<!-- hidden codes for loading -->
+<textarea id="cp-php" class="hidden-code">
+<?php
+// Very simple implementation of server side script
+
+if(isset($_GET['file'])) {
+ $file = basename($_GET['file']);
+ $full_file = $path['server'].'/'.$path['webdocs'].'/'.$path['files']."/".$file;
+ if(file_exists($full_file)) {
+ $code = file_get_contents($full_file);
+ $code = preg_replace("/>/","&amp;gt;",$code);
+ $code = preg_replace("/</","&amp;lt;",$code);
+ $language = getLanguage($file);
+ }
+}
+?>
+
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html>
+<head>
+ <title>CodePress - Real Time Syntax Highlighting Editor written in JavaScript</title>
+ <link type="text/css" href="languages/codepress-<?=$language?>.css" rel="stylesheet" id="cp-lang-style" />
+ <script type="text/javascript" src="codepress.js"></script>
+ <script type="text/javascript">
+ CodePress.language = '<?=$language?>';
+ </script>
+</head>
+<body id="ffedt"><pre id="ieedt"><?=$code?></pre></body>
+</html>
+</textarea>
+
+<textarea id="cp-javascript" class="hidden-code">
+CodePress = function(obj) {
+ var self = document.createElement('iframe');
+ self.textarea = obj;
+ self.textarea.disabled = true;
+ self.style.height = self.textarea.clientHeight +'px';
+ self.style.width = self.textarea.clientWidth +'px';
+
+ self.initialize = function() {
+ self.editor = self.contentWindow.CodePress;
+ self.editor.body = self.contentWindow.document.getElementsByTagName('body')[0];
+ self.editor.setCode(self.textarea.value);
+ self.editor.syntaxHighlight('init');
+ }
+
+ self.edit = function(id,language) {
+ self.language = (language) ? language : self.textarea.className.replace(/ ?codepress ?/,'');
+ self.src = cpPath+'modules/codepress.html?engine='+self.getEngine()+'&language='+self.language;
+ if(self.attachEvent) self.attachEvent('onload',self.initialize);
+ else self.addEventListener('load',self.initialize,false);
+ }
+}
+</textarea>
+
+<textarea id="cp-autoit" class="hidden-code">
+#include
+IsNumber(15)
+@Macro
+;comment
+$var = "string"
+</textarea>
+
+<textarea id="cp-java" class="hidden-code">
+import java.io.FileFilter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Project ECCO - File manager class
+ * @author Fernando M.A.d.S.
+ */
+public class FileManager extends HttpServlet {
+
+ private static final long serialVersionUID = 1L;
+ private static String login = "feanndor"; // session var should come here
+ private static String usersPath = System.getProperty("user.dir")+File.separator+"htdocs"+File.separator+"ecco"+File.separator+"users"+File.separator;
+ private static File dir = new File(usersPath+login+File.separator);
+ static boolean existDirectories = false;
+ static int isDirectory = 0;
+
+ public FileFilter filterFiles(File dir) {
+ return (new FileFilter() {
+ public boolean accept(File pathname) {
+ return !(pathname.isDirectory());
+ }
+ });
+ }
+}
+</textarea>
+
+<textarea id="cp-perl" class="hidden-code">
+#!/usr/bin/perl
+# The first line of the script envokes Perl
+
+# Scalar variables
+$var1 = "Hello World";
+$var2 = 14.6;
+
+# Array variables
+@arr1 = ("zero","one","two","three","four");
+
+# Hash variable, or associative array
+%hash1 = ("one","Monday","two", "Tuesday","three", "Wednesday","four","Thursday");
+
+# Some simple printing
+print $var1;
+
+# Subroutine
+sub test() {
+ print "ok";
+}
+</textarea>
+
+<textarea id="cp-sql" class="hidden-code">
+--
+-- simple select example
+--
+SELECT * FROM books
+ WHERE price > 100.00 and price < 150.00
+ ORDER BY title
+
+SELECT books.title, count(*) AS Authors
+ FROM books
+ JOIN book_authors
+ ON books.book_number = book_authors.book_number
+ GROUP BY books.title
+
+-- insert, update and delete examples
+
+INSERT INTO my_table (field1, field2, field3) VALUES ('test', 'N', NULL);
+
+BEGIN WORK;
+ UPDATE inventory SET quantity = quantity - 3 WHERE item = 'pants';
+COMMIT;
+</textarea>
+
+<textarea id="cp-html" class="hidden-code">
+<html>
+<head>
+ <title>CodePress - Online Real Time Syntax Highlighting Editor</title>
+
+ <style type="text/css">
+ @import url(styles.css);
+ </style>
+ <script type="text/javascript">
+ function getCode() {
+ alert(textWithoutHighlighting);
+ }
+ </script>
+</head>
+<body>
+<div id="logo">
+ <h1><a href="http://codepress.org/">CodePress</a></h1>
+ <h2>Online Real Time Syntax Highlighting Editor</h2>
+ <img src="testimage.gif" />
+</div>
+<div id="languages">
+ <em>choose language:</em>
+ <button onclick="edit('codepress.php',this)" id="default">PHP</button>
+ <button onclick="edit('FileManager.java',this)">Java</button>
+</div>
+</body>
+</html>
+</textarea>
+
+<textarea id="cp-css" class="hidden-code">
+/* CSS comment */
+
+body {
+ color:#000;
+ background-color:white;
+ font:15px Georgia, "Lucida Grande", Arial, sans-serif;
+ letter-spacing:0.01em;
+ margin:15px;
+}
+
+p {
+ margin:0 0 15px 0;
+}
+
+a,a:visited {
+ color:#7f0055;
+}
+
+select {
+ background:#ffffe1;
+}
+
+h1 {
+ color:#7f0055;
+ margin:0;
+ padding:0;
+ font-size:42px;
+}
+</textarea>
+
+
+<script src="codepress.js" type="text/javascript"></script>
+</body>
+</html>
View
71 thirdparty/tinymce-advcode/js/codepress/languages/asp.css
@@ -0,0 +1,71 @@
+/*
+ * CodePress color styles for ASP-VB syntax highlighting
+ * By Martin D. Kirk
+ */
+/* tags */
+
+b {
+ color:#000080;
+}
+/* comments */
+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;
+}
+/* ASP comments */
+strong dfn, strong dfn a,strong dfn var, strong dfn a u, strong dfn u{
+ color:gray;
+ font-weight:normal;
+}
+ /* attributes */
+s, s b, span s u, span s cite, strong span s {
+ color:#5656fa ;
+ font-weight:normal;
+}
+ /* strings */
+strong s,strong s b, strong s u, strong s cite {
+ color:#009900;
+ font-weight:normal;
+}
+strong ins{
+ color:#000000;
+ font-weight:bold;
+}
+ /* Syntax */
+strong a, strong a u {
+ color:#0000FF;
+ font-weight:;
+}
+ /* Native Keywords */
+strong u {
+ color:#990099;
+ font-weight:bold;
+}
+/* Numbers */
+strong var{
+ color:#FF0000;
+}
+/* ASP Language */
+span{
+ color:#990000;
+ font-weight:bold;
+}
+strong i,strong a i, strong u i {
+ color:#009999;
+}
+/* style */
+em {
+ color:#800080;
+ font-style:normal;
+}
+ /* script */
+ins {
+ color:#800000;
+ font-weight:bold;
+}
+
+/* <?php and ?> */
+cite, s cite {
+ color:red;
+ font-weight:bold;
+}
View
117 thirdparty/tinymce-advcode/js/codepress/languages/asp.js
@@ -0,0 +1,117 @@
+/*
+ * CodePress regular expressions for ASP-vbscript syntax highlighting
+ */
+
+// ASP VBScript
+Language.syntax = [
+// all tags
+ { input : /(&lt;[^!%|!%@]*?&gt;)/g, output : '<b>$1</b>' },
+// style tags
+ { input : /(&lt;style.*?&gt;)(.*?)(&lt;\/style&gt;)/g, output : '<em>$1</em><em>$2</em><em>$3</em>' },
+// script tags
+ { input : /(&lt;script.*?&gt;)(.*?)(&lt;\/script&gt;)/g, output : '<ins>$1</ins><ins>$2</ins><ins>$3</ins>' },
+// strings "" and attributes
+ { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' },
+// ASP Comment
+ { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<dfn>\'$1$2</dfn>'},
+// <%.*
+ { input : /(&lt;%)/g, output : '<strong>$1' },
+// .*%>
+ { input : /(%&gt;)/g, output : '$1</strong>' },
+// <%@...%>
+ { input : /(&lt;%@)(.+?)(%&gt;)/gi, output : '$1<span>$2</span>$3' },
+//Numbers
+ { input : /\b([\d]+)\b/g, output : '<var>$1</var>' },
+// Reserved Words 1 (Blue)
+ { 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>' },
+ { 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>' },
+ { 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>' },
+// Reserved Words 2 (Purple)
+ { input : /\b(Abandon|Abs|AbsolutePage|AbsolutePosition|ActiveCommand|ActiveConnection|ActualSize|AddHeader|AddNew|AppendChunk)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(AppendToLog|Application|Array|Asc|Atn|Attributes|BeginTrans|BinaryRead|BinaryWrite|BOF|Bookmark|Boolean|Buffer|Byte)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(CacheControl|CacheSize|Cancel|CancelBatch|CancelUpdate|CBool|CByte|CCur|CDate|CDbl|Charset|Chr|CInt|Clear)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(ClientCertificate|CLng|Clone|Close|CodePage|CommandText|CommandType|CommandTimeout|CommitTrans|CompareBookmarks|ConnectionString|ConnectionTimeout)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(Contents|ContentType|Cookies|Cos|CreateObject|CreateParameter|CSng|CStr|CursorLocation|CursorType|DataMember|DataSource|Date|DateAdd|DateDiff)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(DatePart|DateSerial|DateValue|Day|DefaultDatabase|DefinedSize|Delete|Description|Double|EditMode|Eof|EOF|err|Error)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(Exp|Expires|ExpiresAbsolute|Filter|Find|Fix|Flush|Form|FormatCurrency|FormatDateTime|FormatNumber|FormatPercent)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(GetChunk|GetLastError|GetRows|GetString|Global|HelpContext|HelpFile|Hex|Hour|HTMLEncode|IgnoreCase|Index|InStr|InStrRev)\b/gi, output : '<u>$1</u>' },
+ { 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>' },
+ { input : /\b(MapPath|MarshalOptions|MaxRecords|Mid|Minute|Mode|Month|MonthName|Move|MoveFirst|MoveLast|MoveNext|MovePrevious|Name|NextRecordset)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(Now|Number|NumericScale|ObjectContext|Oct|Open|OpenSchema|OriginalValue|PageCount|PageSize|Pattern|PICS|Precision|Prepared|Property)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(Provider|QueryString|RecordCount|Redirect|RegExp|Remove|RemoveAll|Replace|Requery|Request|Response|Resync|Right|Rnd)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(RollbackTrans|RTrim|Save|ScriptTimeout|Second|Seek|Server|ServerVariables|Session|SessionID|SetAbort|SetComplete|Sgn)\b/gi, output : '<u>$1</u>' },
+ { 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>' },
+ { input : /\b(Timeout|Timer|TimeSerial|TimeValue|TotalBytes|Transfer|Trim|Type|Type|UBound|UCase|UnderlyingValue|UnLock|Update|UpdateBatch)\b/gi, output : '<u>$1</u>' },
+ { input : /\b(URLEncode|Value|Value|Version|Weekday|WeekdayName|Write|Year)\b/gi, output : '<u>$1</u>' },
+// Reserved Words 3 (Turquis)
+ { input : /\b(vbBlack|vbRed|vbGreen|vbYellow|vbBlue|vbMagenta|vbCyan|vbWhite|vbBinaryCompare|vbTextCompare)\b/gi, output : '<i>$1</i>' },
+ { input : /\b(vbSunday|vbMonday|vbTuesday|vbWednesday|vbThursday|vbFriday|vbSaturday|vbUseSystemDayOfWeek)\b/gi, output : '<i>$1</i>' },
+ { input : /\b(vbFirstJan1|vbFirstFourDays|vbFirstFullWeek|vbGeneralDate|vbLongDate|vbShortDate|vbLongTime|vbShortTime)\b/gi, output : '<i>$1</i>' },
+ { input : /\b(vbObjectError|vbCr|VbCrLf|vbFormFeed|vbLf|vbNewLine|vbNullChar|vbNullString|vbTab|vbVerticalTab|vbUseDefault|vbTrue)\b/gi, output : '<i>$1</i>' },
+ { input : /\b(vbFalse|vbEmpty|vbNull|vbInteger|vbLong|vbSingle|vbDouble|vbCurrency|vbDate|vbString|vbObject|vbError|vbBoolean|vbVariant)\b/gi, output : '<i>$1</i>' },
+ { input : /\b(vbDataObject|vbDecimal|vbByte|vbArray)\b/gi, output : '<i>$1</i>' },
+// html comments
+ { input : /(&lt;!--.*?--&gt.)/g, output : '<big>$1</big>' }
+]
+
+Language.Functions = [
+ // Output at index 0, must be the desired tagname surrounding a $1
+ // Name is the index from the regex that marks the functionname
+ {input : /(function|sub)([ ]*?)(\w+)([ ]*?\()/gi , output : '<ins>$1</ins>', name : '$3'}
+]
+
+Language.snippets = [
+//Conditional
+ { input : 'if', output : 'If $0 Then\n\t\nEnd If' },
+ { input : 'ifelse', output : 'If $0 Then\n\t\n\nElse\n\t\nEnd If' },
+ { input : 'case', output : 'Select Case $0\n\tCase ?\n\tCase Else\nEnd Select'},
+//Response
+ { input : 'rw', output : 'Response.Write( $0 )' },
+ { input : 'resc', output : 'Response.Cookies( $0 )' },
+ { input : 'resb', output : 'Response.Buffer'},
+ { input : 'resflu', output : 'Response.Flush()'},
+ { input : 'resend', output : 'Response.End'},
+//Request
+ { input : 'reqc', output : 'Request.Cookies( $0 )' },
+ { input : 'rq', output : 'Request.Querystring("$0")' },
+ { input : 'rf', output : 'Request.Form("$0")' },
+//FSO
+ { input : 'fso', output : 'Set fso = Server.CreateObject("Scripting.FileSystemObject")\n$0' },
+ { input : 'setfo', output : 'Set fo = fso.getFolder($0)' },
+ { input : 'setfi', output : 'Set fi = fso.getFile($0)' },
+ { input : 'twr', output : 'Set f = fso.CreateTextFile($0,true)\'overwrite\nf.WriteLine()\nf.Close'},
+ { input : 'tre', output : 'Set f = fso.OpenTextFile($0, 1)\nf.ReadAll\nf.Close'},
+//Server
+ { input : 'mapp', output : 'Server.Mappath($0)' },
+//Loops
+ { input : 'foreach', output : 'For Each $0 in ?\n\t\nNext' },
+ { input : 'for', output : 'For $0 to ? step ?\n\t\nNext' },
+ { input : 'do', output : 'Do While($0)\n\t\nLoop' },
+ { input : 'untilrs', output : 'do until rs.eof\n\t\nrs.movenext\nloop' },
+//ADO
+ { input : 'adorec', output : 'Set rs = Server.CreateObject("ADODB.Recordset")' },
+ { input : 'adocon', output : 'Set Conn = Server.CreateObject("ADODB.Connection")' },
+ { input : 'adostr', output : 'Set oStr = Server.CreateObject("ADODB.Stream")' },
+//Http Request
+ { input : 'xmlhttp', output : 'Set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")\nxmlHttp.open("GET", $0, false)\nxmlHttp.send()\n?=xmlHttp.responseText' },
+ { input : 'xmldoc', output : 'Set xmldoc = Server.CreateObject("Microsoft.XMLDOM")\nxmldoc.async=false\nxmldoc.load(request)'},
+//Functions
+ { input : 'func', output : 'Function $0()\n\t\n\nEnd Function'},
+ { input : 'sub', output : 'Sub $0()\n\t\nEnd Sub'}
+
+]
+
+Language.complete = [
+ //{ input : '\'', output : '\'$0\'' },
+ { input : '"', output : '"$0"' },
+ { input : '(', output : '\($0\)' },
+ { input : '[', output : '\[$0\]' },
+ { input : '{', output : '{\n\t$0\n}' }
+]
+
+Language.shortcuts = [
+ { input : '[space]', output : '&nbsp;' },
+ { input : '[enter]', output : '<br />' } ,
+ { input : '[j]', output : 'testing' },
+ { input : '[7]', output : '&amp;' }
+]
View
13 thirdparty/tinymce-advcode/js/codepress/languages/autoit.css
@@ -0,0 +1,13 @@
+/**
+ * CodePress color styles for AutoIt syntax highlighting
+ */
+
+u {font-style:normal;color:#000090;font-weight:bold;font-family:Monospace;}
+var {color:#AA0000;font-weight:bold;font-style:normal;}
+em {color:#FF33FF;}
+ins {color:#AC00A9;}
+i {color:#F000FF;}
+b {color:#FF0000;}
+a {color:#0080FF;font-weight:bold;}
+s, s u, s b {color:#9999CC;font-weight:normal;}
+cite, cite *{color:#009933;font-weight:normal;}
View
32 thirdparty/tinymce-advcode/js/codepress/languages/autoit.js
@@ -0,0 +1,32 @@
+/**
+ * CodePress regular expressions for AutoIt syntax highlighting
+ * @author: James Brooks, Michael HURNI
+ */
+
+// AutoIt
+Language.syntax = [
+ { input : /({|}|\(|\))/g, output : '<b>$1</b>' }, // Brackets
+ { input : /(\*|\+|-)/g, output : '<b>$1</b>' }, // Operator
+ { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : "<s>\"$1$2</s>" }, // strings double
+ { input : /\'(.*?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single
+ { input : /\b([\d]+)\b/g, output : '<ins>$1</ins>' }, // Numbers
+ { input : /#(.*?)(<br>|<\/P>)/g, output : '<i>#$1</i>$2' }, // Directives and Includes
+ { input : /(\$[\w\.]*)/g, output : '<var>$1</var>' }, // vars
+ { input : /(_[\w\.]*)/g, output : '<a>$1</a>' }, // underscored word
+ { input : /(\@[\w\.]*)/g, output : '<em>$1</em>' }, // Macros
+ { 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
+ { input : /\B;(.*?)(<br>|<\/P>)/g, output : '<cite>;$1</cite>$2' }, // comments
+ { input : /#CS(.*?)#CE/g, output : '<cite>#CS$1#CE</cite>' } // Block Comments
+]
+
+Language.snippets = []
+
+Language.complete = [
+{ input : '\'',output : '\'$0\'' },
+{ input : '"', output : '"$0"' },
+{ input : '(', output : '\($0\)' },
+{ input : '[', output : '\[$0\]' },
+{ input : '{', output : '{\n\t$0\n}' }
+]
+
+Language.shortcuts = []
View
9 thirdparty/tinymce-advcode/js/codepress/languages/csharp.css
@@ -0,0 +1,9 @@
+/*
+ * CodePress color styles for Java syntax highlighting
+ * By Edwin de Jonge
+ */
+
+b {color:#7F0055;font-weight:bold;font-style:normal;} /* reserved words */
+a {color:#2A0088;font-weight:bold;font-style:normal;} /* types */
+i, i b, i s {color:#3F7F5F;font-weight:bold;} /* comments */
+s, s b {color:#2A00FF;font-weight:normal;} /* strings */
View
25 thirdparty/tinymce-advcode/js/codepress/languages/csharp.js
@@ -0,0 +1,25 @@
+/*
+ * CodePress regular expressions for C# syntax highlighting
+ * By Edwin de Jonge
+ */
+
+Language.syntax = [ // C#
+ { input : /\"(.*?)(\"|<br>|<\/P>)/g, output : '<s>"$1$2</s>' }, // strings double quote
+ { input : /\'(.?)(\'|<br>|<\/P>)/g, output : '<s>\'$1$2</s>' }, // strings single quote
+ { 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
+ { input : /\b(bool|byte|char|class|double|float|int|interface|long|string|struct|void)\b/g, output : '<a>$1</a>' }, // types
+ { input : /([^:]|^)\/\/(.*?)(<br|<\/P)/g, output : '$1<i>//$2</i>$3' }, // comments //
+ { input : /\/\*(.*?)\*\//g, output : '<i>/*$1*/</i>' } // comments /* */
+];
+
+Language.snippets = [];
+
+Language.complete = [ // Auto complete only for 1 character
+ {input : '\'',output : '\'$0\'' },
+ {input : '"', output : '"$0"' },
+ {input : '(', output : '\($0\)' },
+ {input : '[', output : '\[$0\]' },
+ {input : '{', output : '{\n\t$0\n}' }
+];
+
+Language.shortcuts = [];
View
10 thirdparty/tinymce-advcode/js/codepress/languages/css.css
@@ -0,0 +1,10 @@
+/*
+ * CodePress color styles for CSS syntax highlighting
+ */
+
+b, b a, b u {color:#000080;} /* tags, ids, classes */
+i, i b, i s, i a, i u {color:gray;} /* comments */
+s, s b {color:#a0a0dd;} /* parameters */
+a {color:#0000ff;} /* keys */
+u {color:red;} /* values */
+
View
23 thirdparty/tinymce-advcode/js/codepress/languages/css.js
@@ -0,0 +1,23 @@
+/*
+ * CodePress regular expressions for CSS syntax highlighting
+ */
+
+// CSS
+Language.syntax = [
+ { input : /(.*?){(.*?)}/g,output : '<b>$1</b>{<u>$2</u>}' }, // tags, ids, classes, values
+ { input : /([\w-]*?):([^\/])/g,output : '<a>$1</a>:$2' }, // keys
+ { input : /\((.*?)\)/g,output : '(<s>$1</s>)' }, // parameters
+ { input : /\/\*(.*?)\*\//g,output :