Removal of unused and illegal files inside of codemirror library
authorSteffen Kamper <info@sk-typo3.de>
Tue, 19 Oct 2010 20:53:20 +0000 (20:53 +0000)
committerSteffen Kamper <info@sk-typo3.de>
Tue, 19 Oct 2010 20:53:20 +0000 (20:53 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@9169 709f56b5-9817-0410-a4d7-c38de5d9e867

120 files changed:
ChangeLog
typo3/contrib/codemirror/._LICENSE [deleted file]
typo3/contrib/codemirror/._bigtest.html [deleted file]
typo3/contrib/codemirror/._compress.html [deleted file]
typo3/contrib/codemirror/._csstest.html [deleted file]
typo3/contrib/codemirror/._faq.html [deleted file]
typo3/contrib/codemirror/._favicon.ico [deleted file]
typo3/contrib/codemirror/._highlight.html [deleted file]
typo3/contrib/codemirror/._htmltest.html [deleted file]
typo3/contrib/codemirror/._index.html [deleted file]
typo3/contrib/codemirror/._jstest.html [deleted file]
typo3/contrib/codemirror/._manual.html [deleted file]
typo3/contrib/codemirror/._mixedtest.html [deleted file]
typo3/contrib/codemirror/._sparqltest.html [deleted file]
typo3/contrib/codemirror/._story.html [deleted file]
typo3/contrib/codemirror/._unittests.html [deleted file]
typo3/contrib/codemirror/._unittests.js [deleted file]
typo3/contrib/codemirror/bigtest.html [deleted file]
typo3/contrib/codemirror/compress.html [deleted file]
typo3/contrib/codemirror/contrib/csharp/._index.html [deleted file]
typo3/contrib/codemirror/contrib/csharp/css/._csharpcolors.css [deleted file]
typo3/contrib/codemirror/contrib/csharp/js/._parsecsharp.js [deleted file]
typo3/contrib/codemirror/contrib/csharp/js/._tokenizecsharp.js [deleted file]
typo3/contrib/codemirror/contrib/groovy/._index.html [deleted file]
typo3/contrib/codemirror/contrib/lua/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/lua/._index.html [deleted file]
typo3/contrib/codemirror/contrib/lua/css/._luacolors.css [deleted file]
typo3/contrib/codemirror/contrib/ometa/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/ometa/._index.html [deleted file]
typo3/contrib/codemirror/contrib/ometa/css/._ometacolors.css [deleted file]
typo3/contrib/codemirror/contrib/ometa/js/._parseometa.js [deleted file]
typo3/contrib/codemirror/contrib/ometa/js/._tokenizeometa.js [deleted file]
typo3/contrib/codemirror/contrib/php/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/php/._index.html [deleted file]
typo3/contrib/codemirror/contrib/php/css/._phpcolors.css [deleted file]
typo3/contrib/codemirror/contrib/plsql/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/plsql/._index.html [deleted file]
typo3/contrib/codemirror/contrib/plsql/css/._plsqlcolors.css [deleted file]
typo3/contrib/codemirror/contrib/plsql/js/._parseplsql.js [deleted file]
typo3/contrib/codemirror/contrib/python/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/python/._index.html [deleted file]
typo3/contrib/codemirror/contrib/scheme/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/scheme/._index.html [deleted file]
typo3/contrib/codemirror/contrib/scheme/css/._schemecolors.css [deleted file]
typo3/contrib/codemirror/contrib/scheme/js/._parsescheme.js [deleted file]
typo3/contrib/codemirror/contrib/scheme/js/._tokenizescheme.js [deleted file]
typo3/contrib/codemirror/contrib/scheme/js/parsescheme.js [deleted file]
typo3/contrib/codemirror/contrib/scheme/js/tokenizescheme.js [deleted file]
typo3/contrib/codemirror/contrib/sql/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/sql/._index.html [deleted file]
typo3/contrib/codemirror/contrib/sql/css/._sqlcolors.css [deleted file]
typo3/contrib/codemirror/contrib/sql/js/._parsesql.js [deleted file]
typo3/contrib/codemirror/contrib/xquery/._LICENSE [deleted file]
typo3/contrib/codemirror/contrib/xquery/._index.html [deleted file]
typo3/contrib/codemirror/contrib/xquery/LICENSE [deleted file]
typo3/contrib/codemirror/contrib/xquery/css/._xqcolors-dark.css [deleted file]
typo3/contrib/codemirror/contrib/xquery/css/._xqcolors.css [deleted file]
typo3/contrib/codemirror/contrib/xquery/css/._xqcolors2.css [deleted file]
typo3/contrib/codemirror/contrib/xquery/css/xqcolors-dark.css [deleted file]
typo3/contrib/codemirror/contrib/xquery/css/xqcolors.css [deleted file]
typo3/contrib/codemirror/contrib/xquery/css/xqcolors2.css [deleted file]
typo3/contrib/codemirror/contrib/xquery/index.html [deleted file]
typo3/contrib/codemirror/contrib/xquery/js/._parsexquery.js [deleted file]
typo3/contrib/codemirror/contrib/xquery/js/._tokenizexquery.js [deleted file]
typo3/contrib/codemirror/contrib/xquery/js/parsexquery.js [deleted file]
typo3/contrib/codemirror/contrib/xquery/js/tokenizexquery.js [deleted file]
typo3/contrib/codemirror/css/._csscolors.css [deleted file]
typo3/contrib/codemirror/css/._docs.css [deleted file]
typo3/contrib/codemirror/css/._jscolors.css [deleted file]
typo3/contrib/codemirror/css/._people.jpg [deleted file]
typo3/contrib/codemirror/css/._sparqlcolors.css [deleted file]
typo3/contrib/codemirror/css/._xmlcolors.css [deleted file]
typo3/contrib/codemirror/csstest.html [deleted file]
typo3/contrib/codemirror/faq.html [deleted file]
typo3/contrib/codemirror/favicon.ico [deleted file]
typo3/contrib/codemirror/highlight.html [deleted file]
typo3/contrib/codemirror/htmltest.html [deleted file]
typo3/contrib/codemirror/index.html [deleted file]
typo3/contrib/codemirror/js/._codemirror.js [deleted file]
typo3/contrib/codemirror/js/._editor.js [deleted file]
typo3/contrib/codemirror/js/._highlight.js [deleted file]
typo3/contrib/codemirror/js/._mirrorframe.js [deleted file]
typo3/contrib/codemirror/js/._parsecss.js [deleted file]
typo3/contrib/codemirror/js/._parsedummy.js [deleted file]
typo3/contrib/codemirror/js/._parsehtmlmixed.js [deleted file]
typo3/contrib/codemirror/js/._parsejavascript.js [deleted file]
typo3/contrib/codemirror/js/._parsesparql.js [deleted file]
typo3/contrib/codemirror/js/._parsexml.js [deleted file]
typo3/contrib/codemirror/js/._select.js [deleted file]
typo3/contrib/codemirror/js/._stringstream.js [deleted file]
typo3/contrib/codemirror/js/._tokenize.js [deleted file]
typo3/contrib/codemirror/js/._tokenizejavascript.js [deleted file]
typo3/contrib/codemirror/js/._undo.js [deleted file]
typo3/contrib/codemirror/js/._util.js [deleted file]
typo3/contrib/codemirror/jstest.html [deleted file]
typo3/contrib/codemirror/manual.html [deleted file]
typo3/contrib/codemirror/mixedtest.html [deleted file]
typo3/contrib/codemirror/sparqltest.html [deleted file]
typo3/contrib/codemirror/story.html [deleted file]
typo3/contrib/codemirror/unittests.html [deleted file]
typo3/contrib/codemirror/webalizer/._.htaccess [deleted file]
typo3/contrib/codemirror/webalizer/._.htpasswd [deleted file]
typo3/contrib/codemirror/webalizer/._ctry_usage_201008.png [deleted file]
typo3/contrib/codemirror/webalizer/._daily_usage_201008.png [deleted file]
typo3/contrib/codemirror/webalizer/._hourly_usage_201008.png [deleted file]
typo3/contrib/codemirror/webalizer/._index.html [deleted file]
typo3/contrib/codemirror/webalizer/._usage.png [deleted file]
typo3/contrib/codemirror/webalizer/._usage_201008.html [deleted file]
typo3/contrib/codemirror/webalizer/._webalizer.current [deleted file]
typo3/contrib/codemirror/webalizer/._webalizer.hist [deleted file]
typo3/contrib/codemirror/webalizer/.htaccess [deleted file]
typo3/contrib/codemirror/webalizer/.htpasswd [deleted file]
typo3/contrib/codemirror/webalizer/ctry_usage_201008.png [deleted file]
typo3/contrib/codemirror/webalizer/daily_usage_201008.png [deleted file]
typo3/contrib/codemirror/webalizer/hourly_usage_201008.png [deleted file]
typo3/contrib/codemirror/webalizer/index.html [deleted file]
typo3/contrib/codemirror/webalizer/usage.png [deleted file]
typo3/contrib/codemirror/webalizer/usage_201008.html [deleted file]
typo3/contrib/codemirror/webalizer/webalizer.current [deleted file]
typo3/contrib/codemirror/webalizer/webalizer.hist [deleted file]

index 9ccd21f..5277924 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -8,6 +8,7 @@
 
 2010-10-19  Steffen Kamper  <steffen@typo3.org>
 
+       * Removal of unused and illegal files inside of codemirror library
        * Fixed bug #16055: BE debug mode should also enable debug mode for libraries
 
 2010-10-19  Susanne Moog  <typo3@susanne-moog.de>
diff --git a/typo3/contrib/codemirror/._LICENSE b/typo3/contrib/codemirror/._LICENSE
deleted file mode 100644 (file)
index df7938e..0000000
Binary files a/typo3/contrib/codemirror/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/._bigtest.html b/typo3/contrib/codemirror/._bigtest.html
deleted file mode 100644 (file)
index 3a645ef..0000000
Binary files a/typo3/contrib/codemirror/._bigtest.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._compress.html b/typo3/contrib/codemirror/._compress.html
deleted file mode 100644 (file)
index 347f657..0000000
Binary files a/typo3/contrib/codemirror/._compress.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._csstest.html b/typo3/contrib/codemirror/._csstest.html
deleted file mode 100644 (file)
index 231f401..0000000
Binary files a/typo3/contrib/codemirror/._csstest.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._faq.html b/typo3/contrib/codemirror/._faq.html
deleted file mode 100644 (file)
index 70af02f..0000000
Binary files a/typo3/contrib/codemirror/._faq.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._favicon.ico b/typo3/contrib/codemirror/._favicon.ico
deleted file mode 100644 (file)
index 10d6c4c..0000000
Binary files a/typo3/contrib/codemirror/._favicon.ico and /dev/null differ
diff --git a/typo3/contrib/codemirror/._highlight.html b/typo3/contrib/codemirror/._highlight.html
deleted file mode 100644 (file)
index 4b262c4..0000000
Binary files a/typo3/contrib/codemirror/._highlight.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._htmltest.html b/typo3/contrib/codemirror/._htmltest.html
deleted file mode 100644 (file)
index 3a0cd1a..0000000
Binary files a/typo3/contrib/codemirror/._htmltest.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._index.html b/typo3/contrib/codemirror/._index.html
deleted file mode 100644 (file)
index 538ff65..0000000
Binary files a/typo3/contrib/codemirror/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._jstest.html b/typo3/contrib/codemirror/._jstest.html
deleted file mode 100644 (file)
index 993823c..0000000
Binary files a/typo3/contrib/codemirror/._jstest.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._manual.html b/typo3/contrib/codemirror/._manual.html
deleted file mode 100644 (file)
index 2977f64..0000000
Binary files a/typo3/contrib/codemirror/._manual.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._mixedtest.html b/typo3/contrib/codemirror/._mixedtest.html
deleted file mode 100644 (file)
index 4d8dd5e..0000000
Binary files a/typo3/contrib/codemirror/._mixedtest.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._sparqltest.html b/typo3/contrib/codemirror/._sparqltest.html
deleted file mode 100644 (file)
index 701df70..0000000
Binary files a/typo3/contrib/codemirror/._sparqltest.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._story.html b/typo3/contrib/codemirror/._story.html
deleted file mode 100644 (file)
index 06bfb4e..0000000
Binary files a/typo3/contrib/codemirror/._story.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._unittests.html b/typo3/contrib/codemirror/._unittests.html
deleted file mode 100644 (file)
index b0ed6b2..0000000
Binary files a/typo3/contrib/codemirror/._unittests.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/._unittests.js b/typo3/contrib/codemirror/._unittests.js
deleted file mode 100644 (file)
index dae2507..0000000
Binary files a/typo3/contrib/codemirror/._unittests.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/bigtest.html b/typo3/contrib/codemirror/bigtest.html
deleted file mode 100644 (file)
index 04ebcda..0000000
+++ /dev/null
@@ -1,1296 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/codemirror.js" type="text/javascript"></script>
-    <title>CodeMirror: JavaScript demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-  </head>
-  <body style="padding: 20px;">
-
-<p>This page demonstrates <a href="index.html">CodeMirror</a>'s
-JavaScript parser. Note that the ugly buttons at the top are not are
-not part of CodeMirror proper -- they demonstrate the way it can be
-embedded in a web-application.</p>
-
-<div class="border">
-<textarea id="code" cols="120" rows="30">
-/* The Editor object manages the content of the editable frame. It
- * catches events, colours nodes, and indents lines. This file also
- * holds some functions for transforming arbitrary DOM structures into
- * plain sequences of &lt;span> and &lt;br> elements
- */
-
-// Make sure a string does not contain two consecutive 'collapseable'
-// whitespace characters.
-function makeWhiteSpace(n) {
-  var buffer = [], nb = true;
-  for (; n > 0; n--) {
-    buffer.push((nb || n == 1) ? nbsp : " ");
-    nb = !nb;
-  }
-  return buffer.join("");
-}
-
-// Create a set of white-space characters that will not be collapsed
-// by the browser, but will not break text-wrapping either.
-function fixSpaces(string) {
-  if (string.charAt(0) == " ") string = nbsp + string.slice(1);
-  return string.replace(/[\t \u00a0]{2,}/g, function(s) {return makeWhiteSpace(s.length);});
-}
-
-function cleanText(text) {
-  return text.replace(/\u00a0/g, " ").replace(/\u200b/g, "");
-}
-
-// Create a SPAN node with the expected properties for document part
-// spans.
-function makePartSpan(value, doc) {
-  var text = value;
-  if (value.nodeType == 3) text = value.nodeValue;
-  else value = doc.createTextNode(text);
-
-  var span = doc.createElement("SPAN");
-  span.isPart = true;
-  span.appendChild(value);
-  span.currentText = text;
-  return span;
-}
-
-// On webkit, when the last BR of the document does not have text
-// behind it, the cursor can not be put on the line after it. This
-// makes pressing enter at the end of the document occasionally do
-// nothing (or at least seem to do nothing). To work around it, this
-// function makes sure the document ends with a span containing a
-// zero-width space character. The traverseDOM iterator filters such
-// character out again, so that the parsers won't see them. This
-// function is called from a few strategic places to make sure the
-// zwsp is restored after the highlighting process eats it.
-var webkitLastLineHack = webkit ?
-  function(container) {
-    var last = container.lastChild;
-    if (!last || !last.isPart || last.textContent != "\u200b")
-      container.appendChild(makePartSpan("\u200b", container.ownerDocument));
-  } : function() {};
-
-var Editor = (function(){
-  // The HTML elements whose content should be suffixed by a newline
-  // when converting them to flat text.
-  var newlineElements = {"P": true, "DIV": true, "LI": true};
-
-  function asEditorLines(string) {
-    return fixSpaces(string.replace(/\t/g, "  ").replace(/\u00a0/g, " ")).replace(/\r\n?/g, "\n").split("\n");
-  }
-
-  // Helper function for traverseDOM. Flattens an arbitrary DOM node
-  // into an array of textnodes and &lt;br> tags.
-  function simplifyDOM(root) {
-    var doc = root.ownerDocument;
-    var result = [];
-    var leaving = true;
-
-    function simplifyNode(node) {
-      if (node.nodeType == 3) {
-        var text = node.nodeValue = fixSpaces(node.nodeValue.replace(/[\r\u200b]/g, "").replace(/\n/g, " "));
-        if (text.length) leaving = false;
-        result.push(node);
-      }
-      else if (node.nodeName == "BR" &amp;&amp; node.childNodes.length == 0) {
-        leaving = true;
-        result.push(node);
-      }
-      else {
-        forEach(node.childNodes, simplifyNode);
-        if (!leaving &amp;&amp; newlineElements.hasOwnProperty(node.nodeName)) {
-          leaving = true;
-          result.push(doc.createElement("BR"));
-        }
-      }
-    }
-
-    simplifyNode(root);
-    return result;
-  }
-
-  // Creates a MochiKit-style iterator that goes over a series of DOM
-  // nodes. The values it yields are strings, the textual content of
-  // the nodes. It makes sure that all nodes up to and including the
-  // one whose text is being yielded have been 'normalized' to be just
-  // &lt;span> and &lt;br> elements.
-  // See the story.html file for some short remarks about the use of
-  // continuation-passing style in this iterator.
-  function traverseDOM(start){
-    function yield(value, c){cc = c; return value;}
-    function push(fun, arg, c){return function(){return fun(arg, c);};}
-    function stop(){cc = stop; throw StopIteration;};
-    var cc = push(scanNode, start, stop);
-    var owner = start.ownerDocument;
-    var nodeQueue = [];
-
-    // Create a function that can be used to insert nodes after the
-    // one given as argument.
-    function pointAt(node){
-      var parent = node.parentNode;
-      var next = node.nextSibling;
-      return function(newnode) {
-        parent.insertBefore(newnode, next);
-      };
-    }
-    var point = null;
-
-    // Insert a normalized node at the current point. If it is a text
-    // node, wrap it in a &lt;span>, and give that span a currentText
-    // property -- this is used to cache the nodeValue, because
-    // directly accessing nodeValue is horribly slow on some browsers.
-    // The dirty property is used by the highlighter to determine
-    // which parts of the document have to be re-highlighted.
-    function insertPart(part){
-      var text = "\n";
-      if (part.nodeType == 3) {
-        select.snapshotChanged();
-        part = makePartSpan(part, owner);
-        text = part.currentText;
-      }
-      part.dirty = true;
-      nodeQueue.push(part);
-      point(part);
-      return text;
-    }
-
-    // Extract the text and newlines from a DOM node, insert them into
-    // the document, and yield the textual content. Used to replace
-    // non-normalized nodes.
-    function writeNode(node, c){
-      var toYield = [];
-      forEach(simplifyDOM(node), function(part) {
-        toYield.push(insertPart(part));
-      });
-      return yield(toYield.join(""), c);
-    }
-
-    // Check whether a node is a normalized &lt;span> element.
-    function partNode(node){
-      if (node.isPart &amp;&amp; node.childNodes.length == 1 &amp;&amp; node.firstChild.nodeType == 3) {
-        node.currentText = node.firstChild.nodeValue;
-        return !/[\n\t\r]/.test(node.currentText);
-      }
-      return false;
-    }
-
-    // Handle a node. Add its successor to the continuation if there
-    // is one, find out whether the node is normalized. If it is,
-    // yield its content, otherwise, normalize it (writeNode will take
-    // care of yielding).
-    function scanNode(node, c){
-      if (node.nextSibling)
-        c = push(scanNode, node.nextSibling, c);
-
-      if (partNode(node)){
-        nodeQueue.push(node);
-        return yield(node.currentText, c);
-      }
-      else if (node.nodeName == "BR") {
-        nodeQueue.push(node);
-        return yield("\n", c);
-      }
-      else {
-        point = pointAt(node);
-        removeElement(node);
-        return writeNode(node, c);
-      }
-    }
-
-    // MochiKit iterators are objects with a next function that
-    // returns the next value or throws StopIteration when there are
-    // no more values.
-    return {next: function(){return cc();}, nodes: nodeQueue};
-  }
-
-  // Determine the text size of a processed node.
-  function nodeSize(node) {
-    if (node.nodeName == "BR")
-      return 1;
-    else
-      return node.currentText.length;
-  }
-
-  // Search backwards through the top-level nodes until the next BR or
-  // the start of the frame.
-  function startOfLine(node) {
-    while (node &amp;&amp; node.nodeName != "BR") node = node.previousSibling;
-    return node;
-  }
-  function endOfLine(node, container) {
-    if (!node) node = container.firstChild;
-    else if (node.nodeName == "BR") node = node.nextSibling;
-
-    while (node &amp;&amp; node.nodeName != "BR") node = node.nextSibling;
-    return node;
-  }
-
-  // Replace all DOM nodes in the current selection with new ones.
-  // Needed to prevent issues in IE where the old DOM nodes can be
-  // pasted back into the document, still holding their old undo
-  // information.
-  function scrubPasted(container, start, start2) {
-    var end = select.selectionTopNode(container, true),
-        doc = container.ownerDocument;
-    if (start != null &amp;&amp; start.parentNode != container) start = start2;
-    if (start === false) start = null;
-    if (start == end || !end || !container.firstChild) return;
-
-    var clear = traverseDOM(start ? start.nextSibling : container.firstChild);
-    while (end.parentNode == container) try{clear.next();}catch(e){break;}
-    forEach(clear.nodes, function(node) {
-      var newNode = node.nodeName == "BR" ? doc.createElement("BR") : makePartSpan(node.currentText, doc);
-      container.replaceChild(newNode, node);
-    });
-  }
-
-  // Client interface for searching the content of the editor. Create
-  // these by calling CodeMirror.getSearchCursor. To use, call
-  // findNext on the resulting object -- this returns a boolean
-  // indicating whether anything was found, and can be called again to
-  // skip to the next find. Use the select and replace methods to
-  // actually do something with the found locations.
-  function SearchCursor(editor, string, fromCursor) {
-    this.editor = editor;
-    this.history = editor.history;
-    this.history.commit();
-
-    // Are we currently at an occurrence of the search string?
-    this.atOccurrence = false;
-    // The object stores a set of nodes coming after its current
-    // position, so that when the current point is taken out of the
-    // DOM tree, we can still try to continue.
-    this.fallbackSize = 15;
-    var cursor;
-    // Start from the cursor when specified and a cursor can be found.
-    if (fromCursor &amp;&amp; (cursor = select.cursorPos(this.editor.container))) {
-      this.line = cursor.node;
-      this.offset = cursor.offset;
-    }
-    else {
-      this.line = null;
-      this.offset = 0;
-    }
-    this.valid = !!string;
-
-    // Create a matcher function based on the kind of string we have.
-    var target = string.split("\n"), self = this;;
-    this.matches = (target.length == 1) ?
-      // For one-line strings, searching can be done simply by calling
-      // indexOf on the current line.
-      function() {
-        var match = cleanText(self.history.textAfter(self.line).slice(self.offset)).indexOf(string);
-        if (match > -1)
-          return {from: {node: self.line, offset: self.offset + match},
-                  to: {node: self.line, offset: self.offset + match + string.length}};
-      } :
-      // Multi-line strings require internal iteration over lines, and
-      // some clunky checks to make sure the first match ends at the
-      // end of the line and the last match starts at the start.
-      function() {
-        var firstLine = cleanText(self.history.textAfter(self.line).slice(self.offset));
-        var match = firstLine.lastIndexOf(target[0]);
-        if (match == -1 || match != firstLine.length - target[0].length)
-          return false;
-        var startOffset = self.offset + match;
-
-        var line = self.history.nodeAfter(self.line);
-        for (var i = 1; i &lt; target.length - 1; i++) {
-          if (cleanText(self.history.textAfter(line)) != target[i])
-            return false;
-          line = self.history.nodeAfter(line);
-        }
-
-        if (cleanText(self.history.textAfter(line)).indexOf(target[target.length - 1]) != 0)
-          return false;
-
-        return {from: {node: self.line, offset: startOffset},
-                to: {node: line, offset: target[target.length - 1].length}};
-      };
-  }
-
-  SearchCursor.prototype = {
-    findNext: function() {
-      if (!this.valid) return false;
-      this.atOccurrence = false;
-      var self = this;
-
-      // Go back to the start of the document if the current line is
-      // no longer in the DOM tree.
-      if (this.line &amp;&amp; !this.line.parentNode) {
-        this.line = null;
-        this.offset = 0;
-      }
-
-      // Set the cursor's position one character after the given
-      // position.
-      function saveAfter(pos) {
-        if (self.history.textAfter(pos.node).length &lt; pos.offset) {
-          self.line = pos.node;
-          self.offset = pos.offset + 1;
-        }
-        else {
-          self.line = self.history.nodeAfter(pos.node);
-          self.offset = 0;
-        }
-      }
-
-      while (true) {
-        var match = this.matches();
-        // Found the search string.
-        if (match) {
-          this.atOccurrence = match;
-          saveAfter(match.from);
-          return true;
-        }
-        this.line = this.history.nodeAfter(this.line);
-        this.offset = 0;
-        // End of document.
-        if (!this.line) {
-          this.valid = false;
-          return false;
-        }
-      }
-    },
-
-    select: function() {
-      if (this.atOccurrence) {
-        select.setCursorPos(this.editor.container, this.atOccurrence.from, this.atOccurrence.to);
-        select.scrollToCursor(this.editor.container);
-      }
-    },
-
-    replace: function(string) {
-      if (this.atOccurrence) {
-        var end = this.editor.replaceRange(this.atOccurrence.from, this.atOccurrence.to, string);
-        this.line = end.node;
-        this.offset = end.offset;
-        this.atOccurrence = false;
-      }
-    }
-  };
-
-  // The Editor object is the main inside-the-iframe interface.
-  function Editor(options) {
-    this.options = options;
-    window.indentUnit = options.indentUnit;
-    this.parent = parent;
-    this.doc = document;
-    var container = this.container = this.doc.body;
-    this.win = window;
-    this.history = new History(container, options.undoDepth, options.undoDelay,
-                               this, options.onChange);
-    var self = this;
-
-    if (!Editor.Parser)
-      throw "No parser loaded.";
-    if (options.parserConfig &amp;&amp; Editor.Parser.configure)
-      Editor.Parser.configure(options.parserConfig);
-
-    if (!options.readOnly)
-      select.setCursorPos(container, {node: null, offset: 0});
-
-    this.dirty = [];
-    if (options.content)
-      this.importCode(options.content);
-    else // FF acts weird when the editable document is completely empty
-      container.appendChild(this.doc.createElement("BR"));
-
-    if (!options.readOnly) {
-      if (options.continuousScanning !== false) {
-        this.scanner = this.documentScanner(options.linesPerPass);
-        this.delayScanning();
-      }
-
-      function setEditable() {
-        // In IE, designMode frames can not run any scripts, so we use
-        // contentEditable instead.
-        if (document.body.contentEditable != undefined &amp;&amp; internetExplorer)
-          document.body.contentEditable = "true";
-        else
-          document.designMode = "on";
-
-        document.documentElement.style.borderWidth = "0";
-        if (!options.textWrapping)
-          container.style.whiteSpace = "nowrap";
-      }
-
-      // If setting the frame editable fails, try again when the user
-      // focus it (happens when the frame is not visible on
-      // initialisation, in Firefox).
-      try {
-        setEditable();
-      }
-      catch(e) {
-        var focusEvent = addEventHandler(document, "focus", function() {
-          focusEvent();
-          setEditable();
-        }, true);
-      }
-
-      addEventHandler(document, "keydown", method(this, "keyDown"));
-      addEventHandler(document, "keypress", method(this, "keyPress"));
-      addEventHandler(document, "keyup", method(this, "keyUp"));
-
-      function cursorActivity() {self.cursorActivity(false);}
-      addEventHandler(document.body, "mouseup", cursorActivity);
-      addEventHandler(document.body, "paste", function(event) {
-        cursorActivity();
-        if (internetExplorer) {
-          var text = null;
-          try {text = window.clipboardData.getData("Text");}catch(e){}
-          if (text != null) {
-            self.replaceSelection(text);
-            event.stop();
-          }
-          else {
-            var start = select.selectionTopNode(self.container, true),
-                start2 = start &amp;&amp; start.previousSibling;
-            setTimeout(function(){scrubPasted(self.container, start, start2);}, 0);
-          }
-        }
-      });
-      addEventHandler(document.body, "cut", cursorActivity);
-
-      if (this.options.autoMatchParens)
-        addEventHandler(document.body, "click", method(this, "scheduleParenBlink"));
-    }
-  }
-
-  function isSafeKey(code) {
-    return (code >= 16 &amp;&amp; code &lt;= 18) || // shift, control, alt
-           (code >= 33 &amp;&amp; code &lt;= 40); // arrows, home, end
-  }
-
-  Editor.prototype = {
-    // Import a piece of code into the editor.
-    importCode: function(code) {
-      this.history.push(null, null, asEditorLines(code));
-      this.history.reset();
-    },
-
-    // Extract the code from the editor.
-    getCode: function() {
-      if (!this.container.firstChild)
-        return "";
-
-      var accum = [];
-      select.markSelection(this.win);
-      forEach(traverseDOM(this.container.firstChild), method(accum, "push"));
-      webkitLastLineHack(this.container);
-      select.selectMarked();
-      return cleanText(accum.join(""));
-    },
-
-    checkLine: function(node) {
-      if (node === false || !(node == null || node.parentNode == this.container))
-        throw parent.CodeMirror.InvalidLineHandle;
-    },
-
-    cursorPosition: function(start) {
-      if (start == null) start = true;
-      var pos = select.cursorPos(this.container, start);
-      if (pos) return {line: pos.node, character: pos.offset};
-      else return {line: null, character: 0};
-    },
-
-    firstLine: function() {
-      return null;
-    },
-
-    lastLine: function() {
-      if (this.container.lastChild) return startOfLine(this.container.lastChild);
-      else return null;
-    },
-
-    nextLine: function(line) {
-      this.checkLine(line);
-      var end = endOfLine(line, this.container);
-      return end || false;
-    },
-
-    prevLine: function(line) {
-      this.checkLine(line);
-      if (line == null) return false;
-      return startOfLine(line.previousSibling);
-    },
-
-    selectLines: function(startLine, startOffset, endLine, endOffset) {
-      this.checkLine(startLine);
-      var start = {node: startLine, offset: startOffset}, end = null;
-      if (endOffset !== undefined) {
-        this.checkLine(endLine);
-        end = {node: endLine, offset: endOffset};
-      }
-      select.setCursorPos(this.container, start, end);
-      select.scrollToCursor(this.container);
-    },
-
-    lineContent: function(line) {
-      this.checkLine(line);
-      var accum = [];
-      for (line = line ? line.nextSibling : this.container.firstChild;
-           line &amp;&amp; line.nodeName != "BR"; line = line.nextSibling)
-        accum.push(nodeText(line));
-      return cleanText(accum.join(""));
-    },
-
-    setLineContent: function(line, content) {
-      this.history.commit();
-      this.replaceRange({node: line, offset: 0},
-                        {node: line, offset: this.history.textAfter(line).length},
-                        content);
-      this.addDirtyNode(line);
-      this.scheduleHighlight();
-    },
-
-    insertIntoLine: function(line, position, content) {
-      var before = null;
-      if (position == "end") {
-        before = endOfLine(line, this.container);
-      }
-      else {
-        for (var cur = line ? line.nextSibling : this.container.firstChild; cur; cur = cur.nextSibling) {
-          if (position == 0) {
-            before = cur;
-            break;
-          }
-          var text = (cur.innerText || cur.textContent || cur.nodeValue || "");
-          if (text.length > position) {
-            before = cur.nextSibling;
-            content = text.slice(0, position) + content + text.slice(position);
-            removeElement(cur);
-            break;
-          }
-          position -= text.length;
-        }
-      }
-
-      var lines = asEditorLines(content), doc = this.container.ownerDocument;
-      for (var i = 0; i &lt; lines.length; i++) {
-        if (i > 0) this.container.insertBefore(doc.createElement("BR"), before);
-        this.container.insertBefore(makePartSpan(lines[i], doc), before);
-      }
-      this.addDirtyNode(line);
-      this.scheduleHighlight();
-    },
-
-    // Retrieve the selected text.
-    selectedText: function() {
-      var h = this.history;
-      h.commit();
-
-      var start = select.cursorPos(this.container, true),
-          end = select.cursorPos(this.container, false);
-      if (!start || !end) return "";
-
-      if (start.node == end.node)
-        return h.textAfter(start.node).slice(start.offset, end.offset);
-
-      var text = [h.textAfter(start.node).slice(start.offset)];
-      for (pos = h.nodeAfter(start.node); pos != end.node; pos = h.nodeAfter(pos))
-        text.push(h.textAfter(pos));
-      text.push(h.textAfter(end.node).slice(0, end.offset));
-      return cleanText(text.join("\n"));
-    },
-
-    // Replace the selection with another piece of text.
-    replaceSelection: function(text) {
-      this.history.commit();
-      var start = select.cursorPos(this.container, true),
-          end = select.cursorPos(this.container, false);
-      if (!start || !end) return;
-
-      end = this.replaceRange(start, end, text);
-      select.setCursorPos(this.container, start, end);
-    },
-
-    replaceRange: function(from, to, text) {
-      var lines = asEditorLines(text);
-      lines[0] = this.history.textAfter(from.node).slice(0, from.offset) + lines[0];
-      var lastLine = lines[lines.length - 1];
-      lines[lines.length - 1] = lastLine + this.history.textAfter(to.node).slice(to.offset);
-      var end = this.history.nodeAfter(to.node);
-      this.history.push(from.node, end, lines);
-      return {node: this.history.nodeBefore(end),
-              offset: lastLine.length};
-    },
-
-    getSearchCursor: function(string, fromCursor) {
-      return new SearchCursor(this, string, fromCursor);
-    },
-
-    // Re-indent the whole buffer
-    reindent: function() {
-      if (this.container.firstChild)
-        this.indentRegion(null, this.container.lastChild);
-    },
-
-    grabKeys: function(eventHandler, filter) {
-      this.frozen = eventHandler;
-      this.keyFilter = filter;
-    },
-    ungrabKeys: function() {
-      this.frozen = "leave";
-      this.keyFilter = null;
-    },
-
-    // Intercept enter and tab, and assign their new functions.
-    keyDown: function(event) {
-      if (this.frozen == "leave") this.frozen = null;
-      if (this.frozen &amp;&amp; (!this.keyFilter || this.keyFilter(event.keyCode))) {
-        event.stop();
-        this.frozen(event);
-        return;
-      }
-
-      var code = event.keyCode;
-      // Don't scan when the user is typing.
-      this.delayScanning();
-      // Schedule a paren-highlight event, if configured.
-      if (this.options.autoMatchParens)
-        this.scheduleParenBlink();
-
-      if (code == 13) { // enter
-        if (event.ctrlKey) {
-          this.reparseBuffer();
-        }
-        else {
-          select.insertNewlineAtCursor(this.win);
-          this.indentAtCursor();
-          select.scrollToCursor(this.container);
-        }
-        event.stop();
-      }
-      else if (code == 9 &amp;&amp; this.options.tabMode != "default") { // tab
-        this.handleTab(!event.ctrlKey &amp;&amp; !event.shiftKey);
-        event.stop();
-      }
-      else if (code == 32 &amp;&amp; event.shiftKey &amp;&amp; this.options.tabMode == "default") { // space
-        this.handleTab(true);
-        event.stop();
-      }
-      else if ((code == 219 || code == 221) &amp;&amp; event.ctrlKey) {
-        this.blinkParens(event.shiftKey);
-        event.stop();
-      }
-      else if (event.metaKey &amp;&amp; (code == 37 || code == 39)) { // Meta-left/right
-        var cursor = select.selectionTopNode(this.container);
-        if (cursor === false || !this.container.firstChild) return;
-
-        if (code == 37) select.focusAfterNode(startOfLine(cursor), this.container);
-        else {
-          end = endOfLine(cursor, this.container);
-          select.focusAfterNode(end ? end.previousSibling : this.container.lastChild, this.container);
-        }
-        event.stop();
-      }
-      else if (event.ctrlKey || event.metaKey) {
-        if ((event.shiftKey &amp;&amp; code == 90) || code == 89) { // shift-Z, Y
-          select.scrollToNode(this.history.redo());
-          event.stop();
-        }
-        else if (code == 90 || code == 8) { // Z, backspace
-          select.scrollToNode(this.history.undo());
-          event.stop();
-        }
-        else if (code == 83 &amp;&amp; this.options.saveFunction) { // S
-          this.options.saveFunction();
-          event.stop();
-        }
-      }
-    },
-
-    // Check for characters that should re-indent the current line,
-    // and prevent Opera from handling enter and tab anyway.
-    keyPress: function(event) {
-      var electric = /indent|default/.test(this.options.tabMode) &amp;&amp; Editor.Parser.electricChars;
-      // Hack for Opera, and Firefox on OS X, in which stopping a
-      // keydown event does not prevent the associated keypress event
-      // from happening, so we have to cancel enter and tab again
-      // here.
-      if ((this.frozen &amp;&amp; (!this.keyFilter || this.keyFilter(event.keyCode))) ||
-          event.code == 13 || (event.code == 9 &amp;&amp; this.options.tabMode != "default") ||
-          (event.keyCode == 32 &amp;&amp; event.shiftKey &amp;&amp; this.options.tabMode == "default"))
-        event.stop();
-      else if (electric &amp;&amp; electric.indexOf(event.character) != -1)
-        this.parent.setTimeout(method(this, "indentAtCursor"), 0);
-    },
-
-    // Mark the node at the cursor dirty when a non-safe key is
-    // released.
-    keyUp: function(event) {
-      this.cursorActivity(isSafeKey(event.keyCode));
-    },
-
-    // Indent the line following a given &lt;br>, or null for the first
-    // line. If given a &lt;br> element, this must have been highlighted
-    // so that it has an indentation method. Returns the whitespace
-    // element that has been modified or created (if any).
-    indentLineAfter: function(start, direction) {
-      // whiteSpace is the whitespace span at the start of the line,
-      // or null if there is no such node.
-      var whiteSpace = start ? start.nextSibling : this.container.firstChild;
-      if (whiteSpace &amp;&amp; !hasClass(whiteSpace, "whitespace"))
-        whiteSpace = null;
-
-      // Sometimes the start of the line can influence the correct
-      // indentation, so we retrieve it.
-      var firstText = whiteSpace ? whiteSpace.nextSibling : (start ? start.nextSibling : this.container.firstChild);
-      var nextChars = (start &amp;&amp; firstText &amp;&amp; firstText.currentText) ? firstText.currentText : "";
-
-      // Ask the lexical context for the correct indentation, and
-      // compute how much this differs from the current indentation.
-      var newIndent = 0, curIndent = whiteSpace ? whiteSpace.currentText.length : 0;
-      if (direction != null &amp;&amp; this.options.tabMode == "shift")
-        newIndent = direction ? curIndent + indentUnit : Math.max(0, curIndent - indentUnit)
-      else if (start)
-        newIndent = start.indentation(nextChars, curIndent, direction);
-      else if (Editor.Parser.firstIndentation)
-        newIndent = Editor.Parser.firstIndentation(nextChars, curIndent, direction);
-      var indentDiff = newIndent - curIndent;
-
-      // If there is too much, this is just a matter of shrinking a span.
-      if (indentDiff &lt; 0) {
-        if (newIndent == 0) {
-          if (firstText) select.snapshotMove(whiteSpace.firstChild, firstText.firstChild, 0);
-          removeElement(whiteSpace);
-          whiteSpace = null;
-        }
-        else {
-          select.snapshotMove(whiteSpace.firstChild, whiteSpace.firstChild, indentDiff, true);
-          whiteSpace.currentText = makeWhiteSpace(newIndent);
-          whiteSpace.firstChild.nodeValue = whiteSpace.currentText;
-        }
-      }
-      // Not enough...
-      else if (indentDiff > 0) {
-        // If there is whitespace, we grow it.
-        if (whiteSpace) {
-          whiteSpace.currentText = makeWhiteSpace(newIndent);
-          whiteSpace.firstChild.nodeValue = whiteSpace.currentText;
-        }
-        // Otherwise, we have to add a new whitespace node.
-        else {
-          whiteSpace = makePartSpan(makeWhiteSpace(newIndent), this.doc);
-          whiteSpace.className = "whitespace";
-          if (start) insertAfter(whiteSpace, start);
-          else this.container.insertBefore(whiteSpace, this.container.firstChild);
-        }
-        if (firstText) select.snapshotMove(firstText.firstChild, whiteSpace.firstChild, curIndent, false, true);
-      }
-      if (indentDiff != 0) this.addDirtyNode(start);
-      return whiteSpace;
-    },
-
-    // Re-highlight the selected part of the document.
-    highlightAtCursor: function() {
-      var pos = select.selectionTopNode(this.container, true);
-      var to = select.selectionTopNode(this.container, false);
-      if (pos === false || to === false) return;
-
-      select.markSelection(this.win);
-      if (this.highlight(pos, endOfLine(to, this.container), true, 20) === false)
-        return false;
-      select.selectMarked();
-      return true;
-    },
-
-    // When tab is pressed with text selected, the whole selection is
-    // re-indented, when nothing is selected, the line with the cursor
-    // is re-indented.
-    handleTab: function(direction) {
-      if (this.options.tabMode == "spaces") {
-        select.insertTabAtCursor(this.win);
-      }
-      else if (!select.somethingSelected(this.win)) {
-        this.indentAtCursor(direction);
-      }
-      else {
-        var start = select.selectionTopNode(this.container, true),
-            end = select.selectionTopNode(this.container, false);
-        if (start === false || end === false) return;
-        this.indentRegion(start, end, direction);
-      }
-    },
-
-    // Delay (or initiate) the next paren blink event.
-    scheduleParenBlink: function() {
-      if (this.parenEvent) this.parent.clearTimeout(this.parenEvent);
-      var self = this;
-      this.parenEvent = this.parent.setTimeout(function(){self.blinkParens();}, 300);
-    },
-
-    // Take the token before the cursor. If it contains a character in
-    // '()[]{}', search for the matching paren/brace/bracket, and
-    // highlight them in green for a moment, or red if no proper match
-    // was found.
-    blinkParens: function(jump) {
-      // Clear the event property.
-      if (this.parenEvent) this.parent.clearTimeout(this.parenEvent);
-      this.parenEvent = null;
-
-      // Extract a 'paren' from a piece of text.
-      function paren(node) {
-        if (node.currentText) {
-          var match = node.currentText.match(/^[\s\u00a0]*([\(\)\[\]{}])[\s\u00a0]*$/);
-          return match &amp;&amp; match[1];
-        }
-      }
-      // Determine the direction a paren is facing.
-      function forward(ch) {
-        return /[\(\[\{]/.test(ch);
-      }
-
-      var ch, self = this, cursor = select.selectionTopNode(this.container, true);
-      if (!cursor || !this.highlightAtCursor()) return;
-      cursor = select.selectionTopNode(this.container, true);
-      if (!(cursor &amp;&amp; ((ch = paren(cursor)) || (cursor = cursor.nextSibling) &amp;&amp; (ch = paren(cursor)))))
-        return;
-      // We only look for tokens with the same className.
-      var className = cursor.className, dir = forward(ch), match = matching[ch];
-
-      // Since parts of the document might not have been properly
-      // highlighted, and it is hard to know in advance which part we
-      // have to scan, we just try, and when we find dirty nodes we
-      // abort, parse them, and re-try.
-      function tryFindMatch() {
-        var stack = [], ch, ok = true;;
-        for (var runner = cursor; runner; runner = dir ? runner.nextSibling : runner.previousSibling) {
-          if (runner.className == className &amp;&amp; runner.nodeName == "SPAN" &amp;&amp; (ch = paren(runner))) {
-            if (forward(ch) == dir)
-              stack.push(ch);
-            else if (!stack.length)
-              ok = false;
-            else if (stack.pop() != matching[ch])
-              ok = false;
-            if (!stack.length) break;
-          }
-          else if (runner.dirty || runner.nodeName != "SPAN" &amp;&amp; runner.nodeName != "BR") {
-            return {node: runner, status: "dirty"};
-          }
-        }
-        return {node: runner, status: runner &amp;&amp; ok};
-      }
-      // Temporarily give the relevant nodes a colour.
-      function blink(node, ok) {
-        node.style.fontWeight = "bold";
-        node.style.color = ok ? "#8F8" : "#F88";
-        self.parent.setTimeout(function() {node.style.fontWeight = ""; node.style.color = "";}, 500);
-      }
-
-      while (true) {
-        var found = tryFindMatch();
-        if (found.status == "dirty") {
-          this.highlight(found.node, 1);
-          // Needed because in some corner cases a highlight does not
-          // reach a node.
-          found.node.dirty = false;
-          continue;
-        }
-        else {
-          blink(cursor, found.status);
-          if (found.node) {
-            blink(found.node, found.status);
-            if (jump) select.focusAfterNode(found.node.previousSibling, this.container);
-          }
-          break;
-        }
-      }
-    },
-
-    // Adjust the amount of whitespace at the start of the line that
-    // the cursor is on so that it is indented properly.
-    indentAtCursor: function(direction) {
-      if (!this.container.firstChild) return;
-      // The line has to have up-to-date lexical information, so we
-      // highlight it first.
-      if (!this.highlightAtCursor()) return;
-      var cursor = select.selectionTopNode(this.container, false);
-      // If we couldn't determine the place of the cursor,
-      // there's nothing to indent.
-      if (cursor === false)
-        return;
-      var lineStart = startOfLine(cursor);
-      var whiteSpace = this.indentLineAfter(lineStart, direction);
-      if (cursor == lineStart &amp;&amp; whiteSpace)
-          cursor = whiteSpace;
-      // This means the indentation has probably messed up the cursor.
-      if (cursor == whiteSpace)
-        select.focusAfterNode(cursor, this.container);
-    },
-
-    // Indent all lines whose start falls inside of the current
-    // selection.
-    indentRegion: function(start, end, direction) {
-      var current = (start = startOfLine(start)), before = start &amp;&amp; startOfLine(start.previousSibling);
-      if (end.nodeName != "BR") end = endOfLine(end, this.container);
-
-      do {
-        if (current) this.highlight(before, current, true);
-        this.indentLineAfter(current, direction);
-        before = current;
-        current = endOfLine(current, this.container);
-      } while (current != end);
-      select.setCursorPos(this.container, {node: start, offset: 0}, {node: end, offset: 0});
-    },
-
-    // Find the node that the cursor is in, mark it as dirty, and make
-    // sure a highlight pass is scheduled.
-    cursorActivity: function(safe) {
-      if (internetExplorer) {
-        this.container.createTextRange().execCommand("unlink");
-        this.selectionSnapshot = select.selectionCoords(this.win);
-      }
-
-      var activity = this.options.cursorActivity;
-      if (!safe || activity) {
-        var cursor = select.selectionTopNode(this.container, false);
-        if (cursor === false || !this.container.firstChild) return;
-        cursor = cursor || this.container.firstChild;
-        if (activity) activity(cursor);
-        if (!safe) {
-          this.scheduleHighlight();
-          this.addDirtyNode(cursor);
-        }
-      }
-    },
-
-    reparseBuffer: function() {
-      forEach(this.container.childNodes, function(node) {node.dirty = true;});
-      if (this.container.firstChild)
-        this.addDirtyNode(this.container.firstChild);
-    },
-
-    // Add a node to the set of dirty nodes, if it isn't already in
-    // there.
-    addDirtyNode: function(node) {
-      node = node || this.container.firstChild;
-      if (!node) return;
-
-      for (var i = 0; i &lt; this.dirty.length; i++)
-        if (this.dirty[i] == node) return;
-
-      if (node.nodeType != 3)
-        node.dirty = true;
-      this.dirty.push(node);
-    },
-
-    // Cause a highlight pass to happen in options.passDelay
-    // milliseconds. Clear the existing timeout, if one exists. This
-    // way, the passes do not happen while the user is typing, and
-    // should as unobtrusive as possible.
-    scheduleHighlight: function() {
-      // Timeouts are routed through the parent window, because on
-      // some browsers designMode windows do not fire timeouts.
-      var self = this;
-      this.parent.clearTimeout(this.highlightTimeout);
-      this.highlightTimeout = this.parent.setTimeout(function(){self.highlightDirty();}, this.options.passDelay);
-    },
-
-    // Fetch one dirty node, and remove it from the dirty set.
-    getDirtyNode: function() {
-      while (this.dirty.length > 0) {
-        var found = this.dirty.pop();
-        // IE8 sometimes throws an unexplainable 'invalid argument'
-        // exception for found.parentNode
-        try {
-          // If the node has been coloured in the meantime, or is no
-          // longer in the document, it should not be returned.
-          while (found &amp;&amp; found.parentNode != this.container)
-            found = found.parentNode
-          if (found &amp;&amp; (found.dirty || found.nodeType == 3))
-            return found;
-        } catch (e) {}
-      }
-      return null;
-    },
-
-    // Pick dirty nodes, and highlight them, until
-    // options.linesPerPass lines have been highlighted. The highlight
-    // method will continue to next lines as long as it finds dirty
-    // nodes. It returns an object indicating the amount of lines
-    // left, and information about the place where it stopped. If
-    // there are dirty nodes left after this function has spent all
-    // its lines, it shedules another highlight to finish the job.
-    highlightDirty: function(force) {
-      // Prevent FF from raising an error when it is firing timeouts
-      // on a page that's no longer loaded.
-      if (!window.select) return;
-
-      var lines = force ? Infinity : this.options.linesPerPass;
-      if (!this.options.readOnly) select.markSelection(this.win);
-      var start;
-      while (lines > 0 &amp;&amp; (start = this.getDirtyNode())){
-        var result = this.highlight(start, lines);
-        if (result) {
-          lines = result.left;
-          if (result.node &amp;&amp; result.dirty)
-            this.addDirtyNode(result.node);
-        }
-      }
-      if (!this.options.readOnly) select.selectMarked();
-      if (start)
-        this.scheduleHighlight();
-      return this.dirty.length == 0;
-    },
-
-    // Creates a function that, when called through a timeout, will
-    // continuously re-parse the document.
-    documentScanner: function(linesPer) {
-      var self = this, pos = null;
-      return function() {
-        // If the current node is no longer in the document... oh
-        // well, we start over.
-        if (pos &amp;&amp; pos.parentNode != self.container)
-          pos = null;
-        select.markSelection(self.win);
-        var result = self.highlight(pos, linesPer, true);
-        select.selectMarked();
-        var newPos = result ? (result.node &amp;&amp; result.node.nextSibling) : null;
-        pos = (pos == newPos) ? null : newPos;
-        self.delayScanning();
-      };
-    },
-
-    // Starts the continuous scanning process for this document after
-    // a given interval.
-    delayScanning: function() {
-      if (this.scanner) {
-        this.parent.clearTimeout(this.documentScan);
-        this.documentScan = this.parent.setTimeout(this.scanner, this.options.continuousScanning);
-      }
-    },
-
-    // The function that does the actual highlighting/colouring (with
-    // help from the parser and the DOM normalizer). Its interface is
-    // rather overcomplicated, because it is used in different
-    // situations: ensuring that a certain line is highlighted, or
-    // highlighting up to X lines starting from a certain point. The
-    // 'from' argument gives the node at which it should start. If
-    // this is null, it will start at the beginning of the document.
-    // When a number of lines is given with the 'target' argument, it
-    // will highlight no more than that amount of lines. If this
-    // argument holds a DOM node, it will highlight until it reaches
-    // that node. If at any time it comes across a 'clean' line (no
-    // dirty nodes), it will stop, except when 'cleanLines' is true.
-    highlight: function(from, target, cleanLines, maxBacktrack){
-      var container = this.container, self = this, active = this.options.activeTokens;
-      var lines = (typeof target == "number" ? target : null);
-
-      if (!container.firstChild)
-        return;
-      // Backtrack to the first node before from that has a partial
-      // parse stored.
-      while (from &amp;&amp; (!from.parserFromHere || from.dirty)) {
-        from = from.previousSibling;
-        if (maxBacktrack != null &amp;&amp; from.nodeName == "BR" &amp;&amp; (--maxBacktrack) &lt; 0)
-          return false;
-      }
-      // If we are at the end of the document, do nothing.
-      if (from &amp;&amp; !from.nextSibling)
-        return;
-
-      // Check whether a part (&lt;span> node) and the corresponding token
-      // match.
-      function correctPart(token, part){
-        return !part.reduced &amp;&amp; part.currentText == token.value &amp;&amp; part.className == token.style;
-      }
-      // Shorten the text associated with a part by chopping off
-      // characters from the front. Note that only the currentText
-      // property gets changed. For efficiency reasons, we leave the
-      // nodeValue alone -- we set the reduced flag to indicate that
-      // this part must be replaced.
-      function shortenPart(part, minus){
-        part.currentText = part.currentText.substring(minus);
-        part.reduced = true;
-      }
-      // Create a part corresponding to a given token.
-      function tokenPart(token){
-        var part = makePartSpan(token.value, self.doc);
-        part.className = token.style;
-        return part;
-      }
-
-      function maybeTouch(node) {
-        if (node) {
-          if (node.nextSibling != node.oldNextSibling) {
-            self.history.touch(node);
-            node.oldNextSibling = node.nextSibling;
-          }
-        }
-        else {
-          if (self.container.firstChild != self.container.oldFirstChild) {
-            self.history.touch(node);
-            self.container.oldFirstChild = self.container.firstChild;
-          }
-        }
-      }
-
-      // Get the token stream. If from is null, we start with a new
-      // parser from the start of the frame, otherwise a partial parse
-      // is resumed.
-      var traversal = traverseDOM(from ? from.nextSibling : container.firstChild),
-          stream = stringStream(traversal),
-          parsed = from ? from.parserFromHere(stream) : Editor.Parser.make(stream);
-
-      // parts is an interface to make it possible to 'delay' fetching
-      // the next DOM node until we are completely done with the one
-      // before it. This is necessary because often the next node is
-      // not yet available when we want to proceed past the current
-      // one.
-      var parts = {
-        current: null,
-        // Fetch current node.
-        get: function(){
-          if (!this.current)
-            this.current = traversal.nodes.shift();
-          return this.current;
-        },
-        // Advance to the next part (do not fetch it yet).
-        next: function(){
-          this.current = null;
-        },
-        // Remove the current part from the DOM tree, and move to the
-        // next.
-        remove: function(){
-          container.removeChild(this.get());
-          this.current = null;
-        },
-        // Advance to the next part that is not empty, discarding empty
-        // parts.
-        getNonEmpty: function(){
-          var part = this.get();
-          // Allow empty nodes when they are alone on a line, needed
-          // for the FF cursor bug workaround (see select.js,
-          // insertNewlineAtCursor).
-          while (part &amp;&amp; part.nodeName == "SPAN" &amp;&amp; part.currentText == "") {
-            var old = part;
-            this.remove();
-            part = this.get();
-            // Adjust selection information, if any. See select.js for details.
-            select.snapshotMove(old.firstChild, part &amp;&amp; (part.firstChild || part), 0);
-          }
-          return part;
-        }
-      };
-
-      var lineDirty = false, prevLineDirty = true, lineNodes = 0;
-
-      // This forEach loops over the tokens from the parsed stream, and
-      // at the same time uses the parts object to proceed through the
-      // corresponding DOM nodes.
-      forEach(parsed, function(token){
-        var part = parts.getNonEmpty();
-
-        if (token.value == "\n"){
-          // The idea of the two streams actually staying synchronized
-          // is such a long shot that we explicitly check.
-          if (part.nodeName != "BR")
-            throw "Parser out of sync. Expected BR.";
-
-          if (part.dirty || !part.indentation) lineDirty = true;
-          maybeTouch(from);
-          from = part;
-
-          // Every &lt;br> gets a copy of the parser state and a lexical
-          // context assigned to it. The first is used to be able to
-          // later resume parsing from this point, the second is used
-          // for indentation.
-          part.parserFromHere = parsed.copy();
-          part.indentation = token.indentation;
-          part.dirty = false;
-
-          // If the target argument wasn't an integer, go at least
-          // until that node.
-          if (lines == null &amp;&amp; part == target) throw StopIteration;
-
-          // A clean line with more than one node means we are done.
-          // Throwing a StopIteration is the way to break out of a
-          // MochiKit forEach loop.
-          if ((lines != null &amp;&amp; --lines &lt;= 0) || (!lineDirty &amp;&amp; !prevLineDirty &amp;&amp; lineNodes > 1 &amp;&amp; !cleanLines))
-            throw StopIteration;
-          prevLineDirty = lineDirty; lineDirty = false; lineNodes = 0;
-          parts.next();
-        }
-        else {
-          if (part.nodeName != "SPAN")
-            throw "Parser out of sync. Expected SPAN.";
-          if (part.dirty)
-            lineDirty = true;
-          lineNodes++;
-
-          // If the part matches the token, we can leave it alone.
-          if (correctPart(token, part)){
-            part.dirty = false;
-            parts.next();
-          }
-          // Otherwise, we have to fix it.
-          else {
-            lineDirty = true;
-            // Insert the correct part.
-            var newPart = tokenPart(token);
-            container.insertBefore(newPart, part);
-            if (active) active(newPart, token, self);
-            var tokensize = token.value.length;
-            var offset = 0;
-            // Eat up parts until the text for this token has been
-            // removed, adjusting the stored selection info (see
-            // select.js) in the process.
-            while (tokensize > 0) {
-              part = parts.get();
-              var partsize = part.currentText.length;
-              select.snapshotReplaceNode(part.firstChild, newPart.firstChild, tokensize, offset);
-              if (partsize > tokensize){
-                shortenPart(part, tokensize);
-                tokensize = 0;
-              }
-              else {
-                tokensize -= partsize;
-                offset += partsize;
-                parts.remove();
-              }
-            }
-          }
-        }
-      });
-      maybeTouch(from);
-      webkitLastLineHack(this.container);
-
-      // The function returns some status information that is used by
-      // hightlightDirty to determine whether and where it has to
-      // continue.
-      return {left: lines,
-              node: parts.getNonEmpty(),
-              dirty: lineDirty};
-    }
-  };
-
-  return Editor;
-})();
-
-  addEventHandler(window, "load", function() {
-      var CodeMirror = window.frameElement.CodeMirror;
-      CodeMirror.editor = new Editor(CodeMirror.options);
-      this.parent.setTimeout(method(CodeMirror, "init"), 0);
-  });
-</textarea>
-</div>
-
-<script type="text/javascript">
-  var textarea = document.getElementById('code');
-  var editor = new CodeMirror(CodeMirror.replace(textarea), {
-    height: "750px",
-    width: "100%",
-    content: textarea.value,
-    parserfile: ["tokenizejavascript.js", "parsejavascript.js"],
-    stylesheet: "css/jscolors.css",
-    path: "js/",
-    autoMatchParens: true,
-    initCallback: function(editor){editor.win.document.body.lastChild.scrollIntoView();}
-  });
-</script>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/compress.html b/typo3/contrib/codemirror/compress.html
deleted file mode 100644 (file)
index 86d4f2d..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <title>CodeMirror: Compression Helper</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Droid+Sans:bold"/>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-    <style type="text/css">
-      .field {border: 1px solid black; padding: .4em;}
-      button {border: 1px solid black; background-color: #eee;}
-    </style>
-  </head>
-  <body>
-
-<h1><span class="logo-braces">{ }</span> CodeMirror</h1>
-
-<pre class="grey">
-/* Script compression */
-</pre>
-
-    <p>The CodeMirror scripts, as distributed, are many, and full of
-    comments. To optimize page loading, it is recommended to
-    concatenate the scripts loaded in the CodeMirror frame, and
-    compress them. This page may be useful if you intend to do this:
-    it provides an interface to Google's <a
-    href="http://closure-compiler.appspot.com/">Closure compiler</a>,
-    allowing you to easily load in CodeMirror scripts.</p>
-
-    <p>You will have to compress <code>codemirror.js</code>
-    separately, since that will be loaded into the top-level page from
-    which you use CodeMirror. Inside the frame, the
-    <code>parserfile</code> and <code>basefiles</code> options control
-    which files are loaded. If you combine the parser(s) you need with
-    the basefiles, you can set <code>basefiles</code> to point at your
-    compressed file, and leave <code>parserfiles</code> at
-    <code>[]</code>.</p>
-
-    <p>For example, you have a page that uses CodeMirror to edit some
-    JavaScript code. You could save a minimized version of
-    <code>codemirror.js</code> as <code>codemirror_min.js</code>, and
-    include that (with a <code>&lt;script></code> tag) in your page.
-    Next, you compress all the files under "In-frame base code", plus
-    <code>tokenizejavascript.js</code> and
-    <code>parsejavascript.js</code> into
-    <code>codemirror_base.js</code>, and load the editor like
-    this:</p>
-
-    <pre class="code">CodeMirror.fromTextArea("mytextarea", {
-  basefiles: ["js/codemirror_base.js"],
-  lineNumbers: true
-});</pre>
-
-    <p>Clicking the "Compress" buttons below will take you to a file
-    containing the compressed code. Copy-paste this into your script
-    file. ("Save as" for that page is broken on some browsers, so be
-    careful).</p>
-
-    <script type="text/javascript">
-      function setVersion(ver) {
-        var urlprefix = ver.options[ver.selectedIndex].value;
-        console.log(urlprefix);
-        var select = document.getElementById("files"), m;
-        for (var optgr = select.firstChild; optgr; optgr = optgr.nextSibling)
-          for (var opt = optgr.firstChild; opt; opt = opt.nextSibling) {
-            if (opt.nodeName != "OPTION")
-              continue;
-            else if (m = opt.value.match(/^http:\/\/codemirror.net\/(.*)$/))
-              opt.value = urlprefix + m[1];
-            else if (m = opt.value.match(/http:\/\/marijn.haverbeke.nl\/git\/codemirror\?a=blob_plain;hb=[^;]+;f=(.*)$/))
-              opt.value = urlprefix + m[1];
-          }
-      }
-      function verify() {
-        document.getElementById("output").value="warnings";
-        document.getElementById("form").submit();
-        document.getElementById("output").value="compiled_code";
-      }
-    </script>
-
-    <form id="form" action="http://closure-compiler.appspot.com/compile" method="post" id="form">
-      <p>Version: <select id="version" onchange="setVersion(this);" class="field" style="padding: 1px">
-        <option value="http://codemirror.net/" selected>Development head</option>
-        <option value="http://marijn.haverbeke.nl/git/codemirror?a=blob_plain;hb=v0.8;f=">v0.8</option>
-        <option value="http://marijn.haverbeke.nl/git/codemirror?a=blob_plain;hb=v0.7;f=">v0.7</option>
-        <option value="http://marijn.haverbeke.nl/git/codemirror?a=blob_plain;hb=v0.67;f=">v0.67</option>
-        <option value="http://marijn.haverbeke.nl/git/codemirror?a=blob_plain;hb=v0.66;f=">v0.66</option>
-      </select></p>
-
-      <p><input type="hidden" value="compiled_code" name="output_info" id="output"/>
-
-      <select multiple="multiple" name="code_url" style="width: 40em;" class="field" id="files">
-        <optgroup label="CodeMirror Library">
-          <option value="http://codemirror.net/js/codemirror.js">codemirror.js</option>
-        </optgroup>
-        <optgroup label="In-frame base files">
-          <option value="http://codemirror.net/js/util.js">util.js</option>
-          <option value="http://codemirror.net/js/stringstream.js">stringstream.js</option>
-          <option value="http://codemirror.net/js/select.js">select.js</option>
-          <option value="http://codemirror.net/js/undo.js">undo.js</option>
-          <option value="http://codemirror.net/js/editor.js">editor.js</option>
-          <option value="http://codemirror.net/js/tokenize.js">tokenize.js</option>
-        </optgroup>
-        <optgroup label="Parsers">
-          <option value="http://codemirror.net/js/tokenizejavascript.js">tokenizejavascript.js</option>
-          <option value="http://codemirror.net/js/parsejavascript.js">parsejavascript.js</option>
-          <option value="http://codemirror.net/js/parsexml.js">parsexml.js</option>
-          <option value="http://codemirror.net/js/parsecss.js">parsecss.js</option>
-          <option value="http://codemirror.net/js/parsesparql.js">parsesparql.js</option>
-          <option value="http://codemirror.net/js/parsehtmlmixed.js">parsehtmlmixed.js</option>
-          <option value="http://codemirror.net/js/parsedummy.js">parsedummy.js</option>
-        </optgroup>
-        <optgroup label="Contributed parsers">
-          <option value="http://codemirror.net/contrib/lua/js/parselua.js">parselua.js</option>
-          <option value="http://codemirror.net/contrib/python/js/parsepython.js">parsepython.js</option>
-          <option value="http://codemirror.net/contrib/php/js/tokenizephp.js">tokenizephp.js</option>
-          <option value="http://codemirror.net/contrib/php/js/parsephp.js">parsephp.js</option>
-          <option value="http://codemirror.net/contrib/php/js/parsephphtmlmixed.js">parsephphtmlmixed.js</option>
-          <option value="http://codemirror.net/contrib/csharp/js/tokenizecsharp.js">tokenizecsharp.js</option>
-          <option value="http://codemirror.net/contrib/csharp/js/parsecsharp.js">parsecsharp.js</option>
-          <option value="http://codemirror.net/contrib/sql/js/parsesql.js">parsesql.js</option>
-          <option value="http://codemirror.net/contrib/plsql/js/parseplsql.js">parseplsql.js</option>
-          <option value="http://codemirror.net/contrib/scheme/js/tokenizescheme.js">tokenizescheme.js</option>
-          <option value="http://codemirror.net/contrib/seheme/js/parsescheme.js">parsescheme.js</option>
-          <option value="http://codemirror.net/contrib/ometa/js/tokenizeometa.js">tokenizeometa.js</option>
-          <option value="http://codemirror.net/contrib/ometa/js/parseometa.js">parseometa.js</option>
-          <option value="http://codemirror.net/contrib/xquery/js/tokenizexquery.js">tokenizexquery.js</option>
-          <option value="http://codemirror.net/contrib/xquery/js/parsexquery.js">parsexquery.js</option>
-          <option value="http://svn.exoplatform.org/projects/gwt/trunk/exo-gwtframework-editor/src/main/resources/org/exoplatform/gwtframework/editor/public/codemirror/js/tokenizegroovy.js">tokenizegroovy.js</option>
-          <option value="http://svn.exoplatform.org/projects/gwt/trunk/exo-gwtframework-editor/src/main/resources/org/exoplatform/gwtframework/editor/public/codemirror/js/parsegroovy.js">parsegroovy.js</option>
-        </optgroup>
-      </select></p>
-
-      <p><button type="submit">Compress!</button> <button type="button" onclick="verify();">Check for errors</button></p>
-
-      <p>Custom code to add to the compressed file:<textarea name="js_code" style="width: 100%; height: 15em;" class="field"></textarea></p>
-    </form>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/contrib/csharp/._index.html b/typo3/contrib/codemirror/contrib/csharp/._index.html
deleted file mode 100644 (file)
index eb0419b..0000000
Binary files a/typo3/contrib/codemirror/contrib/csharp/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/csharp/css/._csharpcolors.css b/typo3/contrib/codemirror/contrib/csharp/css/._csharpcolors.css
deleted file mode 100644 (file)
index 114b546..0000000
Binary files a/typo3/contrib/codemirror/contrib/csharp/css/._csharpcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/csharp/js/._parsecsharp.js b/typo3/contrib/codemirror/contrib/csharp/js/._parsecsharp.js
deleted file mode 100644 (file)
index c1aa9e0..0000000
Binary files a/typo3/contrib/codemirror/contrib/csharp/js/._parsecsharp.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/csharp/js/._tokenizecsharp.js b/typo3/contrib/codemirror/contrib/csharp/js/._tokenizecsharp.js
deleted file mode 100644 (file)
index 7ef718b..0000000
Binary files a/typo3/contrib/codemirror/contrib/csharp/js/._tokenizecsharp.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/groovy/._index.html b/typo3/contrib/codemirror/contrib/groovy/._index.html
deleted file mode 100644 (file)
index 276955b..0000000
Binary files a/typo3/contrib/codemirror/contrib/groovy/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/lua/._LICENSE b/typo3/contrib/codemirror/contrib/lua/._LICENSE
deleted file mode 100644 (file)
index fae2894..0000000
Binary files a/typo3/contrib/codemirror/contrib/lua/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/lua/._index.html b/typo3/contrib/codemirror/contrib/lua/._index.html
deleted file mode 100644 (file)
index 046560d..0000000
Binary files a/typo3/contrib/codemirror/contrib/lua/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/lua/css/._luacolors.css b/typo3/contrib/codemirror/contrib/lua/css/._luacolors.css
deleted file mode 100644 (file)
index 073d1df..0000000
Binary files a/typo3/contrib/codemirror/contrib/lua/css/._luacolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/ometa/._LICENSE b/typo3/contrib/codemirror/contrib/ometa/._LICENSE
deleted file mode 100644 (file)
index e2f550b..0000000
Binary files a/typo3/contrib/codemirror/contrib/ometa/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/ometa/._index.html b/typo3/contrib/codemirror/contrib/ometa/._index.html
deleted file mode 100644 (file)
index 64457a5..0000000
Binary files a/typo3/contrib/codemirror/contrib/ometa/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/ometa/css/._ometacolors.css b/typo3/contrib/codemirror/contrib/ometa/css/._ometacolors.css
deleted file mode 100644 (file)
index 3eccef1..0000000
Binary files a/typo3/contrib/codemirror/contrib/ometa/css/._ometacolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/ometa/js/._parseometa.js b/typo3/contrib/codemirror/contrib/ometa/js/._parseometa.js
deleted file mode 100644 (file)
index 9935096..0000000
Binary files a/typo3/contrib/codemirror/contrib/ometa/js/._parseometa.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/ometa/js/._tokenizeometa.js b/typo3/contrib/codemirror/contrib/ometa/js/._tokenizeometa.js
deleted file mode 100644 (file)
index 55558f3..0000000
Binary files a/typo3/contrib/codemirror/contrib/ometa/js/._tokenizeometa.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/php/._LICENSE b/typo3/contrib/codemirror/contrib/php/._LICENSE
deleted file mode 100644 (file)
index 8d85e4d..0000000
Binary files a/typo3/contrib/codemirror/contrib/php/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/php/._index.html b/typo3/contrib/codemirror/contrib/php/._index.html
deleted file mode 100644 (file)
index 4d6bed7..0000000
Binary files a/typo3/contrib/codemirror/contrib/php/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/php/css/._phpcolors.css b/typo3/contrib/codemirror/contrib/php/css/._phpcolors.css
deleted file mode 100644 (file)
index 60c8bca..0000000
Binary files a/typo3/contrib/codemirror/contrib/php/css/._phpcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/plsql/._LICENSE b/typo3/contrib/codemirror/contrib/plsql/._LICENSE
deleted file mode 100644 (file)
index 30473e0..0000000
Binary files a/typo3/contrib/codemirror/contrib/plsql/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/plsql/._index.html b/typo3/contrib/codemirror/contrib/plsql/._index.html
deleted file mode 100644 (file)
index 17793ba..0000000
Binary files a/typo3/contrib/codemirror/contrib/plsql/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/plsql/css/._plsqlcolors.css b/typo3/contrib/codemirror/contrib/plsql/css/._plsqlcolors.css
deleted file mode 100644 (file)
index 8dc1ee9..0000000
Binary files a/typo3/contrib/codemirror/contrib/plsql/css/._plsqlcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/plsql/js/._parseplsql.js b/typo3/contrib/codemirror/contrib/plsql/js/._parseplsql.js
deleted file mode 100644 (file)
index 8a25885..0000000
Binary files a/typo3/contrib/codemirror/contrib/plsql/js/._parseplsql.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/python/._LICENSE b/typo3/contrib/codemirror/contrib/python/._LICENSE
deleted file mode 100644 (file)
index f74230d..0000000
Binary files a/typo3/contrib/codemirror/contrib/python/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/python/._index.html b/typo3/contrib/codemirror/contrib/python/._index.html
deleted file mode 100644 (file)
index 7e5844d..0000000
Binary files a/typo3/contrib/codemirror/contrib/python/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/scheme/._LICENSE b/typo3/contrib/codemirror/contrib/scheme/._LICENSE
deleted file mode 100644 (file)
index 14db923..0000000
Binary files a/typo3/contrib/codemirror/contrib/scheme/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/scheme/._index.html b/typo3/contrib/codemirror/contrib/scheme/._index.html
deleted file mode 100644 (file)
index b4ab44e..0000000
Binary files a/typo3/contrib/codemirror/contrib/scheme/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/scheme/css/._schemecolors.css b/typo3/contrib/codemirror/contrib/scheme/css/._schemecolors.css
deleted file mode 100644 (file)
index 0b046fa..0000000
Binary files a/typo3/contrib/codemirror/contrib/scheme/css/._schemecolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/scheme/js/._parsescheme.js b/typo3/contrib/codemirror/contrib/scheme/js/._parsescheme.js
deleted file mode 100644 (file)
index a9e7793..0000000
Binary files a/typo3/contrib/codemirror/contrib/scheme/js/._parsescheme.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/scheme/js/._tokenizescheme.js b/typo3/contrib/codemirror/contrib/scheme/js/._tokenizescheme.js
deleted file mode 100644 (file)
index 4452413..0000000
Binary files a/typo3/contrib/codemirror/contrib/scheme/js/._tokenizescheme.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/scheme/js/parsescheme.js b/typo3/contrib/codemirror/contrib/scheme/js/parsescheme.js
deleted file mode 100644 (file)
index 6b1ffba..0000000
+++ /dev/null
@@ -1,428 +0,0 @@
-var SchemeParser = Editor.Parser = (function() {
-
-
-    // isLparen: char -> boolean
-    var isLparen = function(ch) {
-       return ch === '(' || ch === '[' || ch === '{';
-    };
-
-    // isRparen: char -> boolean
-    var isRparen = function(ch) {
-       return ch === ')' || ch === ']' || ch === '}';
-    };
-
-    // isMatchingParens: char char -> boolean
-    var isMatchingParens = function(lparen, rparen) {
-       return ((lparen === '(' && rparen === ')') ||
-               (lparen === '[' && rparen === ']') ||
-               (lparen === '{' && rparen === '}'));
-    };
-
-
-    // Compute the indentation context enclosing the end of the token
-    // sequence tokens.
-    // The context is the token sequence of the enclosing s-expression,
-    // augmented with column information.
-    var getIndentationContext = function(tokenStack) {
-       var EMPTY_CONTEXT = [];
-
-       var pendingParens = [], i = 0, j, line, column, context;
-       var tokens = [];
-
-       // Scan for the start of the indentation context, accumulating tokens.
-       while (! isEmptyPair(tokenStack)) {
-           i++;
-           tokens.push(pairFirst(tokenStack));
-           if (isLparen(pairFirst(tokenStack).type)) {
-               if (pendingParens.length === 0) {
-                   break;
-               } else {
-                   if (isMatchingParens(pairFirst(tokenStack).value,
-                                        pendingParens[pendingParens.length - 1])) {
-                       pendingParens.pop();
-                   } else {
-                       // Error condition: we see mismatching parens,
-                       // so we exit with no known indentation context.
-                       return EMPTY_CONTEXT;
-                   }
-               }
-           } else if (isRparen(pairFirst(tokenStack).type))  {
-               pendingParens.push(pairFirst(tokenStack).type);
-           }
-           tokenStack = pairRest(tokenStack);
-       }
-
-       // If we scanned backward too far, we couldn't find a context.  Just
-       // return the empty context.
-       if (isEmptyPair(tokenStack)) { 
-           return EMPTY_CONTEXT; 
-       }
-
-       // Position tokenStack to the next token beyond.
-       tokenStack = pairRest(tokenStack);
-
-       // We now scan backwards to closest newline to figure out the column
-       // number:
-       while (! isEmptyPair(tokenStack)) {
-           if(pairFirst(tokenStack).type === 'whitespace' && 
-              pairFirst(tokenStack).value === '\n') {
-               break;
-           }
-           tokens.push(pairFirst(tokenStack));
-           tokenStack = pairRest(tokenStack);
-       }
-
-       line = 0;
-       column = 0;
-       context = [];
-       // Start generating the context, walking forward.
-       for (j = tokens.length-1; j >= 0; j--) {
-           if (j < i) {
-               context.push({ type: tokens[j].type,
-                              value: tokens[j].value,
-                              line: line,
-                              column: column });
-           }
-
-           if (tokens[j].type === 'whitespace' && 
-               tokens[j].value === '\n') {
-               column = 0;
-               line++;
-           } else {
-               column += tokens[j].value.length;
-           }
-       }
-       return context;
-
-
-    };
-
-
-
-
-
-    // calculateIndentationFromContext: indentation-context number -> number
-    var calculateIndentationFromContext = function(context, currentIndentation) {
-       if (context.length === 0) {
-           return 0;
-       }
-       if (isBeginLikeContext(context)) {
-           return beginLikeIndentation(context);
-       }
-       if (isDefineLikeContext(context)) {
-           return defineLikeIndentation(context);
-       }
-       if (isLambdaLikeContext(context)) {
-           return lambdaLikeIndentation(context);
-       }
-       return beginLikeIndentation(context, 0);
-    };
-
-
-
-    // findContextElement: indentation-context number -> index or -1
-    var findContextElement = function(context, index) {
-       var depth = 0;
-       for(var i = 0; i < context.length; i++) {
-           if (context[i].type !== 'whitespace' && depth === 1) {
-               if (index === 0)
-                   return i;
-               else
-                   index--;
-           }
-
-           if (isLparen(context[i].type)) {
-               depth++;
-           }
-           if (isRparen(context[i].type)) {
-               depth = Math.max(depth - 1, 0);
-           }
-       }
-       return -1;
-    };
-
-    // contextElement: context -> (arrayof index)
-    var contextElements = function(context) {
-       var i = 0, index, results = [];
-       
-       while ((index = findContextElement(context, i++)) != -1) {
-           results.push(index);
-       }
-       return results;
-    };
-
-
-
-    //////////////////////////////////////////////////////////////////////
-
-    var BEGIN_LIKE_KEYWORDS = ["case-lambda", 
-                              "compound-unit",
-                              "compound-unit/sig",
-                              "cond",
-                              "delay",
-                              "inherit",
-                              "match-lambda",
-                              "match-lambda*",
-                              "override",
-                              "private",
-                              "public",
-                              "sequence",
-                              "unit"];
-
-    var isBeginLikeContext = function(context) {
-       var j = findContextElement(context, 0);
-       if (j === -1) { return false; }
-       return (/^begin/.test(context[j].value) ||
-               isMember(context[j].value, BEGIN_LIKE_KEYWORDS));
-    };
-
-
-    // Begin: if there's no elements within the begin context,
-    // the indentation is that of the begin keyword's column + offset.
-    // Otherwise, find the leading element on the last line.
-    // Also used for default indentation.
-    var beginLikeIndentation = function(context, offset) {
-       if (typeof(offset) === 'undefined') { offset = 1; }
-
-       var indices = contextElements(context), j;
-       if (indices.length === 0) {
-           return context[0].column + 1;
-       } else if (indices.length === 1) {
-           // if we only see the begin keyword, indentation is based
-           // off the keyword.
-           return context[indices[0]].column + offset;
-       } else {
-           // Otherwise, we scan for the contextElement of the last line
-           for (j = indices.length -1; j > 1; j--) {
-               if (context[indices[j]].line !==
-                   context[indices[j-1]].line) {
-                   return context[indices[j]].column;
-               }
-           }
-           return context[indices[j]].column;
-       }
-    };
-
-
-
-    //////////////////////////////////////////////////////////////////////
-
-
-    var DEFINE_LIKE_KEYWORDS = ["local"];
-
-    var isDefineLikeContext = function(context) {
-       var j = findContextElement(context, 0);
-       if (j === -1) { return false; }
-       return (/^def/.test(context[j].value) ||
-               isMember(context[j].value, DEFINE_LIKE_KEYWORDS));
-    };
-
-
-    var defineLikeIndentation = function(context) {
-       var i = findContextElement(context, 0);
-       if (i === -1) { return 0; }
-       return context[i].column +1; 
-    };
-
-    //////////////////////////////////////////////////////////////////////
-
-    var LAMBDA_LIKE_KEYWORDS = ["cases",
-                               "instantiate",
-                               "super-instantiate",
-                               "syntax/loc",
-                               "quasisyntax/loc",
-                               "lambda",
-                               "let",
-                               "let*",
-                               "letrec",
-                               "recur",
-                               "lambda/kw",
-                               "letrec-values",
-                               "with-syntax",
-                               "with-continuation-mark",
-                               "module",
-                               "match",
-                               "match-let",
-                               "match-let*",
-                               "match-letrec",
-                               "let/cc",
-                               "let/ec",
-                               "letcc",
-                               "catch",
-                               "let-syntax",
-                               "letrec-syntax",
-                               "fluid-let-syntax",
-                               "letrec-syntaxes+values",
-                               "for",
-                               "for/list",
-                               "for/hash",
-                               "for/hasheq",
-                               "for/and",
-                               "for/or",
-                               "for/lists",
-                               "for/first",
-                               "for/last",
-                               "for/fold",
-                               "for*",
-                               "for*/list",
-                               "for*/hash",
-                               "for*/hasheq",
-                               "for*/and",
-                               "for*/or",
-                               "for*/lists",
-                               "for*/first",
-                               "for*/last",
-                               "for*/fold",
-                               "kernel-syntax-case",
-                               "syntax-case",
-                               "syntax-case*",
-                               "syntax-rules",
-                               "syntax-id-rules",
-                               "let-signature",
-                               "fluid-let",
-                               "let-struct",
-                               "let-macro",
-                               "let-values",
-                               "let*-values",
-                               "case",
-                               "when",
-                               "unless",
-                               "let-enumerate",
-                               "class",
-                               "class*",
-                               "class-asi",
-                               "class-asi*",
-                               "class*/names",
-                               "class100",
-                               "class100*",
-                               "class100-asi",
-                               "class100-asi*",
-                               "class100*/names",
-                               "rec",
-                               "make-object",
-                               "mixin",
-                               "define-some",
-                               "do",
-                               "opt-lambda",
-                               "send*",
-                               "with-method",
-                               "define-record",
-                               "catch",
-                               "shared",
-                               "unit/sig",
-                               "unit/lang",
-                               "with-handlers",
-                               "interface",
-                               "parameterize",
-                               "call-with-input-file",
-                               "call-with-input-file*",
-                               "with-input-from-file",
-                               "with-input-from-port",
-                               "call-with-output-file",
-                               "with-output-to-file",
-                               "with-output-to-port",
-                               "for-all"];
-
-
-    var isLambdaLikeContext = function(context) {
-       var j = findContextElement(context, 0);
-       if (j === -1) { return false; }
-       return (isMember(context[j].value, LAMBDA_LIKE_KEYWORDS));
-    };
-
-
-    var lambdaLikeIndentation = function(context) {
-       var i = findContextElement(context, 0);
-       if (i === -1) { return 0; }
-       var j = findContextElement(context, 1);
-       if (j === -1) { 
-           return context[i].column + 4; 
-       } else {
-           return context[i].column + 1;
-       }
-    };
-
-
-
-
-    //////////////////////////////////////////////////////////////////////
-    // Helpers
-    var isMember = function(x, l) {
-       for (var i = 0; i < l.length; i++) {
-           if (x === l[i]) { return true; }
-       }
-       return false;
-    };
-
-
-
-    //////////////////////////////////////////////////////////////////////
-
-    var pair = function(x, y) {
-       return [x,y];
-    };
-    var EMPTY_PAIR = [];
-    var pairFirst = function(p) { return p[0]; }
-    var pairRest = function(p) { return p[1]; }
-    var isEmptyPair = function(p) { return p === EMPTY_PAIR; }
-    var pairLength = function(p) {
-       var l = 0;
-       while (! isEmptyPair(p)) {
-           p = pairRest(p);
-       }
-       return l;
-    };
-
-    //////////////////////////////////////////////////////////////////////
-
-
-
-
-    var indentTo = function(tokenStack) {
-       return function(tokenText, currentIndentation, direction) {
-
-           // If we're in the middle of an unclosed token,
-           // do not change indentation.
-           if ((! isEmptyPair(tokenStack)) &&
-               (! isEmptyPair(pairRest(tokenStack))) &&
-               (pairFirst(pairRest(tokenStack)).isUnclosed)) {
-               return currentIndentation;
-           }
-
-           var indentationContext = 
-               getIndentationContext(tokenStack);
-           return calculateIndentationFromContext(indentationContext,
-                                                  currentIndentation);         
-       };
-    };
-
-
-    var startParse = function(source) {
-       source = tokenizeScheme(source);        
-       var tokenStack = EMPTY_PAIR;
-       var iter = {
-           next: function() {
-               var tok = source.next();
-               tokenStack = pair(tok, tokenStack);
-               if (tok.type === "whitespace") {
-                   if (tok.value === "\n") {
-                       tok.indentation = indentTo(tokenStack);
-                   }
-               }
-               return tok;
-           },
-
-           copy: function() {
-               var _tokenStack = tokenStack;
-               var _tokenState = source.state;
-               return function(_source) {
-                   tokenStack = _tokenStack;
-                   source = tokenizeScheme(_source, _tokenState);
-                   return iter;
-               };
-           }
-       };
-       return iter;
-    };
-    return { make: startParse };
-})();
diff --git a/typo3/contrib/codemirror/contrib/scheme/js/tokenizescheme.js b/typo3/contrib/codemirror/contrib/scheme/js/tokenizescheme.js
deleted file mode 100644 (file)
index e07d975..0000000
+++ /dev/null
@@ -1,261 +0,0 @@
-/* Tokenizer for Scheme code */
-
-
-
-
-/**
-  TODO: follow the definitions in:
-
-      http://docs.racket-lang.org/reference/reader.html
-
-  to the letter; at the moment, we've just done something quick-and-dirty.
-
-*/
-
-
-var tokenizeScheme = (function() {
-    var isWhiteSpace = function(ch) {
-       // The messy regexp is because IE's regexp matcher is of the
-       // opinion that non-breaking spaces are no whitespace.
-       return ch != "\n" && /^[\s\u00a0]*$/.test(ch);
-    };
-
-
-    // scanUntilUnescaped: string-stream char -> boolean
-    // Advances the stream until the given character (not preceded by a
-    // backslash) is encountered.
-    // Returns true if we hit end of line without closing.
-    // Returns false otherwise.
-    var scanUntilUnescaped = function(source, end) {
-       var escaped = false;
-       while (true) {
-           if (source.endOfLine()) {
-               return true;
-           }
-           var next = source.next();
-           if (next == end && !escaped)
-               return false;
-           escaped = !escaped && next == "\\";
-       }
-       return false;
-    }
-    
-
-    // Advance the stream until endline.
-    var scanUntilEndline = function(source, end) {
-       while (!source.endOfLine()) {
-           source.next();
-       }
-    }
-
-    
-    // Some helper regexps
-    var isHexDigit = /[0-9A-Fa-f]/;
-    
-
-    var whitespaceChar = new RegExp("[\\s\\u00a0]");
-    
-    var isDelimiterChar = 
-       new RegExp("[\\s\\\(\\\)\\\[\\\]\\\{\\\}\\\"\\\,\\\'\\\`\\\;]");
-
-    var isNotDelimiterChar = 
-       new RegExp("[^\\s\\\(\\\)\\\[\\\]\\\{\\\}\\\"\\\,\\\'\\\`\\\;]");
-
-
-    var numberHeader = ("(?:(?:\\d+\\/\\d+)|"+
-                       (  "(?:(?:\\d+\\.\\d+|\\d+\\.|\\.\\d+)(?:[eE][+\\-]?\\d+)?)|")+
-                       (  "(?:\\d+(?:[eE][+\\-]?\\d+)?))"));
-    var numberPatterns = [
-       // complex numbers
-       new RegExp("^((?:(?:\\#[ei])?[+\\-]?" + numberHeader +")?"
-                  + "(?:[+\\-]" + numberHeader + ")i$)"),
-           /^((?:\#[ei])?[+-]inf.0)$/,
-           /^((?:\#[ei])?[+-]nan.0)$/,
-       new RegExp("^((?:\\#[ei])?[+\\-]?" + numberHeader + "$)"),
-       new RegExp("^0[xX][0-9A-Fa-f]+$")];
-   
-
-    // looksLikeNumber: string -> boolean
-    // Returns true if string s looks like a number.
-    var looksLikeNumber = function(s) {
-       for (var i = 0; i < numberPatterns.length; i++) {
-           if (numberPatterns[i].test(s)) {
-               return true;
-           }
-       }
-       return false;
-    };
-
-
-
-    var UNCLOSED_STRING = function(source, setState) {
-       var readNewline = function() {
-           var content = source.get();
-           return { type:'whitespace', style:'whitespace', content: content };
-       };
-
-       var ch = source.peek();
-       if (ch === '\n') {
-           source.next();
-           return readNewline();
-       } else {
-           var isUnclosedString = scanUntilUnescaped(source, '"');
-           if (isUnclosedString) {
-               setState(UNCLOSED_STRING);
-           } else {
-               setState(START);
-           }
-           var content = source.get();
-           return {type: "string", style: "scheme-string", content: content,
-                   isUnclosed: isUnclosedString};
-       }
-    };
-
-
-
-    var START = function(source, setState) {
-       var readHexNumber = function(){
-           source.next(); // skip the 'x'
-           source.nextWhileMatches(isHexDigit);
-           return {type: "number", style: "scheme-number"};
-       };
-
-
-       var readNumber = function() {
-           scanSimpleNumber();
-           if (source.equals("-") || source.equals("+")) {
-               source.next();
-           }
-           scanSimpleNumber();
-           if (source.equals("i")) {
-               source.next();
-           }
-           return {type: "number", style: "scheme-number"};
-       };
-
-
-       // Read a word, look it up in keywords. If not found, it is a
-       // variable, otherwise it is a keyword of the type found.
-       var readWordOrNumber = function() {
-           source.nextWhileMatches(isNotDelimiterChar);
-           var word = source.get();
-           if (looksLikeNumber(word)) {
-               return {type: "number", style: "scheme-number", content: word};
-           } else {
-               return {type: "variable", style: "scheme-symbol", content: word};
-           }
-       };
-
-
-       var readString = function(quote) {
-           var isUnclosedString = scanUntilUnescaped(source, quote);
-           if (isUnclosedString) {
-               setState(UNCLOSED_STRING);
-           }
-           var word = source.get();
-           return {type: "string", style: "scheme-string", content: word,
-                   isUnclosed: isUnclosedString};
-       };
-
-
-       var readPound = function() {
-           var text;
-           // FIXME: handle special things here
-           if (source.equals(";")) {
-               source.next();
-               text = source.get();
-               return {type: text, 
-                       style:"scheme-symbol",
-                       content: text};
-           } else {
-               text = source.get();
-
-               return {type : "symbol",
-                       style: "scheme-symbol",
-                       content: text};
-           }
-
-       };
-       
-       var readLineComment = function() {
-           scanUntilEndline(source);
-           var text = source.get();
-           return { type: "comment", style: "scheme-comment", content: text};  
-       };
-
-
-       var readWhitespace = function() {
-           source.nextWhile(isWhiteSpace);
-           var content = source.get();
-           return { type: 'whitespace', style:'whitespace', content: content };
-       };
-
-       var readNewline = function() {
-           var content = source.get();
-           return { type:'whitespace', style:'whitespace', content: content };
-       };
-
-
-       // Fetch the next token. Dispatches on first character in the
-       // stream, or first two characters when the first is a slash.
-       var ch = source.next();
-       if (ch === '\n') {
-           return readNewline();
-       } else if (whitespaceChar.test(ch)) {
-           return readWhitespace();
-       } else if (ch === "#") {
-           return readPound();
-       } else if (ch ===';') {
-           return readLineComment();
-       } else if (ch === "\"") {
-           return readString(ch);
-       } else if (isDelimiterChar.test(ch)) {
-           return {type: ch, style: "scheme-punctuation"};
-       } else {
-           return readWordOrNumber();
-       }
-    }
-
-
-
-
-
-
-
-    var makeTokenizer = function(source, state) {
-       // Newlines are always a separate token.
-
-       var tokenizer = {
-           state: state,
-
-           take: function(type) {
-               if (typeof(type) == "string")
-                   type = {style: type, type: type};
-
-               type.content = (type.content || "") + source.get();
-               type.value = type.content;
-               return type;
-           },
-
-           next: function () {
-               if (!source.more()) throw StopIteration;
-
-               var type;
-               while (!type) {
-                   type = tokenizer.state(source, function(s) {
-                       tokenizer.state = s;
-                   });
-               }
-               var result = this.take(type);
-               return result;              
-           }
-       };
-       return tokenizer;
-    };
-
-
-    // The external interface to the tokenizer.
-    return function(source, startState) {
-       return makeTokenizer(source, startState || START);
-    };
-})();
diff --git a/typo3/contrib/codemirror/contrib/sql/._LICENSE b/typo3/contrib/codemirror/contrib/sql/._LICENSE
deleted file mode 100644 (file)
index 8961506..0000000
Binary files a/typo3/contrib/codemirror/contrib/sql/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/sql/._index.html b/typo3/contrib/codemirror/contrib/sql/._index.html
deleted file mode 100644 (file)
index 5282b4c..0000000
Binary files a/typo3/contrib/codemirror/contrib/sql/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/sql/css/._sqlcolors.css b/typo3/contrib/codemirror/contrib/sql/css/._sqlcolors.css
deleted file mode 100644 (file)
index 01812e2..0000000
Binary files a/typo3/contrib/codemirror/contrib/sql/css/._sqlcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/sql/js/._parsesql.js b/typo3/contrib/codemirror/contrib/sql/js/._parsesql.js
deleted file mode 100644 (file)
index fc7c15d..0000000
Binary files a/typo3/contrib/codemirror/contrib/sql/js/._parsesql.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/._LICENSE b/typo3/contrib/codemirror/contrib/xquery/._LICENSE
deleted file mode 100644 (file)
index 2da4633..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/._LICENSE and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/._index.html b/typo3/contrib/codemirror/contrib/xquery/._index.html
deleted file mode 100644 (file)
index 9e9b48a..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/LICENSE b/typo3/contrib/codemirror/contrib/xquery/LICENSE
deleted file mode 100644 (file)
index dd8e3e8..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-Copyright 2010 Mike Brevoort
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
diff --git a/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors-dark.css b/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors-dark.css
deleted file mode 100644 (file)
index c726056..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors-dark.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors.css b/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors.css
deleted file mode 100644 (file)
index 61f3275..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors2.css b/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors2.css
deleted file mode 100644 (file)
index 74abec0..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/css/._xqcolors2.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/css/xqcolors-dark.css b/typo3/contrib/codemirror/contrib/xquery/css/xqcolors-dark.css
deleted file mode 100644 (file)
index 97e5383..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-
-.editbox {
-  margin: .4em;
-  padding: 0;
-  font-family: monospace;
-  font-size: 10pt;
-  color: white;
-  background-color: black;
-  line-height: 16px;
-}
-
-span.word {
-    color:white;
-}
-
-span.xqueryKeyword {
-  color: #ffbd40; 
-  /* font-weight: bold; */
-}
-
-span.xqueryComment {
-  color: #CDCDCD;
-  font-style:italic;
-}
-
-span.xqueryModifier {
-color:#6c8cd5;
-  font-weight: bold;
-}
-
-span.xqueryType {
-  color:#6c8cd5;
-  font-weight: bold;
-}
-
-span.xqueryAtom {
-  color:#6c8cd5;
-  font-weight: bold;  
-}
-
-span.xqueryString {
-  color: #9fee00;
-}
-
-span.xqueryRegexp {
-  color: rgb(128,0,64);
-}
-
-span.xqueryNumber {
-  color: rgb(255,0,0); 
-}
-
-span.xqueryVariable {
-
-}
-
-span.xqueryFunction {
-    color:#FFF700;
-}
-
-span.xqueryLocalvariable {
-    color: white;
-}
-
-span.xqueryProperty
-{
-  color: white;
-}
-
-span.xqueryOperator {
-  color: orange;
-}
-
-span.xqueryPunctuation {
-    color: white;
-}
-
-span.xquery-doc-directive {
-    color: white; 
-}
-
-span.xml-tagname {
-    color: #ffbd40; ;
-}
-
-span.xml-attribute {
-    color: #FFF700;
-}
-
-span.xml-attribute-value {
-    color: #FFF700;
-    font-style:italic;
-}
\ No newline at end of file
diff --git a/typo3/contrib/codemirror/contrib/xquery/css/xqcolors.css b/typo3/contrib/codemirror/contrib/xquery/css/xqcolors.css
deleted file mode 100644 (file)
index 058c181..0000000
+++ /dev/null
@@ -1,99 +0,0 @@
-/*
-Copyright 2010 Mike Brevoort http://mike.brevoort.com (twitter:@mbrevoort)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-This is an indirect collective derivative of the other parses in this package
-
-*/
-.editbox {
-  margin: .4em;
-  padding: 0;
-  font-family: monospace;
-  font-size: 10pt;
-  color: black;
-  background-color: white;
-  line-height: 16px;
-}
-
-span.word {
-}
-
-span.xqueryKeyword {
-  color: red; /* #1240AB; */
-  /* font-weight: bold; */
-}
-
-span.xqueryComment {
-  color: gray;
-  font-style: italic;
-}
-
-span.xqueryModifier {
-  color: rgb(0,102,153);
-  font-weight: bold;
-}
-
-span.xqueryType {
-  color: purple;
-  font-weight: bold;
-}
-
-span.xqueryAtom {
-  color: rgb(0,102,153);
-  font-weight: bold;  
-}
-
-span.xqueryString {
-  color: green;
-}
-
-span.xqueryRegexp {
-  color: rgb(128,0,64);
-}
-
-span.xqueryNumber {
-  color: #1240AB;
-}
-
-span.xqueryVariable {
-    /* color: red; */
-}
-
-span.xqueryFunction {
-    color: #1240AB;     
-    /* font-weight:bold; */ 
-}
-
-
-span.xqueryOperator {
-    color: red;
-}
-
-span.xqueryPunctuation {
-    color: DIMGray;
-}
-
-span.xml-tagname {
-    color: purple;
-}
-
-span.xml-attribute {
-    color: purple;
-    font-style:italic;
-}
-
-span.xml-attribute-value {
-    color: purple;
-    font-style:italic;
-}
\ No newline at end of file
diff --git a/typo3/contrib/codemirror/contrib/xquery/css/xqcolors2.css b/typo3/contrib/codemirror/contrib/xquery/css/xqcolors2.css
deleted file mode 100644 (file)
index accb7f7..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-Copyright 2010 Mike Brevoort http://mike.brevoort.com (twitter:@mbrevoort)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-This is an indirect collective derivative of the other parses in this package
-
-*/
-.editbox {
-  margin: .4em;
-  padding: 0;
-  font-family: monospace;
-  font-size: 10pt;
-  color: black;
-  background-color: white;
-  line-height: 16px;
-}
-
-span.word {
-}
-
-span.xqueryKeyword {
-  color: blue; 
-  /* font-weight: bold; */
-}
-
-span.xqueryComment {
-  color: gray;
-}
-
-span.xqueryModifier {
-  color: rgb(0,102,153);
-  font-weight: bold;
-}
-
-span.xqueryType {
-  color: rgb(0,135,255);
-  font-weight: bold;
-}
-
-span.xqueryAtom {
-  color: rgb(0,102,153);
-  font-weight: bold;  
-}
-
-span.xqueryString {
-  color: green;
-}
-
-span.xqueryRegexp {
-  color: rgb(128,0,64);
-}
-
-span.xqueryNumber {
-  color: rgb(255,0,0); 
-}
-
-span.xqueryVariable {
-    color: red;
-}
-
-span.xqueryFunction {
-    text-decoration:underline
-}
-
-
-span.xqueryOperator {
-    color: DimGray;
-}
-
-span.xqueryPunctuation {
-}
-
-span.xml-tagname {
-    color: purple;
-}
-
-span.xml-attribute {
-    color: purple;
-    font-style:italic;
-}
-
-span.xml-attribute-value {
-    color: purple;
-    font-style:italic;
-}
\ No newline at end of file
diff --git a/typo3/contrib/codemirror/contrib/xquery/index.html b/typo3/contrib/codemirror/contrib/xquery/index.html
deleted file mode 100644 (file)
index ba15392..0000000
+++ /dev/null
@@ -1,551 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="../../js/codemirror.js" type="text/javascript"></script>
-    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
-    <title>CodeMirror: XQuery highlighting demonstration</title>
-    <style type="text/css">
-      .CodeMirror-line-numbers {
-        width: 2.2em;
-        color: #aaa;
-        background-color: #eee;
-        text-align: right;
-        padding-right: .3em;
-        font-size: 10pt;
-        font-family: monospace;
-        padding-top: .4em;
-      }
-      body {
-          font-family: helvetica;
-          font-weight:bold;
-          max-width:4000px;
-      }
-      a {
-          color: #EB1D1D;
-          text-decoration: none;
-      }     
-      a:hover {
-          text-decoration: underline;
-      }
-      div.border {
-        border: 1px solid black;
-      }
-      .css-switch {
-          margin-right:15px;
-          padding-bottom:5px;
-      }
-    </style>
-  </head>
-  <body style="padding: 20px;">
-
-<div style="margin:auto; width:920px; border-width:1px;">
-<h2>XQuery Syntax Support for CodeMirror</h2>
-<p style="text-align: justify;  word-spacing: 3px;">This is a demonstration of the XQuery highlighting module
-for <a href="index.html">CodeMirror</a>. The formatting is CSS driven and very easy to customize to your liking.
-There are three sample styles sets below.
-You can edit or paste in any code below to give it a test run.
-</p>
-
-<a href="#" rel="xqcolors.css" class="css-switch">Light 1</a>  <a href="#" rel="xqcolors2.css" class="css-switch">Light 2</a> <a href="#" rel="xqcolors-dark.css" class="css-switch">Dark</a> 
-
-<div class="border">
-<textarea id="code" cols="120" rows="50">
-xquery version &quot;1.0-ml&quot;;
-(: this is
- : a 
-   "comment" :)
-let $let := &lt;x attr=&quot;value&quot;&gt;&quot;test&quot;&lt;/x&gt;
-let $joe:=1
-return element element {
-  attribute attribute { 1 },
-  element test { &#39;a&#39; }, 
-  attribute foo { &quot;bar&quot; },
-  fn:doc()[ foo/@bar eq $let ],
-  //x }    
-  
-  
-  module namespace comoms-dls = &quot;http://marklogic.com/comoms-dls&quot;;
-  import module namespace dls = &quot;http://marklogic.com/xdmp/dls&quot; at &quot;/MarkLogic/dls.xqy&quot;;
-  import module namespace comoms-util = &quot;http://marklogic.com/comoms-util&quot; at &quot;/lib/comoms-util.xqy&quot;;
-  import module namespace comoms-user = &quot;http://marklogic.com/comoms-user&quot; at &quot;/lib/comoms-user.xqy&quot;;
-
-
-
-
-  (:~
-   : Make a call to insert and Manage. This IS NOT DONE WITHIN AN EVAL becuase
-   : haven&#39;t figured out how to pass the permissions variable through to be bound
-   :)
-  declare function comoms-dls:insert($uri as xs:string, $doc as node(),  $note as xs:string){
-      let $log := xdmp:log(&quot;in comoms-dls:insert.&quot;)
-      let $collection := &quot;DRAFTS&quot;
-      let $permissions := (xdmp:permission(&#39;mkp-admin&#39;, &#39;update&#39;), xdmp:permission(&#39;mkp-admin&#39;, &#39;read&#39;)) 
-      return dls:document-insert-and-manage($uri, fn:false(), $doc, $note, $permissions, $collection)
-
-      (:
-      let $collection := &quot;DRAFTS&quot;
-      return
-          xdmp:eval(
-              fn:concat(
-                  comoms-dls:_import(), 
-                  &quot;
-                  declare variable $uri as xs:string external;
-                  declare variable $doc as node() external;
-                  declare variable $collection as xs:string external;
-                  declare variable $note as xs:string external;
-                  dls:document-insert-and-manage($uri, fn:true(), $doc, $note, 
-                      (xdmp:permission(&#39;mkp-anon&#39;, &#39;read&#39;), xdmp:permission(&#39;mkp-admin&#39;, &#39;update&#39;)) , $collection)
-                  &quot;
-              ),
-              (xs:QName(&quot;uri&quot;), $uri, xs:QName(&quot;doc&quot;), $doc, xs:QName(&quot;note&quot;), $note, xs:QName(&quot;collection&quot;), $collection)
-          )    
-      :)    
-
-  };
-
-
-
-  declare function comoms-dls:manage($uri, $manageNote){
-      let $log := xdmp:log(&quot;in comoms-dls:manage with note.&quot;)
-      return (
-          xdmp:eval(
-              fn:concat(
-                  comoms-dls:_import(), 
-                  &quot;
-                  declare variable $uri as xs:string external;
-                  declare variable $manageNote as xs:string external;
-                  dls:document-manage($uri, fn:false(), $manageNote)
-                  &quot;
-              ),
-              (xs:QName(&quot;uri&quot;), $uri, xs:QName(&quot;manageNote&quot;), $manageNote)
-          )
-      )    
-  };
-
-  declare function comoms-dls:update($uri as xs:string, $doc as node(), $note as xs:string){
-
-      xdmp:eval(
-          fn:concat(
-              comoms-dls:_import(), 
-              &quot;
-              declare variable $uri as xs:string external;
-              declare variable $doc as node() external;
-              declare variable $note as xs:string external;
-              dls:document-update($uri, $doc, $note, fn:true(), (xdmp:permission(&#39;mkp-admin&#39;, &#39;update&#39;), xdmp:permission(&#39;mkp-admin&#39;, &#39;read&#39;)) )
-              &quot;
-          ),
-          (xs:QName(&quot;uri&quot;), $uri, xs:QName(&quot;doc&quot;), $doc, xs:QName(&quot;note&quot;), $note)
-      )
-
-  };
-
-
-  declare function comoms-dls:manage($uri){
-      let $log := xdmp:log(&quot;in comoms-dls:manage without note.&quot;)
-      return (xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-manage(&#39;&quot;, $uri, &quot;&#39;, fn:false())&quot;))
-      )
-  };
-
-  declare function comoms-dls:unmanageAndDelete($uris){
-      for $uri in $uris
-      let $unpublish := (xdmp:eval(
-          fn:concat(comoms-dls:_import(), 
-              &quot;import module namespace comoms-dls = &#39;http://marklogic.com/comoms-dls&#39; at &#39;/lib/comoms-dls.xqy&#39;; comoms-dls:unpublish(&#39;&quot;, 
-              $uri, &quot;&#39;)&quot;)))
-      let $unmanage :=  (xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-unmanage(&#39;&quot;, $uri, &quot;&#39;, fn:false(), fn:true())&quot;))
-      )
-      return
-          xdmp:document-delete($uri)
-  };
-
-
-  declare function comoms-dls:checkout($uri) {
-      xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-checkout(&#39;&quot;, $uri, &quot;&#39;, fn:false())&quot;))
-  }; 
-
-  declare function comoms-dls:checkin($uri) {
-      xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-checkin(&#39;&quot;, $uri, &quot;&#39;, fn:false())&quot;))
-  }; 
-
-
-  declare function comoms-dls:add($uri) {
-      xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-manage(&#39;&quot;, $uri, &quot;&#39;, fn:false())&quot;)
-      )    
-  }; 
-
-
-  declare function comoms-dls:documentHistory($uri) {
-      xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-history(&#39;&quot;, $uri, &quot;&#39;)&quot;)
-      )
-  };
-
-  declare function comoms-dls:checkoutStatus($uri) {
-      xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;dls:document-checkout-status(&#39;&quot;, $uri, &quot;&#39;)&quot;)
-      )
-  };
-
-  (:~
-   : call fn:doc but wrapped in an eval 
-   :)
-  declare function comoms-dls:docInEval($uri) {
-      xdmp:eval(
-          fn:concat(comoms-dls:_import(), &quot;fn:doc(&#39;&quot;, $uri, &quot;&#39;)&quot;)
-      )
-  };
-
-  (: ########################################################################### :)
-  (: PUBLISHING FUNCTIONS :)
-  (: ########################################################################### :)
-
-  (:~
-   : Given a sequence of version URIs, publish all of these versions of each document
-   : If there is a version of the same document already published, unpublish it 1st
-   : 
-   : When &quot;publish&quot; is referred to, we mean that it is put into the PUBLISHED collection
-   : unpublish removes content from this collection
-   : @param $version_uris - sequence of uris of versions of managed documents to publish
-   :)
-  declare function comoms-dls:publish($version_uris as item()*) {
-      for $uri in $version_uris
-      let $doc := fn:doc($uri)
-      let $managed_base_uri := $doc/node()/property::dls:version/dls:document-uri/text()
-      let $existing :=  comoms-dls:publishedDoc($managed_base_uri)
-      let $unpublishExisting := if($existing) then comoms-dls:unpublishVersion((xdmp:node-uri($existing)))  else ()
-      let $addPermissions := dls:document-add-permissions($uri, (xdmp:permission(&#39;mkp-anon&#39;, &#39;read&#39;)))
-      return
-          dls:document-add-collections($uri, (&quot;PUBLISHED&quot;))    
-  };
-
-  declare function comoms-dls:publishLatest($uri) {
-      (: TODO check if it&#39;s in the draft collection probably :)
-
-      let $latest_version_uri := comoms-dls:latestVersionUri($uri)
-      let $log:= xdmp:log(fn:concat(&quot;latest: &quot;, $latest_version_uri))    
-      let $log:= xdmp:log(fn:concat(&quot;uri: &quot;, $uri))            
-      return comoms-dls:publish($latest_version_uri)    
-
-  };
-
-  declare function comoms-dls:latestVersionUri($uri) {
-      let $latest_version_num :=
-          (
-          for $version in dls:document-history($uri)/dls:version
-          order by fn:number($version//dls:version-id/text()) descending
-          return $version//dls:version-id/text()
-          )[1]
-
-
-      return dls:document-version-uri($uri, $latest_version_num)
-  };
-
-  declare function comoms-dls:unpublish($uris as item()*) {
-      for $uri in $uris
-      return
-          let $published_doc := comoms-dls:publishedDoc($uri)
-          return
-              if($published_doc) then
-                  let $published_version_uri := xdmp:node-uri($published_doc)
-                  return comoms-dls:unpublishVersion($published_version_uri)        
-              else
-                  ()
-  };
-
-  declare function comoms-dls:latestPublishedDocAuthor($uri) {
-      let $author_id := doc($uri)/property::dls:version/dls:author/text()
-      return
-          if($author_id) then
-              comoms-user:getUsername($author_id)
-          else 
-              ()
-
-  };
-
-  (:~
-   : Given a sequence of version URIs, unpublish all of these versions of each document
-   :)
-  declare function comoms-dls:unpublishVersion($version_uris as item()*) {
-      for $uri in $version_uris
-      return
-          let $removePermissions := dls:document-remove-permissions($uri, (xdmp:permission(&#39;mkp-anon&#39;, &#39;read&#39;)))
-          return dls:document-remove-collections($uri, (&quot;PUBLISHED&quot;))        
-  };
-
-  (:~
-   : Given the base URI of a managed piece of content, return the document of the node
-   : of the version that is published
-   :)
-  declare function comoms-dls:publishedDoc($uri) {
-      fn:collection(&quot;PUBLISHED&quot;)[property::dls:version/dls:document-uri = $uri] 
-  };
-
-
-  (:~
-   : Test if any version of the managed document is published
-   :)
-  declare function comoms-dls:isPublished($uri) {
-      if( comoms-dls:publishedDoc($uri)) then
-          fn:true()
-      else
-          fn:false()
-  };
-
-
-  declare function comoms-dls:publishedState($uri) {
-      let $doc := comoms-dls:publishedDoc($uri)
-      let $published_uri := if($doc) then xdmp:node-uri($doc) else ()
-      let $latest := comoms-dls:latestVersionUri($uri)
-      return
-          if($doc) then
-              if($latest ne $published_uri) then
-                  &quot;stale&quot;
-              else
-                  &quot;published&quot;
-          else
-              &quot;unpublished&quot;
-  };
-
-
-  declare function comoms-dls:getManagedDocUri($uri) {
-      let $doc := fn:doc($uri)
-      let $managed_uri := $doc/property::dls:version/dls:document-uri/text()
-      let $managed_uri := if($managed_uri) then $managed_uri else $uri
-      return $managed_uri
-  };
-
-  (:~
-   : Given a manage content url (e.g. /content/123456.xml) return the appropriate
-   : version of the document based on what stage collection is being viewed and 
-   : what&#39;s published
-   :
-   : @param $uri a manage content url (e.g. /content/123456.xml) - NOT A VERSIONED URI
-   :)
-  declare function comoms-dls:doc($uri) {
-      let $doc := fn:root(comoms-dls:collection()[property::dls:version/dls:document-uri = $uri][1])
-      return
-          if($doc) then 
-              $doc 
-          else 
-              let $managedDocInCollection := comoms-dls:collection-name() = xdmp:document-get-collections($uri)
-              return
-                  if($managedDocInCollection) then
-                      fn:doc($uri)
-                  else
-                      ()
-  };
-
-  (:~ 
-   : Get the collection to be used when querying for content
-   : THIS or comoms-dls:collection-name() SHOULD BE USED WHEN BUILDING ANY QUERY FOR MANAGED CONTENT
-   :)
-  declare function comoms-dls:collection()  {
-      fn:collection( comoms-dls:collection-name() )
-  };
-
-  (:~ 
-   : Get the collection nameto be used when querying for content
-   : THIS or comoms-dls:collection() SHOULD BE USED WHEN BUILDING ANY QUERY FOR MANAGED CONTENT 
-   :)
-  declare function comoms-dls:collection-name() as xs:string {
-      let $default_collection := &quot;PUBLISHED&quot;
-      return
-          if(comoms-user:isAdmin()) then 
-              let $pub_stage_collection_cookie := comoms-util:getCookie(&quot;COMOMS_COLLECTION&quot;)
-              return
-                  if($pub_stage_collection_cookie) then
-                      $pub_stage_collection_cookie
-                  else
-                      $default_collection
-          else
-              $default_collection
-  };
-
-  (:~
-   : Check if the published collection is being viewed
-   :)
-  declare function comoms-dls:isViewingPublished() {
-      if(comoms-dls:collection-name() = &quot;PUBLISHED&quot;) then
-          fn:true()
-      else
-          fn:false()
-  };
-
-  (:~
-   : Get the best URL for the content URI. 
-   : This is either the default URI based on detail type or should also take
-   : into account friendly urls and navigation structures to figure out the 
-   : best choice
-   :)
-  declare function comoms-dls:contentUrl($uri) {
-
-      (: TODO: add friendly URL and nav structure logic 1st :)
-
-      let $doc := fn:doc($uri)
-      let $managedDocUri := $doc/property::dls:version/dls:document-uri
-      let $uri := if($managedDocUri) then $managedDocUri else $uri
-      let $type := $doc/node()/fn:name()
-      let $content_id := fn:tokenize( fn:tokenize($uri, &quot;/&quot;)[3], &quot;\.&quot;)[1]
-      return
-          fn:concat(&quot;/&quot;, $type, &quot;/&quot;, $content_id)
-  };
-
-  (:
-   :
-   :  gets list of doc versions and uri. 
-   :
-   :)
-  declare function comoms-dls:versionHistory($uri) {
-      let $published_doc := comoms-dls:publishedDoc($uri)
-      let $published_uri := if($published_doc) then xdmp:node-uri($published_doc) else ()
-      return
-      &lt;versions&gt;
-          {
-          for $version in dls:document-history($uri)/dls:version
-            let $version_num := $version/dls:version-id/text()
-            let $created := $version/dls:created/text()
-            let $author_id := $version/dls:author/text()
-            let $author := comoms-user:getUsername($author_id)
-
-
-            let $note := $version/dls:annotation/text()
-            let $version_uri := xdmp:node-uri(dls:document-version($uri, $version_num))
-            let $published := $published_uri eq $version_uri
-            return 
-              &lt;version&gt;
-                  &lt;version-number&gt;{$version_num}&lt;/version-number&gt;
-                  &lt;created&gt;{$created}&lt;/created&gt;                
-                  &lt;author&gt;{$author}&lt;/author&gt;
-                  &lt;published&gt;{$published}&lt;/published&gt;
-                  &lt;version-uri&gt;{$version_uri}&lt;/version-uri&gt;
-              &lt;/version&gt;  
-          }        
-      &lt;/versions&gt;
-  };
-
-
-
-
-  (: ########################################################################### :)
-  (: PRIVATE FUNCTIONS :)
-  (: ########################################################################### :)
-
-  declare function comoms-dls:_import() {
-      &quot;xquery version &#39;1.0-ml&#39;;
-       import module namespace dls = &#39;http://marklogic.com/xdmp/dls&#39; at &#39;/MarkLogic/dls.xqy&#39;; &quot; 
-  };  
-  
-  (: CODE SAMPLE BELOW BORROWED FROM PARTICK WIED :)
-  declare function local:document-move-forest($uri as xs:string, $forest-ids as xs:unsignedLong*)
-  {
-    xdmp:document-insert(
-      $uri,
-      fn:doc($uri),
-      xdmp:document-get-permissions($uri),
-      xdmp:document-get-collections($uri),
-      xdmp:document-get-quality($uri),
-      $forest-ids
-    )
-  };
-
-  let $xml :=
-    &lt;xml att=&quot;blah&quot; att2=&quot;blah&quot;&gt;
-      sdasd&lt;b&gt;asdasd&lt;/b&gt;
-    &lt;/xml&gt;
-  (: -------- :)
-  for $d in fn:doc(&quot;depts.xml&quot;)/depts/deptno
-  let $e := fn:doc(&quot;emps.xml&quot;)/emps/emp[deptno = $d]
-  where fn:count($e) &gt;= 10
-  order by fn:avg($e/salary) descending
-  return
-     &lt;big-dept&gt;
-        {
-        $d,
-        &lt;headcount&gt;{fn:count($e)}&lt;/headcount&gt;,
-        &lt;avgsal&gt;{fn:avg($e/salary)}&lt;/avgsal&gt;
-        }
-     &lt;/big-dept&gt;
-  (: -------- :)
-  declare function local:depth($e as node()) as xs:integer
-  {
-     (: A node with no children has depth 1 :)
-     (: Otherwise, add 1 to max depth of children :)
-     if (fn:empty($e/*)) then 1
-     else fn:max(for $c in $e/* return local:depth($c)) + 1
-  };
-
-  local:depth(fn:doc(&quot;partlist.xml&quot;))
-
-  (: -------- :)
-  &lt;html&gt;&lt;head/&gt;&lt;body&gt;
-  {
-    for $act in doc(&quot;hamlet.xml&quot;)//ACT
-    let $speakers := distinct-values($act//SPEAKER)
-    return
-      &lt;div&gt;{ string($act/TITLE) }&lt;/h1&gt;
-        &lt;ul&gt;
-        {
-          for $speaker in $speakers
-          return &lt;li&gt;{ $speaker }&lt;/li&gt;
-        }
-        &lt;/ul&gt;
-      &lt;/div&gt;
-  }
-  &lt;/body&gt;&lt;/html&gt;
-  (: -------- :)
-  {
-          for $book in doc(&quot;books.xml&quot;)//book
-          return
-          if (contains($book/author/text(),&quot;Herbert&quot;) or contains($book/author/text(),&quot;Asimov&quot;))
-                  then $book
-          else $book/text()
-
-          let $let := &lt;x&gt;&quot;test&quot;&lt;/x&gt;
-          return element element {
-          attribute attribute { 1 },
-          element test { &#39;a&#39; },
-          attribute foo { &quot;bar&quot; },
-          fn:doc()[ foo/@bar eq $let ],
-          //x }
-  }
-  (: -------- :)
-  &lt;bib&gt;
-   {
-    for $b in doc(&quot;http://bstore1.example.com/bib.xml&quot;)/bib/book
-    where $b/publisher = &quot;Addison-Wesley&quot; and $b/@year &gt; 1991
-    return
-      &lt;book year=&quot;{ $b/@year }&quot;&gt;
-       { $b/title }
-      &lt;/book&gt;
-   }
-  &lt;/bib&gt;
-  (: -------- :)
-</textarea>
-</div>
-<div style="width:100%;text-align:center;padding-top:15px;">
-    Developed by <a href="http://mike.brevoort.com">Mike Brevoort</a> (<a href="http://twitter.com">@mbrevoort</a>) 
-    <br/><small><a href="http://www.apache.org/licenses/LICENSE-2.0.html">Apache License, Version 2.0</a></small></div>
-
-</div>
-<script type="text/javascript">
-  var editor = CodeMirror.fromTextArea('code', {
-    height: "550px",
-    parserfile: ["../contrib/xquery/js/tokenizexquery.js", "../contrib/xquery/js/parsexquery.js" ],
-    stylesheet: ["css/xqcolors.css"],
-    path: "../../js/",
-    continuousScanning: false, //500,
-    lineNumbers: true
-  });
-  
-  $(document).ready(function() {
-      $(".css-switch").click(function() {
-         editor.setStylesheet("css/" + $(this).attr("rel"));
-      });
-  });
-</script>
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/contrib/xquery/js/._parsexquery.js b/typo3/contrib/codemirror/contrib/xquery/js/._parsexquery.js
deleted file mode 100644 (file)
index d1dfe1c..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/js/._parsexquery.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/js/._tokenizexquery.js b/typo3/contrib/codemirror/contrib/xquery/js/._tokenizexquery.js
deleted file mode 100644 (file)
index ccd73aa..0000000
Binary files a/typo3/contrib/codemirror/contrib/xquery/js/._tokenizexquery.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/contrib/xquery/js/parsexquery.js b/typo3/contrib/codemirror/contrib/xquery/js/parsexquery.js
deleted file mode 100644 (file)
index 82e6718..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-/*
-Copyright 2010 Mike Brevoort http://mike.brevoort.com (twitter:@mbrevoort)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-This is an indirect collective derivative of the other parses in this package
-
-*/
-
-// The XQuery parser uses the xquery tokenizer in tokenizexquery.js. Given the
-// stream of tokens, it makes decisions to override the tokens styles by evaluating
-// it's context with respect to the other tokens. 
-
-var XqueryParser = Editor.Parser = (function() {
-    function xqueryLexical(startColumn, currentToken, align, previousToken, encloseLevel) {
-        this.startColumn = startColumn;
-        this.currentToken = currentToken;
-        if (align != null)
-        this.align = align;
-        this.previousToken = previousToken;
-        this.encloseLevel = encloseLevel;
-    }
-
-    // Xquery indentation rules.
-    function indentXquery(lexical) {
-        return function(firstChars, curIndent, direction) {
-            // test if this is next row after the open brace
-            if (lexical.encloseLevel !== 0 && firstChars === "}") {
-                return lexical.startColumn - indentUnit;
-            }
-
-            return lexical.startColumn;
-        };
-    }
-
-    function parseXquery(source) {
-        var tokens = tokenizeXquery(source);
-
-        var column = 0;
-        // tells the first non-whitespace symbol from the
-        // start of row.
-        var previousToken = null;
-        var previousTokens = [];
-        //mb
-        var align = false;
-        // tells if the text after the open brace
-        var encloseLevel = 0;
-        // tells curent opened braces quantity
-        var cc = [statements];
-        var consume,
-        marked;
-
-        var iter = {
-            next: function() {
-                var token = tokens.next();
-
-                // since attribute and elements can be named the same, assume the
-                // following word of each is a variable
-                if (previousToken && (previousToken.content == "attribute" || previousToken.content == "element") && previousToken.type == "xqueryKeywordC") {
-                    token.type = "variable";
-                    token.style = "xqueryVariable";
-                }
-
-                else if (previousToken && previousToken.content == "xquery" && token.content == "version") {
-                    //token.type="variable";
-                    token.style = "xqueryModifier";
-                }
-
-                else if (token.type == "word" && (getPrevious(3).style == "xml-attribute" || previousToken.type == "xml-tag-open") &&
-                previousToken.content.substring(previousToken.content.length - 1) != ">") {
-                    token.style = "xml-attribute";
-                }
-                else if (previousToken && previousToken.content == "=" && previousTokens.length > 2
-                && getPrevious(2).style == "xml-attribute") {
-                    token.style = "xml-attribute-value";
-                }
-                else if(token.type == "string" && previousToken.type == "}") {
-                    // looking for expressions within a string and detecting if the expression is within an attribute
-                    var i=0;
-                    while(i++ < previousTokens.length-1) {
-                        if(getPrevious(i).style == "xml-attribute-value" ) {
-                            token.style = "xml-attribute-value";
-                            break;
-                        } 
-                        else if(getPrevious(i).type == "string") {
-                            break;
-                        }                            
-                    }
-                }    
-                else if(token.type == "string") {
-                    // brute force check for strings inside XML TODO... something else
-                    var i=0;
-                    var closeCount = 0;
-                    while(i++ < previousTokens.length-1) {
-                        var prev = getPrevious(i);                  
-                        if(prev.type == "xml-tag-open") {
-                            if(closeCount == 0) {
-                                token.style = "word";
-                                break;
-                            } else {
-                                closeCount--;
-                            }
-                        }    
-                        else if(prev.type == "xml-tag-close") {
-                            closeCount++;
-                        }
-                        else if(prev.content == ":=" || prev.content == "return" || prev.content == "{")
-                            break;
-                    }
-                }
-                else if(getPrevious(2).content == "module" && getPrevious(1).content == "namespace") 
-                    token.style="xqueryFunction";
-                else if(token.content == "=" && getPrevious(1).style == "xml-attribute")
-                    token.style="xml-attribute"
-
-                if (token.type == "whitespace") {
-                    if (token.value == "\n") {
-                        // test if this is end of line
-                        if (previousToken !== null) {
-                            if (previousToken.type === "{") {
-                                // test if there is open brace at the end of line
-                                align = true;
-                                column += indentUnit;
-                                encloseLevel++;
-                            }
-                            else
-                            if (previousToken.type === "}") {
-                                // test if there is close brace at the end of line
-                                align = false;
-                                if (encloseLevel > 0) {
-                                    encloseLevel--;
-                                }
-                                else {
-                                    encloseLevel = 0;
-                                }
-                            }
-                            var lexical = new xqueryLexical(column, token, align, previousToken, encloseLevel);
-                            token.indentation = indentXquery(lexical);
-                        }
-                    }
-                    else
-                    column = token.value.length;
-                }
-
-                // maintain the previous tokens array so that it doesn't continue to leak
-                // keep only the last 5000
-                if(previousTokens.length > 5000) previousTokens.shift();
-
-                while (true) {
-                    consume = marked = false;
-                    // Take and execute the topmost action.
-                    cc.pop()(token.type, token.content);
-                    if (consume) {
-                        // Marked is used to change the style of the current token.
-                        if (marked)
-                        token.style = marked;
-                        // Here we differentiate between local and global variables.
-                        previousToken = token;
-                        previousTokens[previousTokens.length] = token;
-                        return token;
-                    }
-                }
-
-            },
-
-            copy: function() {
-                var _cc = cc.concat([]),
-                _tokenState = tokens.state,
-                _column = column;
-
-                return function copyParser(_source) {
-                    cc = _cc.concat([]);
-                    column = indented = _column;
-                    tokens = tokenizeXquery(_source, _tokenState);
-                    return iter;
-                };
-
-            },
-
-        };
-
-        function statements(type) {
-            return pass(statement, statements);
-        }
-
-        function statement(type) {
-            cont();
-        }
-
-        function push(fs) {
-            for (var i = fs.length - 1; i >= 0; i--)
-            cc.push(fs[i]);
-        }
-
-        function cont() {
-            push(arguments);
-            consume = true;
-        }
-
-        function pass() {
-            push(arguments);
-            consume = false;
-        }
-        
-
-        function getPrevious(numberFromCurrent) {
-            var l = previousTokens.length;
-            if (l - numberFromCurrent >= 0)
-            return previousTokens[l - numberFromCurrent];
-            else
-            return {
-                type: "",
-                style: "",
-                content: ""
-            };
-        }
-
-        return iter;
-
-
-    }
-    return {
-        make: parseXquery
-    };
-})();
\ No newline at end of file
diff --git a/typo3/contrib/codemirror/contrib/xquery/js/tokenizexquery.js b/typo3/contrib/codemirror/contrib/xquery/js/tokenizexquery.js
deleted file mode 100644 (file)
index dcb5ccf..0000000
+++ /dev/null
@@ -1,458 +0,0 @@
-/*
-Copyright 2010 Mike Brevoort http://mike.brevoort.com (twitter:@mbrevoort)
-
-Licensed under the Apache License, Version 2.0 (the "License");
-you may not use this file except in compliance with the License.
-You may obtain a copy of the License at
-
-    http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing, software
-distributed under the License is distributed on an "AS IS" BASIS,
-WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-See the License for the specific language governing permissions and
-limitations under the License.
-
-This is an indirect collective derivative of the other parses in this package
-
-*/
-
-// A tokenizer for xQuery, looks at the source stream and tokenizes, applying
-// metadata to be able to apply the proper CSS classes in the parser.
-
-var tokenizeXquery = (function() {
-    // Advance the stream until the given character (not preceded by a
-    // backslash) is encountered, or the end of the line is reached.
-    function nextUntilUnescaped(source, end) {
-        var escaped = false;
-        while (!source.endOfLine()) {
-            var next = source.next();
-            if (next == end && !escaped)
-            return false;
-            escaped = !escaped && next == "\\";
-            console.debug(escaped);
-        }
-        return escaped;
-    }
-
-    // A map of Xquery's keywords. The a/b/c keyword distinction is
-    // very rough, but it gives the parser enough information to parse
-    // correct code correctly (we don't care that much how we parse
-    // incorrect code). The style information included in these objects
-    // is used by the highlighter to pick the correct CSS style for a
-    // token.
-    var keywords = function() {
-        function result(type, style) {
-            return {
-                type: type,
-                style: style
-            };
-        }
-
-        var allKeywords = {};
-        var keywordsList = {};
-        
-        // an array of all of the keywords that will be used by default, otherwise keywords will be more specifically specified and overridden below
-        var allKeywordsArray = new Array('after','ancestor','ancestor-or-self','and','as','ascending','assert','attribute','before','by','case','cast','child','comment','comment','declare','default','define','descendant','descendant-or-self','descending','document-node','element','element','else','eq','every','except','external','following','following-sibling','follows','for','function','if','import','in','instance','intersect','item','let','module','namespace','node','node','of','only','or','order','parent','precedes','preceding','preceding-sibling','processing-instruction','ref','return','returns','satisfies','schema','schema-element','self','some','sortby','stable','text','then','to','treat','typeswitch','union','variable','version','where','xquery');
-
-        for(var i in allKeywordsArray) {
-            allKeywords[allKeywordsArray[i]] = result("keyword", "xqueryKeyword");
-        }
-
-        /* This next bit is broken down this was for future indentation support */
-        // keywords that take a parenthised expression, and then a statement (if)
-        keywordsList['xqueryKeywordA'] = new Array('if', 'switch', 'while', 'for');
-
-        // keywords that take just a statement (else)
-        keywordsList['xqueryKeywordB'] = new Array('else', 'then', 'try', 'finally');
-
-        // keywords that optionally take an expression, and form a statement (return)
-        keywordsList['xqueryKeywordC'] = new Array('element', 'attribute', 'let', 'implements', 'import', 'module', 'namespace', 'return', 'super', 'this', 'throws', 'where');
-
-        keywordsList['xqueryOperator'] = new Array('eq', 'ne', 'lt', 'le', 'gt', 'ge');
-
-        for (var keywordType in keywordsList) {
-            for (var i = 0; i < keywordsList[keywordType].length; i++) {
-                allKeywords[keywordsList[keywordType][i]] = result(keywordType, "xqueryKeyword");
-            }
-        }
-
-        keywordsList = {};
-
-        keywordsList['xqueryAtom'] = new Array('null', 'fn:false()', 'fn:true()');
-        for (var keywordType in keywordsList) {
-            for (var i = 0; i < keywordsList[keywordType].length; i++) {
-                allKeywords[keywordsList[keywordType][i]] = result(keywordType, keywordType);
-            }
-        }
-
-        keywordsList = {};
-        keywordsList['xqueryModifier'] = new Array('xquery', 'ascending', 'descending');
-        keywordsList['xqueryType'] = new Array('xs:string', 'xs:float', 'xs:decimal', 'xs:double', 'xs:integer', 'xs:boolean', 'xs:date', 'xs:dateTime', 'xs:time', 'xs:duration', 'xs:dayTimeDuration', 'xs:time', 'xs:yearMonthDuration', 'numeric', 'xs:hexBinary', 'xs:base64Binary', 'xs:anyURI', 'xs:QName', 'xs:byte','xs:boolean','xs:anyURI','xf:yearMonthDuration');
-        for (var keywordType in keywordsList) {
-            for (var i = 0; i < keywordsList[keywordType].length; i++) {
-                allKeywords[keywordsList[keywordType][i]] = result('function', keywordType);
-            }
-        }
-
-        allKeywords = objectConcat(allKeywords, {
-            "catch": result("catch", "xqueryKeyword"),
-            "for": result("for", "xqueryKeyword"),
-            "case": result("case", "xqueryKeyword"),
-            "default": result("default", "xqueryKeyword"),
-            "instanceof": result("operator", "xqueryKeyword")
-        });
-
-        // ------------------- xquery keywords
-        var keywordsList = {};
-
-        // keywords that optionally take an expression, and form a statement (return)
-        keywordsList['xqueryKeywordC'] = new Array('assert', 'property');
-        for (var i = 0; i < keywordsList['xqueryKeywordC'].length; i++) {
-            allKeywords[keywordsList['xqueryKeywordC'][i]] = result("xqueryKeywordC", "xqueryKeyword");
-        }
-
-        // other xquery keywords
-        allKeywords = objectConcat(allKeywords, {
-            "as": result("operator", "xqueryKeyword"),
-            "in": result("operator", "xqueryKeyword"),
-            "at": result("operator", "xqueryKeyword"),
-            "declare": result("function", "xqueryKeyword"),
-            "function": result("function", "xqueryKeyword")
-        });
-        return allKeywords;
-    } ();
-
-    // there are some special cases where ordinarily text like xs:string() would
-    // look like a function call when it is really a type, etc.
-    function specialCases(source, word) {
-        if (word in {
-            "fn:true": "",
-            "fn:false": ""
-        } && source.lookAhead("()", false)) {
-            source.next();
-            source.next();
-            source.get();
-            return {
-                type: "function",
-                style: "xqueryAtom",
-                content: word + "()"
-            };
-        }
-        else if (word in {
-            "node": "",
-            "item": "",
-            "text": ""
-        } && source.lookAhead("()", false)) {
-            source.next();
-            source.next();
-            source.get();
-            return {
-                type: "function",
-                style: "xqueryType",
-                content: word + "()"
-            };
-        }
-        else if (source.lookAhead("(")) {
-            return {
-                type: "function",
-                style: "xqueryFunction",
-                content: word
-            };
-        }
-        else return null;
-    }
-
-    // Some helper regexp matchers.
-    var isOperatorChar = /[=+\-*&%!?@\/]/; 
-    var isDigit = /[0-9]/;
-    var isHexDigit = /^[0-9A-Fa-f]$/;
-    var isWordChar = /[\w\:\-\$_]/;
-    var isVariableChar = /[\w\$_-]/;
-    var isXqueryVariableChar = /[\w\.()\[\]{}]/;
-    var isPunctuation = /[\[\]{}\(\),;\.]/;
-    var isStringDelimeter = /^[\/'"]$/;
-    var isRegexpDelimeter = /^[\/'$]/;
-    var tagnameChar = /[<\w\:\-\/_]/;
-
-    // Wrapper around xqueryToken that helps maintain parser state (whether
-    // we are inside of a multi-line comment and whether the next token
-    // could be a regular expression).
-    function xqueryTokenState(inside, regexp) {
-        return function(source, setState) {
-            var newInside = inside;
-            var type = xqueryToken(inside, regexp, source,
-            function(c) {
-                newInside = c;
-            });
-            var newRegexp = type.type == "operator" || type.type == "xqueryKeywordC" || type.type == "xqueryKeywordC" || type.type.match(/^[\[{}\(,;:]$/);
-            if (newRegexp != regexp || newInside != inside)
-            setState(xqueryTokenState(newInside, newRegexp));
-            return type;
-        };
-    }
-
-    // The token reader, inteded to be used by the tokenizer from
-    // tokenize.js (through xqueryTokenState). Advances the source stream
-    // over a token, and returns an object containing the type and style
-    // of that token.
-    function xqueryToken(inside, regexp, source, setInside) {
-        function readHexNumber() {
-            setInside(null);
-            source.next();
-            // skip the 'x'
-            source.nextWhileMatches(isHexDigit);
-            return {
-                type: "number",
-                style: "xqueryNumber"
-            };
-        }
-
-        function readNumber() {
-            setInside(null);
-            source.nextWhileMatches(isDigit);
-            if (source.equals(".")) {
-                source.next();
-
-                // read ranges
-                if (source.equals("."))
-                source.next();
-
-                source.nextWhileMatches(isDigit);
-            }
-            if (source.equals("e") || source.equals("E")) {
-                source.next();
-                if (source.equals("-"))
-                source.next();
-                source.nextWhileMatches(isDigit);
-            }
-            return {
-                type: "number",
-                style: "xqueryNumber"
-            };
-        }
-        // Read a word, look it up in keywords. If not found, it is a
-        // variable, otherwise it is a keyword of the type found.
-        function readWord() {
-            //setInside(null);
-            source.nextWhileMatches(isWordChar);
-            var word = source.get();
-            var specialCase = specialCases(source, word);
-            if (specialCase) return specialCase;
-            var known = keywords.hasOwnProperty(word) && keywords.propertyIsEnumerable(word) && keywords[word];
-            if (known) return {
-                type: known.type,
-                style: known.style,
-                content: word
-            }
-            return {
-                type: "word",
-                style: "word",
-                content: word
-            };
-        }
-
-
-        // read regexp like /\w{1}:\\.+\\.+/
-        function readRegexp() {
-            // go to the end / not \/
-            nextUntilUnescaped(source, "/");
-
-            return {
-                type: "regexp",
-                style: "xqueryRegexp"
-            };
-        }
-
-        // Mutli-line comments are tricky. We want to return the newlines
-        // embedded in them as regular newline tokens, and then continue
-        // returning a comment token for every line of the comment. So
-        // some state has to be saved (inside) to indicate whether we are
-        // inside a (: :) sequence.
-        function readMultilineComment(start) {
-            var newInside = "(:";
-            var maybeEnd = (start == ":");
-            while (true) {
-                if (source.endOfLine())
-                break;
-                var next = source.next();
-                if (next == ")" && maybeEnd) {
-                    newInside = null;
-                    break;
-                }
-                maybeEnd = (next == ":");
-            }
-            setInside(newInside);
-            return {
-                type: "comment",
-                style: "xqueryComment"
-            };
-        }
-
-        function readOperator() {
-            if (ch == "=")
-            setInside("=")
-            else if (ch == "~")
-            setInside("~")
-            else if (ch == ":" && source.equals("=")) {
-                setInside(null);
-                source.nextWhileMatches(/[:=]/);
-                var word = source.get();
-                return {
-                    type: "operator",
-                    style: "xqueryOperator",
-                    content: word
-                };
-            }
-            else setInside(null);
-
-            return {
-                type: "operator",
-                style: "xqueryOperator"
-            };
-        }
-
-        // read a string, but look for embedded expressions wrapped in curly
-        // brackets. 
-        function readString(quote) {
-            var newInside = quote;
-            var previous = "";
-            while (true) {
-                if (source.endOfLine())
-                break;
-                if(source.lookAhead("{", false)) {
-                    newInside = quote + "{";
-                    break;
-                }    
-                var next = source.next();
-                if (next == quote && previous != "\\") {
-                    newInside = null;
-                    break;
-                }
-                previous = next;
-            }
-            setInside(newInside);
-            return {
-                type: "string",
-                style: "xqueryString"
-            };
-        }
-        
-        // Given an expression end by a closing curly bracket, mark the } as
-        // punctuation an resume the string processing by setting "inside" to
-        // the type of string it's embedded in. 
-        // This is known because the readString() function sets inside to the 
-        // quote type then an open curly bracket like "{  or '{
-        function readExpressionEndInString(inside) {
-            var quote = inside.substr(0,1);
-            setInside(quote);
-            return { type: ch, style: "xqueryPunctuation"};            
-        }
-
-        function readVariable() {
-            //setInside(null);
-            source.nextWhileMatches(isVariableChar);
-            var word = source.get();
-            return {
-                type: "variable",
-                style: "xqueryVariable",
-                content: word
-            };
-        }
-
-        // read an XML Tagname, both closing and opening
-        function readTagname(lt) {
-            var tagtype = (source.lookAhead("/", false)) ? "xml-tag-close": "xml-tag-open";
-            source.nextWhileMatches(tagnameChar);
-            var word = source.get();
-            if (source.lookAhead(">", false)) {
-                source.next();
-            }
-            return {
-                type: tagtype,
-                style: "xml-tagname",
-                content: word
-            };
-        }
-
-        // Fetch the next token. Dispatches on first character in the stream
-        // what follows is a big if statement that makes decisions based on the 
-        // character, the following character and the inside variable
-
-        if (inside == "\"" || inside == "'")
-            return readString(inside);
-            
-        var ch = source.next();
-        if (inside && inside.indexOf("{") == 1 && ch == "}") {
-            return readExpressionEndInString(inside);
-        }    
-        if (inside == "(:")
-            return readMultilineComment(ch);
-        else if (ch == "\"" || ch == "'")
-            return readString(ch);
-
-
-        // test if this is range
-        else if (ch == "." && source.equals(".")) {
-            source.next();
-            return {
-                type: "..",
-                style: "xqueryOperator"
-            };
-        }
-
-        else if (ch == "(" && source.equals(":")) {
-            source.next();
-            return readMultilineComment(ch);
-        }
-        else if (ch == "$")
-            return readVariable();
-        else if (ch == ":" && source.equals("="))
-            return readOperator();
-
-        // with punctuation, the type of the token is the symbol itself
-        else if (isPunctuation.test(ch))
-            return {
-                type: ch,
-                style: "xqueryPunctuation"
-            };
-        else if (ch == "0" && (source.equals("x") || source.equals("X")))
-            return readHexNumber();
-        else if (isDigit.test(ch))
-            return readNumber();
-
-        else if (ch == "~") {
-            setInside("~");
-            // prepare to read slashy string like ~ /\w{1}:\\.+\\.+/
-            return readOperator(ch);
-        }
-        else if (isOperatorChar.test(ch)) {
-            return readOperator(ch);            
-        }
-        // some xml handling stuff
-        else if (ch == "<")
-            return readTagname(ch);
-        else if (ch == ">")
-            return {
-                type: "xml-tag",
-                style: "xml-tagname"
-            };
-        else
-            return readWord();
-    }
-
-    // returns new object = object1 + object2
-    function objectConcat(object1, object2) {
-        for (var name in object2) {
-            if (!object2.hasOwnProperty(name)) continue;
-            if (object1.hasOwnProperty(name)) continue;
-            object1[name] = object2[name];
-        }
-        return object1;
-    }
-
-    // The external interface to the tokenizer.
-    return function(source, startState) {
-        return tokenizer(source, startState || xqueryTokenState(false, true));
-    };
-})();
\ No newline at end of file
diff --git a/typo3/contrib/codemirror/css/._csscolors.css b/typo3/contrib/codemirror/css/._csscolors.css
deleted file mode 100644 (file)
index cf351ec..0000000
Binary files a/typo3/contrib/codemirror/css/._csscolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/css/._docs.css b/typo3/contrib/codemirror/css/._docs.css
deleted file mode 100644 (file)
index 99b464c..0000000
Binary files a/typo3/contrib/codemirror/css/._docs.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/css/._jscolors.css b/typo3/contrib/codemirror/css/._jscolors.css
deleted file mode 100644 (file)
index c1bc864..0000000
Binary files a/typo3/contrib/codemirror/css/._jscolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/css/._people.jpg b/typo3/contrib/codemirror/css/._people.jpg
deleted file mode 100644 (file)
index 8d54838..0000000
Binary files a/typo3/contrib/codemirror/css/._people.jpg and /dev/null differ
diff --git a/typo3/contrib/codemirror/css/._sparqlcolors.css b/typo3/contrib/codemirror/css/._sparqlcolors.css
deleted file mode 100644 (file)
index 941d4d8..0000000
Binary files a/typo3/contrib/codemirror/css/._sparqlcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/css/._xmlcolors.css b/typo3/contrib/codemirror/css/._xmlcolors.css
deleted file mode 100644 (file)
index 8a3ff54..0000000
Binary files a/typo3/contrib/codemirror/css/._xmlcolors.css and /dev/null differ
diff --git a/typo3/contrib/codemirror/csstest.html b/typo3/contrib/codemirror/csstest.html
deleted file mode 100644 (file)
index 3f1785c..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/codemirror.js" type="text/javascript"></script>
-    <title>CodeMirror: CSS demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-  </head>
-  <body style="padding: 20px;">
-
-<p>Demonstration of <a href="index.html">CodeMirror</a>'s CSS
-highlighter.</p>
-
-<div class="border">
-<textarea id="code" cols="120" rows="30">
-/* Some example CSS */
-
-@import url("something.css");
-
-body {
-  margin: 0;
-  padding: 3em 6em;
-  font-family: tahoma, arial, sans-serif;
-  color: #000;
-}
-
-#navigation a {
-  font-weight: bold;
-  text-decoration: none !important;
-}
-
-h1 {
-  font-size: 2.5em;
-}
-
-h2 {
-  font-size: 1.7em;
-}
-
-h1:before, h2:before {
-  content: "::";
-}
-
-code {
-  font-family: courier, monospace;
-  font-size: 80%;
-  color: #418A8A;
-}
-</textarea>
-</div>
-
-<script type="text/javascript">
-  var editor = CodeMirror.fromTextArea('code', {
-    height: "dynamic",
-    parserfile: "parsecss.js",
-    stylesheet: "css/csscolors.css",
-    path: "js/"
-  });
-</script>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/faq.html b/typo3/contrib/codemirror/faq.html
deleted file mode 100644 (file)
index da957db..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <title>CodeMirror: FAQ</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Droid+Sans:bold"/>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-  </head>
-  <body>
-
-<h1><span class="logo-braces">{ }</span> CodeMirror</h1>
-
-<pre class="grey">
-/* Frequently asked questions */
-</pre>
-
-<div class="clear"><div class="leftbig blk">
-
-    <h2 id="license">Q: Can I use CodeMirror in my such-and-such project?</h2>
-
-    <p>A: Yes. The <a href="LICENSE">license</a> is short, simple, and
-    permissive.</p>
-
-    <h2 id="cache">Q: You said you fixed this-and-this issue, but I'm
-    still seeing it.</h2>
-
-    <p>A: One possibility is that I screwed up, but a very real
-    alternative is that you're looking at a cached version of the
-    CodeMirror scripts. Because the scripts are loaded into an iframe,
-    the ctrl-f5 you issued on the outer page doesn't always cause them
-    to be reloaded (IE, Opera, and Firefox are the worst offenders
-    here). Clear your cache and re-try.</p>
-
-    <h2 id="textarea">Q: I can't put content containing
-    <code>&lt;/textarea></code> into CodeMirror!</h2>
-
-    <p>A: [Web-programming 101] The first <code>&lt;/textarea></code>
-    following a <code>&lt;textarea></code> tag will close the
-    textarea. This has nothing to do with CodeMirror. Sit down, and
-    spend ten minutes thinking about why HTML-escaping was
-    invented.</p>
-
-    <h2 id="debug">Q: I have this huge chunk of code that does not
-    work, can you debug it for me?</h2>
-
-    <p>A: Nope. If you can't be bothered isolate your problem in 20
-    lines of code or less, I can't be bothered to think about it.</p>
-
-    <h2 id="patch">Q: How do I submit patches for CodeMirror?</h2>
-
-    <p>A: Preferred way is to create a fork on <a
-    href="http://github.com/marijnh/CodeMirror">github</a>, add your
-    patch, and send me a pull request. Diffs (against the latest
-    version!) by mail are also cool.</p>
-
-
-</div><div class="rightsmall blk">
-
-  <h2>Questions</h2>
-
-  <ul>
-    <li><a href="#license">Licensing</a></li>
-    <li><a href="#cache">Cache Issues</a></li>
-    <li><a href="#textarea"><code>&lt;textarea></code></a></li>
-    <li><a href="#debug">Code Questions</a></li>
-    <li><a href="#patch">Submitting Patches</a></li>
-  </ul>
-
-  <h2>Site</h2>
-
-  <ul>
-    <li><a href="index.html">Front Page</a></li>
-    <li><a href="manual.html">User Manual</a></li>
-    <li><a href="http://groups.google.com/group/codemirror">Google Group</a></li>
-    <li><a href="compress.html">Compression Helper</a></li>
-    <li><a href="story.html">War Story</a></li>
-  </ul>
-
-</div></div>
-
-<div style="height: 2em">&nbsp;</div>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/favicon.ico b/typo3/contrib/codemirror/favicon.ico
deleted file mode 100644 (file)
index 1030b05..0000000
Binary files a/typo3/contrib/codemirror/favicon.ico and /dev/null differ
diff --git a/typo3/contrib/codemirror/highlight.html b/typo3/contrib/codemirror/highlight.html
deleted file mode 100644 (file)
index 6f1dd34..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/highlight.js" type="text/javascript"></script>
-    <script src="js/stringstream.js" type="text/javascript"></script>
-    <script src="js/tokenize.js" type="text/javascript"></script>
-    <script src="js/tokenizejavascript.js" type="text/javascript"></script>
-    <script src="js/parsejavascript.js" type="text/javascript"></script>
-    <title>CodeMirror: String highlight demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/jscolors.css"/>
-  </head>
-  <body style="padding: 20px;">
-
-<div style="border: 1px solid black; padding: .4em;">
-<textarea id="code" cols="120" rows="20" style="border-width: 0">
-// Demo for running a CodeMirror parser over a piece of code without
-// creating an actual editor.
-
-(function(){
-  function normaliseString(string) {
-    var tab = "";
-    for (var i = 0; i &lt; indentUnit; i++) tab += " ";
-
-    string = string.replace(/\t/g, tab).replace(/\u00a0/g, " ").replace(/\r\n?/g, "\n");
-    var pos = 0, parts = [], lines = string.split("\n");
-    for (var line = 0; line &lt; lines.length; line++) {
-      if (line != 0) parts.push("\n");
-      parts.push(lines[line]);
-    }
-
-    return {
-      next: function() {
-        if (pos &lt; parts.length) return parts[pos++];
-        else throw StopIteration;
-      }
-    };
-  }
-
-  window.highlightText = function(string, output, parser) {
-    var parser = (parser || Editor.Parser).make(stringStream(normaliseString(string)));
-    try {
-      while (true) {
-        var token = parser.next();
-        var span = document.createElement("SPAN");
-        span.className = token.style;
-        span.appendChild(document.createTextNode(token.value));
-        output.appendChild(span);
-      }
-    }
-    catch (e) {
-      if (e != StopIteration) throw e;
-    }
-  }
-})();
-</textarea>
-</div>
-
-<button onclick="highlight()">Run highlighter</button>
-
-<div>
-<div id="numbers" style="float: left; width: 2em; margin-right: .5em; text-align: right; font-family: monospace; color: #CCC;"></div>
-<pre id="output" style="font-family: monospace"></pre>
-</div>
-
-<script type="text/javascript">
-  // Simple hack to demonstrate adding line numbers. Just pass the DOM node as
-  // the second argument to highlightText when you don't need those
-  function highlight() {
-    var lineNo = 1, output = document.getElementById("output"), numbers = document.getElementById("numbers");
-    output.innerHTML = numbers.innerHTML = "";
-
-    function addLine(line) {
-      numbers.appendChild(document.createTextNode(String(lineNo++)));
-      numbers.appendChild(document.createElement("BR"));
-      for (var i = 0; i < line.length; i++) output.appendChild(line[i]);
-      output.appendChild(document.createElement("BR"));
-    }
-    highlightText(document.getElementById("code").value, addLine);
-  }
-</script>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/htmltest.html b/typo3/contrib/codemirror/htmltest.html
deleted file mode 100644 (file)
index 79f9eec..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/codemirror.js" type="text/javascript"></script>
-    <title>CodeMirror: HTML/XML demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-    <style type="text/css">
-      .CodeMirror-line-numbers {
-        width: 2.2em;
-        color: #aaa;
-        background-color: #eee;
-        text-align: right;
-        padding-right: .3em;
-        font-size: 10pt;
-        font-family: monospace;
-        padding-top: .4em;
-      }
-    </style>
-  </head>
-  <body style="padding: 20px;">
-
-<p>This is a simple demonstration of the XML/HTML indentation module
-for <a href="index.html">CodeMirror</a>. The <a
-href="js/parsexml.js">javascript</a> file contains some comments with
-more information.</p>
-
-<div class="border">
-<textarea id="code" cols="120" rows="30">
-&lt;html style="color: green"&gt;
-  &lt;!-- this is a comment --&gt;
-  &lt;head&gt;
-    &lt;title&gt;HTML Example&lt;/title&gt;
-  &lt;/head&gt;
-  &lt;body&gt;
-    The indentation tries to be &lt;em&gt;somewhat &amp;quot;do what
-    I mean&amp;quot;&lt;/em&gt;... but might not match your style.
-  &lt;/body&gt;
-&lt;/html&gt;
-</textarea>
-</div>
-
-<script type="text/javascript">
-  var editor = CodeMirror.fromTextArea('code', {
-    height: "350px",
-    parserfile: "parsexml.js",
-    stylesheet: "css/xmlcolors.css",
-    path: "js/",
-    continuousScanning: 500,
-    lineNumbers: true
-  });
-</script>
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/index.html b/typo3/contrib/codemirror/index.html
deleted file mode 100644 (file)
index 01e4018..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <title>CodeMirror</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Droid+Sans:bold"/>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-  </head>
-  <body>
-
-<h1><span class="logo-braces">{ }</span> CodeMirror</h1>
-
-<pre class="grey">
-/* In-browser code editing
-   made almost bearable */
-</pre>
-
-<div class="clear"><div class="left blk">
-
-  <p style="margin-top: 0">CodeMirror is a JavaScript library that can be used to create a
-  relatively pleasant editor interface for code-like content &#x2015;
-  computer programs, HTML markup, and similar. If a parser has been
-  written for the language you are editing (see below for a list of
-  supported languages), the code will be coloured, and the editor will
-  help you with indentation.</p>
-  <div class="clear"><div class="left1 blk">
-
-    <h2 style="margin-top: 0">Try the parser test pages:</h2>
-
-    <ul>
-      <li><a href="jstest.html">JavaScript</a></li>
-      <li><a href="htmltest.html">XML/HTML</a></li>
-      <li><a href="csstest.html">CSS</a></li>
-      <li><a href="mixedtest.html">HTML mixed-mode</a></li>
-      <li><a href="sparqltest.html">SPARQL</a></li>
-      <li><a href="contrib/php/index.html">HTML+PHP mixed-mode</a> (courtesy of <a href="contrib/php/LICENSE">Yahoo!</a>)</li>
-      <li><a href="contrib/python/index.html">Python</a> (by <a href="contrib/python/LICENSE">Timothy Farrell</a>)</li>
-      <li><a href="contrib/lua/index.html">Lua</a> (by <a href="http://francio.pl/">Franciszek Wawrzak</a>)</li>
-      <li><a href="http://github.com/hakunin/ruby-in-codemirror/tree/master">Ruby</a> (by Michal Hantl, unfinished)</li>
-      <li><a href="contrib/sql/index.html">SQL</a> (by John Benediktsson)</li>
-      <li><a href="contrib/plsql/index.html">PLSQL</a> (by <a href="http://www.oracle-and-apex.com/">Peter Raganitsch</a>)</li>
-      <li><a href="http://www.liranuna.com/diff-parser-for-codemirror/">diff</a> (courtesy of <a href="http://www.liranuna.com">Liran Nuna</a>)</li>
-      <li><a href="contrib/groovy/index.html">Groovy</a> (by <a href="http://exoplatform.org/">eXo Platform</a>)</li>
-      <li><a href="contrib/csharp/index.html">C#</a> (by <a href="http://skilltesting.com/">Boris Gaber and Christopher Buchino</a>)</li>
-      <li><a href="contrib/scheme/index.html">Scheme</a> (by <a href="http://hashcollision.org/">Danny Yoo</a>)</li>
-      <li><a href="contrib/xquery/index.html">XQuery</a> (by <a href="http://mike.brevoort.com/">Mike Brevoort</a>)</li>
-      <li><a href="contrib/ometa/index.html">OmetaJS</a> (by <a href="http://erickedji.wordpress.com/">Eric KEDJI</a>)</li>
-    </ul>
-
-  </div><div class="left2 blk">
-
-    <h2 style="margin-top: 0">Some real-world uses:</h2>
-
-    <ul>
-      <li><a href="http://kml-samples.googlecode.com/svn/trunk/interactive/index.html">Google Earth KML sampler</a></li>
-      <li><a href="http://eloquentjavascript.net/chapter1.html">Eloquent JavaScript's console</a></li>
-      <li><a href="http://demo.qooxdoo.org/current/playground/#Hello_World">The qooxdoo playground</a></li>
-      <li><a href="http://billmill.org/static/canvastutorial/index.html">A cool tutorial about the &lt;canvas> element</a></li>
-      <li><a href="http://orc.csres.utexas.edu/tryorc.shtml">An online IDE for the Orc programming language</a></li>
-      <li><a href="http://code.google.com/apis/ajax/playground">Google's API playground</a></li>
-      <li><a href="http://craic.com/tutorials/javascript/raphael_live/raphael_live.html">RaphaĆ«l Live</a></li>
-      <li><a href="http://jsbin.com/">JS Bin</a></li>
-      <li><a href="http://www.rockettheme.com/extensions-joomla/rokpad">The RokPad plugin for Joomla</a></li>
-      <li><a href="http://scraperwiki.com/editor/">The scraperwiki editor</a></li>
-      <li><a href="http://www.linb.net/VisualJS/UIBuilder.html">jsLinb UI Builder</a></li>
-    </ul>
-
-  </div></div>
-
-  <h2 id="supported">Supported browsers</h2>
-
-  <p>The following browsers are able to run CodeMirror:</p>
-
-  <ul>
-    <li>Firefox 1.5 or higher</li>
-    <li>Internet Explorer 6 or higher</li>
-    <li>Safari 3 or higher</li>
-    <li>Opera 9.52 or higher</li>
-    <li>Chrome</li>
-  </ul>
-
-  <p>I am not actively testing against every new browser release, and
-  vendors have a habit of introducing bugs all the time, so I am
-  relying on the community to tell me when something breaks. See <a
-  href="#support">below</a> for information on how to contact me.</p>
-
-  <h2 id="code">Getting the code</h2>
-
-  <p>All of CodeMirror is released under a <a
-  href="LICENSE">zlib-style</a> license. To get it, you can download
-  the <a href="http://codemirror.net/codemirror.zip">latest
-  release</a> or the current <a
-  href="http://codemirror.net/codemirror-latest.zip">development
-  snapshot</a> as zip files. To create a custom minified script file,
-  you can use the <a href="compress.html">compression API</a>.</p>
-
-  <p>We use <a href="http://git-scm.com/">git</a> for version control.
-  The main repository can be fetched in this way:</p>
-
-  <pre class="code">git clone http://marijn.haverbeke.nl/git/codemirror</pre>
-
-  <p>CodeMirror can also be found on GitHub: <a
-  href="http://github.com/marijnh/CodeMirror">http://github.com/marijnh/CodeMirror</a>.
-  If you plan to hack on the code and contribute patches, the best way
-  to do it is to create a GitHub fork, and send pull requests.</p>
-
-  <h2 id="documention">Documentation</h2>
-
-  <p>The <a href="manual.html">manual</a> is your first stop for
-  learning how to use this library. It starts with a quick explanation
-  of how to use the editor, and then describes all of the (many)
-  options and methods that CodeMirror exposes.</p>
-
-  <p>For those who want to learn more about the code, <a
-  href="story.html">this document</a> about CodeMirror's architecture
-  will be useful. The <a
-  href="http://github.com/marijnh/CodeMirror">source code</a> itself
-  is, for the most part, also very well commented.</p>
-
-  <h2 id="support">Support</h2>
-
-  <p>There is a <a
-  href="http://groups.google.com/group/codemirror">Google group</a> (a
-  sort of mailing list/newsgroup thing) for discussion and news
-  related to CodeMirror. Please check the <a href="faq.html">FAQ</a>
-  before asking a question. You can also e-mail me directly: <a
-  href="mailto:marijnh@gmail.com">Marijn Haverbeke</a>.</p>
-
-</div>
-
-<div class="right blk">
-
-  <a href="http://codemirror.net/codemirror.zip" class="download">Download the latest release</a>
-
-  <h2>Make a donation</h2>
-
-  <ul>
-    <li><span onclick="document.getElementById('paypal').submit();" class="quasilink">Paypal</span></li>
-    <li><span onclick="document.getElementById('bankinfo').style.display = 'block';" class="quasilink">Bank</span></li>
-  </ul>
-
-  <p id="bankinfo" style="display: none;">
-    Bank: <i>Rabobank</i><br/>
-    Country: <i>Netherlands</i><br/>
-    SWIFT: <i>RABONL2U</i><br/>
-    Account: <i>147850770</i><br/>
-    Name: <i>Marijn Haverbeke</i><br/>
-    IBAN: <i>NL26 RABO 0147 8507 70</i>
-  </p>
-
-  <h2>Releases:</h2>
-
-  <p class="rel">02-10-2010: <a
-  href="http://codemirror.net/codemirror-0.9.zip">Version 0.9</a>:</p>
-  <ul class="rel-note">
-    <li>Add support for searching backwards.</li>
-    <li>There are now parsers for <a href="contrib/scheme/index.html">Scheme</a>, <a href="contrib/xquery/index.html">XQuery</a>, and <a href="contrib/ometa/index.html">OmetaJS</a>.</li>
-    <li>Makes <code>height: "dynamic"</code> more robust.</li>
-    <li>Fixes bug where paste did not work on OS X.</li>
-    <li>Add a <code>enterMode</code> and <code>electricChars</code> options to make indentation even more customizable.</li>
-    <li>Add <code>firstLineNumber</code> option.</li>
-    <li>Fix bad handling of <code>@media</code> rules by the CSS parser.</li>
-    <li>Take a new, more robust approach to working around the invisible-last-line bug in WebKit.</li>
-  </ul>
-
-  <p class="rel">22-07-2010: <a
-  href="http://codemirror.net/codemirror-0.8.zip">Version 0.8</a>:</p>
-  <ul class="rel-note">
-    <li>Add a <code>cursorCoords</code> method to find the screen
-    coordinates of the cursor.</li>
-    <li>A number of fixes and support for more syntax in the PHP parser.</li>
-    <li>Fix indentation problem with JSON-mode JS parser in Webkit.</li>
-    <li>Add a <a href="compress.html">minification</a> UI.</li>
-    <li>Support a <code>height: dynamic</code> mode, where the editor's
-    height will adjust to the size of its content.</li>
-    <li>Better support for IME input mode.</li>
-    <li>Fix JavaScript parser getting confused when seeing a no-argument
-    function call.</li>
-    <li>Have CSS parser see the difference between selectors and other
-    identifiers.</li>
-    <li>Fix scrolling bug when pasting in a horizontally-scrolled
-    editor.</li>
-    <li>Support <code>toTextArea</code> method in instances created with
-    <code>fromTextArea</code>.</li>
-    <li>Work around new Opera cursor bug that causes the cursor to jump
-    when pressing backspace at the end of a line.</li>
-  </ul>
-
-  <p class="rel">27-04-2010: <a
-  href="http://codemirror.net/codemirror-0.67.zip">Version
-  0.67</a>:</p>
-  <p class="rel-note">More consistent page-up/page-down behaviour
-  across browsers. Fix some issues with hidden editors looping forever
-  when line-numbers were enabled. Make PHP parser parse
-  <code>"\\"</code> correctly. Have <code>jumpToLine</code> work on
-  line handles, and add <code>cursorLine</code> function to fetch the
-  line handle where the cursor currently is. Add new
-  <code>setStylesheet</code> function to switch style-sheets in a
-  running editor.</p>
-
-  <p class="rel">01-03-2010: <a
-  href="http://codemirror.net/codemirror-0.66.zip">Version
-  0.66</a>:</p>
-  <p class="rel-note">Adds <code>removeLine</code> method to API.
-  Introduces the <a href="contrib/plsql/index.html">PLSQL parser</a>.
-  Marks XML errors by adding (rather than replacing) a CSS class, so
-  that they can be disabled by modifying their style. Fixes several
-  selection bugs, and a number of small glitches.</p>
-
-  <p class="rel">12-11-2009: <a
-  href="http://codemirror.net/codemirror-0.65.zip">Version
-  0.65</a>:</p>
-  <p class="rel-note">Add support for having both line-wrapping and
-  line-numbers turned on, make paren-highlighting style customisable
-  (<code>markParen</code> and <code>unmarkParen</code> config
-  options), work around a selection bug that Opera
-  <em>re</em>introduced in version 10.</p>
-
-  <p class="rel">23-10-2009: <a
-  href="http://codemirror.net/codemirror-0.64.zip">Version
-  0.64</a>:</p>
-
-  <p class="rel-note">Solves some issues introduced by the
-  paste-handling changes from the previous release. Adds
-  <code>setSpellcheck</code>, <code>setTextWrapping</code>,
-  <code>setIndentUnit</code>, <code>setUndoDepth</code>,
-  <code>setTabMode</code>, and <code>setLineNumbers</code> to
-  customise a running editor. Introduces an <a
-  href="contrib/sql/index.html">SQL</a> parser. Fixes a few small
-  problems in the <a href="contrib/python/index.html">Python</a>
-  parser. And, as usual, add workarounds for various newly discovered
-  browser incompatibilities.</p>
-
-</div></div>
-
-<div style="height: 2em">&nbsp;</div>
-
-  <form action="https://www.paypal.com/cgi-bin/webscr" method="post" id="paypal">
-    <input type="hidden" name="cmd" value="_s-xclick"/>
-    <input type="hidden" name="hosted_button_id" value="3FVHS5FGUY7CC"/>
-  </form>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/js/._codemirror.js b/typo3/contrib/codemirror/js/._codemirror.js
deleted file mode 100644 (file)
index f1e0f37..0000000
Binary files a/typo3/contrib/codemirror/js/._codemirror.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._editor.js b/typo3/contrib/codemirror/js/._editor.js
deleted file mode 100644 (file)
index f84849d..0000000
Binary files a/typo3/contrib/codemirror/js/._editor.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._highlight.js b/typo3/contrib/codemirror/js/._highlight.js
deleted file mode 100644 (file)
index dc2679f..0000000
Binary files a/typo3/contrib/codemirror/js/._highlight.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._mirrorframe.js b/typo3/contrib/codemirror/js/._mirrorframe.js
deleted file mode 100644 (file)
index dbda9bf..0000000
Binary files a/typo3/contrib/codemirror/js/._mirrorframe.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._parsecss.js b/typo3/contrib/codemirror/js/._parsecss.js
deleted file mode 100644 (file)
index 9e6ef80..0000000
Binary files a/typo3/contrib/codemirror/js/._parsecss.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._parsedummy.js b/typo3/contrib/codemirror/js/._parsedummy.js
deleted file mode 100644 (file)
index 8d7d50c..0000000
Binary files a/typo3/contrib/codemirror/js/._parsedummy.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._parsehtmlmixed.js b/typo3/contrib/codemirror/js/._parsehtmlmixed.js
deleted file mode 100644 (file)
index 17ff58e..0000000
Binary files a/typo3/contrib/codemirror/js/._parsehtmlmixed.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._parsejavascript.js b/typo3/contrib/codemirror/js/._parsejavascript.js
deleted file mode 100644 (file)
index e6b0687..0000000
Binary files a/typo3/contrib/codemirror/js/._parsejavascript.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._parsesparql.js b/typo3/contrib/codemirror/js/._parsesparql.js
deleted file mode 100644 (file)
index 76bed09..0000000
Binary files a/typo3/contrib/codemirror/js/._parsesparql.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._parsexml.js b/typo3/contrib/codemirror/js/._parsexml.js
deleted file mode 100644 (file)
index 491ee2a..0000000
Binary files a/typo3/contrib/codemirror/js/._parsexml.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._select.js b/typo3/contrib/codemirror/js/._select.js
deleted file mode 100644 (file)
index ca400be..0000000
Binary files a/typo3/contrib/codemirror/js/._select.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._stringstream.js b/typo3/contrib/codemirror/js/._stringstream.js
deleted file mode 100644 (file)
index 833cadb..0000000
Binary files a/typo3/contrib/codemirror/js/._stringstream.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._tokenize.js b/typo3/contrib/codemirror/js/._tokenize.js
deleted file mode 100644 (file)
index 09e1d51..0000000
Binary files a/typo3/contrib/codemirror/js/._tokenize.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._tokenizejavascript.js b/typo3/contrib/codemirror/js/._tokenizejavascript.js
deleted file mode 100644 (file)
index e7d6939..0000000
Binary files a/typo3/contrib/codemirror/js/._tokenizejavascript.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._undo.js b/typo3/contrib/codemirror/js/._undo.js
deleted file mode 100644 (file)
index 8506f93..0000000
Binary files a/typo3/contrib/codemirror/js/._undo.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/js/._util.js b/typo3/contrib/codemirror/js/._util.js
deleted file mode 100644 (file)
index cffe856..0000000
Binary files a/typo3/contrib/codemirror/js/._util.js and /dev/null differ
diff --git a/typo3/contrib/codemirror/jstest.html b/typo3/contrib/codemirror/jstest.html
deleted file mode 100644 (file)
index 1675c1b..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/codemirror.js" type="text/javascript"></script>
-    <script src="js/mirrorframe.js" type="text/javascript"></script>
-    <title>CodeMirror: JavaScript demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-  </head>
-  <body style="padding: 20px;">
-
-<p>This page demonstrates <a href="index.html">CodeMirror</a>'s
-JavaScript parser. Note that the ugly buttons at the top are not are
-not part of CodeMirror proper -- they demonstrate the way it can be
-embedded in a web-application.</p>
-
-<div class="border">
-<textarea id="code" cols="120" rows="30">
-// Here you see some JavaScript code. Mess around with it to get
-// acquainted with CodeMirror's features.
-
-// Press enter inside the object and your new line will be suitably
-// indented.
-var keyBindings = {
-  enter: "newline-and-indent",
-  tab: "reindent-selection",
-  ctrl_z: "undo",
-  ctrl_y: "redo",
-  ctrl_backspace: "undo-for-safari (which blocks ctrl-z)",
-  ctrl_bracket: "highlight-brackets",
-  ctrl_shift_bracket: "jump-to-matching-bracket"
-};
-
-// Press tab on the next line and the wrong indentation will be fixed.
-      var regex = /foo|bar/i;
-
-function example(x) {
-  // Local variables get a different colour than global ones.
-  var y = 44.4;
-  return x + y - z;
-}
-</textarea>
-</div>
-
-<script type="text/javascript">
-  var textarea = document.getElementById('code');
-  var editor = new MirrorFrame(CodeMirror.replace(textarea), {
-    height: "350px",
-    content: textarea.value,
-    parserfile: ["tokenizejavascript.js", "parsejavascript.js"],
-    stylesheet: "css/jscolors.css",
-    path: "js/",
-    autoMatchParens: true
-  });
-</script>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/manual.html b/typo3/contrib/codemirror/manual.html
deleted file mode 100644 (file)
index 073cfeb..0000000
+++ /dev/null
@@ -1,759 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <title>CodeMirror: User Manual</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Droid+Sans:bold"/>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-  </head>
-  <body>
-
-<h1><span class="logo-braces">{ }</span> CodeMirror</h1>
-
-<pre class="grey">
-/* User manual and
-   reference guide */
-</pre>
-
-<div class="clear"><div class="leftbig blk">
-
-    <h2 id="usage">Basic Usage</h2>
-
-    <p>Inside the editor, the tab key is used to re-indent the current
-    selection (or the current line when nothing is selected), and
-    pressing enter will, apart from inserting a line break,
-    automatically indent the new line. Pressing control-enter will
-    cause the whole buffer to be re-coloured, which can be helpful
-    when some colouring has become out-of-date without the editor
-    noticing it.</p>
-
-    <p>The editor sports an undo/redo system, accessible with
-    control-z (undo) and control-y (redo). Safari will not allow
-    client scripts to capture control-z presses, but you can use
-    control-backspace instead on that browser.</p>
-
-    <p>The key-combination control-[ triggers a paren-blink: If the
-    cursor is directly after a '(', ')', '[', ']', '{', or '}', the
-    editor looks for the matching character, and highlights these
-    characters for a moment. There is an option to enable this to
-    happen any time the user types something or moves the cursor.</p>
-
-    <p>To use CodeMirror in a document, you should add a script tag to
-    load <a href="js/codemirror.js"><code>codemirror.js</code></a>. This
-    adds two objects to your environment, <code>CodeMirror</code> and
-    <code>CodeMirrorConfig</code>. The first is the interface to the
-    editor, the second can be used to configure it. (Note that this is
-    the only name-space pollution you can expect from CodeMirror --
-    all other cruft is kept inside the IFRAMEs that it creates when
-    you open an editor.)</p>
-
-    <p>To add an editor to a document, you must choose a place, a
-    parser, and a style-sheet for it. For example, to append an
-    XML editor to the body of the document, you do:</p>
-
-    <pre class="code">var editor = new CodeMirror(document.body, {
-  parserfile: "parsexml.js",
-  stylesheet: "xmlcolors.css"
-});</pre>
-
-    <p>The first argument to the <code>CodeMirror</code> constructor
-    can be a DOM node, in which case the editor gets appended to that
-    node, or a function, which will be called with the IFRAME node as
-    argument, and which is expected to place that node somewhere in
-    the document.</p>
-
-    <p>The second (optional) argument is an object that specifies
-    options. A set of default options (see below) is present in the
-    <code>CodeMirrorConfig</code> object, but each instance of the
-    editor can be given a set of specific options to override these
-    defaults. In this case, we specified that the parser should be
-    loaded from the <a
-    href="js/parsexml.js"><code>"parsexml.js"</code></a> file, and
-    that <a href="css/xmlcolors.css"><code>"xmlcolors.css"</code></a>
-    should be used to specify the colours of the code.</p>
-
-    <p>Another example:</p>
-
-    <pre class="code">var editor = new CodeMirror(CodeMirror.replace("inputfield"), {
-  parserfile: ["tokenizejavascript.js", "parsejavascript.js"],
-  path: "lib/codemirror/js/",
-  stylesheet: "lib/codemirror/css/jscolors.css",
-  content: document.getElementById("inputfield").value
-});</pre>
-
-    <p>Here we use the utility function
-    <code>CodeMirror.replace</code> to create a function that will
-    replace a node in the current document (given either directly or
-    by ID) with the editor. We also select the JavaScript parser this
-    time, and give a <code>path</code> option to tell the editor that
-    its files are not located in the same directory as the current
-    HTML page, but in <code>"lib/codemirror/"</code>.</p>
-
-    <p>There is a function
-    <code>CodeMirror.isProbablySupported()</code> that causes some
-    1998-style browser detection to happen, returning
-    <code>false</code> if CodeMirror is probably not supported on the
-    browser, <code>true</code> if it probably is, and
-    <code>null</code> if it has no idea. As the name suggests, this is
-    not something you can rely on, but it's usually better than
-    nothing.</p>
-
-    <p>Another utility function, <code>CodeMirror.fromTextArea</code>,
-    will, given a textarea node or the id of such a node, hide the
-    textarea and replace it with a CodeMirror frame. If the textarea
-    was part of a form, an <code>onsubmit</code> handler will be
-    registered with this form, which will load the content of the
-    editor into the textarea, so that it can be submitted as normal.
-    This function optionally takes a configuration object as second
-    argument.</p>
-
-    <pre class="code">var editor = CodeMirror.fromTextArea("inputfield", {
-  parserfile: ["tokenizejavascript.js", "parsejavascript.js"],
-  path: "lib/codemirror/js/",
-  stylesheet: "lib/codemirror/css/jscolors.css"
-});</pre>
-
-    <p>Instances created like this will have a
-    <code>toTextArea()</code> method which removes them and restores
-    the text area they were based on.</p>
-
-    <p>The reason that the script path has to be configured is that
-    CodeMirror will load in a bunch of extra files when an editor is
-    created (the parser script, among others). To be able to do this,
-    it has to know where to find them. These are all the JavaScript
-    files that are part of CodeMirror itself:</p>
-
-    <dl>
-      <dt><a href="js/codemirror.js"><code>codemirror.js</code></a></dt>
-      <dd>Main interface, takes care of default configuration and the
-      definition of editor frames. Include this in your HTML
-      document.</dd>
-      <dt><a href="js/editor.js"><code>editor.js</code></a></dt> <dd>The
-      code that takes care of reacting to user input, colouring text,
-      and indenting lines.</dd>
-      <dt><a href="js/util.js"><code>util.js</code></a></dt> <dd>A few
-      generic utility functions.</dd>
-      <dt><a
-      href="js/undo.js"><code>undo.js</code></a></dt>
-      <dd>Implements the undo history for the editor.</dd>
-      <dt><a
-      href="js/stringstream.js"><code>stringstream.js</code></a></dt>
-      <dd>Objects for wrapping the textual input to the parser.</dd>
-      <dt><a href="js/select.js"><code>select.js</code></a></dt> <dd>Some
-      helper utilities for working with selected text and cursor
-      positions.</dd>
-      <dt><a href="js/tokenize.js"><code>tokenize.js</code></a></dt>
-      <dd>Helper framework for writing tokenisers.</dd>
-    </dl>
-
-    <p>Most of these are rather full of comments, which can be useful
-    when you are trying to figure out how they work, but wastes a lot
-    of bandwidth in a production system. Take a look at the
-    description of the <code>basefiles</code> option below if you want
-    to concatenate and minimise the library (see the <a href="compress.html">compression API</a>).</p>
-
-    <p>Apart from these, there are files that implement the various
-    parsers. These all start with either <code>parse</code> or
-    <code>tokenize</code>.</p>
-
-    <h2 id="configuration">Configuration</h2>
-
-    <p>There are three ways to configure CodeMirror:</p>
-
-    <ul>
-      <li>If you define a global <code>CodeMirrorConfig</code> object
-      before loading <a
-      href="js/codemirror.js"><code>codemirror.js</code></a>, the
-      configuration options in that object will override the
-      defaults.</li>
-      <li>By assigning to the properties of the
-      <code>CodeMirrorConfig</code> object, configuration defaults can
-      be overridden after loading <a
-      href="js/codemirror.js"><code>codemirror.js</code></a>.</li>
-      <li>The <code>CodeMirror</code> constructor can be given a second
-      argument, an object, which will override some options for just
-      that editor. Options not mentioned in this object will default to
-      the values in the <code>CodeMirrorConfig</code> object.</li>
-    </ul>
-
-    <p>The options that can be specified are these (most have sensible
-    defaults specified in <a
-    href="js/codemirror.js"><code>codemirror.js</code></a>):</p>
-
-    <dl>
-
-      <dt><code>stylesheet</code></dt><dd>The file name of the
-      style-sheet, or style-sheets, that should be used to colour the
-      code in the editor frame. Can be a string or an array of
-      strings. See <a
-      href="css/jscolors.css"><code>jscolors.css</code></a> for an
-      example. The set of active stylesheets can be changed in a
-      running editor with the <code>setStylesheet</code> method, which
-      also takes a string or array of strings as argument.</dd>
-
-      <dt><code>path</code></dt><dd>The path that is prefixed to
-      script file names when they are loaded into an IFRAME. (Note that
-      this is not applied to the style-sheet file name.)</dd>
-
-      <dt><code>parserfile</code></dt><dd>A file name string, or an
-      array of strings that name the files containing the parser. See
-      below for the interface that such a parser should
-      implement.</dd>
-
-      <dt><code>basefiles</code></dt><dd>An array of strings naming
-      the files containing the base CodeMirror functionality. Defaults
-      to <code>["util.js", "stringstream.js", "select.js", "undo.js",
-      "editor.js", "tokenize.js"]</code>, but if you put them all into
-      a single file to reduce latency, or add some functionality, you
-      might have to adjust that.</dd>
-
-      <dt><code>iframeClass</code></dt><dd>Set this to a string to
-      give the IFRAME node created for the editor a custom CSS class.
-      Defaults to <code>null</code>.</dd>
-      
-      <dt><code>passDelay</code></dt><dd>Gives the amount of
-      milliseconds between colouring passes. Defaults to 200.</dd>
-
-      <dt><code>passTime</code></dt><dd>Specifies the maximum amount
-      of time that the highlighter will spend in one shot. Setting
-      this too high will cause the editor to 'freeze' the browser for
-      noticeable intervals. Defaults to 50.</dd>
-
-      <dt><code>continuousScanning</code></dt><dd>Configure continuous
-      scanning of the document. When <code>false</code>, scanning is
-      disabled. When set to a number, say <code>N</code>, a
-      'background' process will scan the document for
-      <code>passTime</code> (see above) milliseconds every
-      <code>N</code> milliseconds, regardless of whether anything
-      changed. This makes sure non-local changes propagate through the
-      document, and will help keep everything consistent. It does add
-      extra processing cost, even for an idle editor. Default value is
-      <code>false</code>.</dd>
-
-      <dt><code>autoMatchParens</code></dt><dd>When <code>true</code>,
-      will cause parens to be matched every time a key is pressed or
-      the user clicks on the document. Defaults to <code>false</code>.
-      Might be expensive for big documents.</dd>
-
-      <dt><code>markParen</code>,
-      <code>unmarkParen</code></dt><dd>Functions. Can be used to
-      customise the way brackets are marked (and unmarked) when
-      matched. Both take the bracket's <code>SPAN</code> node as their
-      first argument, and <code>markParen</code> takes a second
-      boolean argument indicating whether a successful match was
-      found. The default is to make the brackets bold and green (or
-      red, if not matched).</dd>
-
-      <dt><code>saveFunction</code></dt><dd>If given a function
-      value, that function will be invoked when the user presses
-      control-s. You should advise your Opera users to use
-      control-shift-s instead, since plain control-s will bring up the
-      'save page' dialog. Defaults to <code>null</code>.</dd>
-
-      <dt><code>undoDepth</code></dt><dd>Maximum length of the undo
-      history. Default is 50. This setting is changeable with the
-      <code>setUndoDepth(depth)</code> method on CodeMirror
-      instances.</dd>
-
-      <dt><code>onChange</code></dt><dd>An optional function of zero
-      arguments that gets called whenever the document is changed.
-      Happens at undo-commit time, not instantaniously.</dd>
-
-      <dt><code>undoDelay</code></dt><dd>When nothing is done in the
-      editor for this amount of milliseconds, pending changes get
-      added to the undo history. Setting this lower will give the undo
-      functionality a finer granularity. Defaults to 800.</dd>
-
-      <dt><code>width</code>, <code>height</code></dt><dd>The size of
-      the editor frame, given as a style-sheet quantities (for example
-      <code>"600px"</code> or <code>"100%"</code>). When
-      <code>height</code> is set to <code>dynamic</code>, the editor
-      will automatically resize to fit its contents. In this case, the
-      <code>minHeight</code> option (an integer) is used to determine
-      the minimum height in pixels.</dd>
-
-      <dt><code>disableSpellcheck</code></dt><dd>Should the editor
-      disable spell-checking on browsers that support it (Firefox 2+).
-      Default is <code>true</code>, since for most code spell-checking
-      is useless. Can be changed with the
-      <code>setSpellCheck(on)</code> method.</dd>
-
-      <dt><code>textWrapping</code></dt><dd>Can be used to disable or
-      enable text-wrapping in the editor frame. Default is
-      <code>true</code>. Changeable with the
-      <code>setTextWrapping(on)</code> method.</dd>
-
-      <dt><code>lineNumbers</code></dt><dd>Show line numbers to the
-      left of the editor. This requires you to specify a style for the
-      <code>CodeMirror-line-numbers</code> CSS class (in the outer
-      document) to configure the width, font, colors, etcetera for the
-      line-number DIV. You have to make sure that lines in the
-      numbering element have the same height as lines in the editor.
-      This is most easily done by giving them both the same font and
-      an absolute ('pt' or 'px') font size. This option defaults to
-      <code>false</code>. Changeable with the
-      <code>setLineNumbers(on)</code> method.</dd>
-
-      <dt><code>firstLineNumber</code></dt><dd>When
-      <code>lineNumbers</code> is enabled, this determines the number
-      given to the first line. Defualt is <code>1</code>.</dd>
-
-      <dt><code>lineNumberDelay</code>,
-      <code>lineNumberTime</code></dt><dd>When both line numbers are
-      and text wrapping are turned on, updating line numbers can be
-      expensive. These settings can be used to control how fast the
-      updating happens &#x2015; they work in the same way as
-      <code>passDelay</code> and <code>passTime</code>.</dd>
-
-      <dt><code>indentUnit</code></dt><dd>An integer that specifies
-      the amount of spaces one 'level' of indentation should add.
-      Default is <code>2</code>. Changeable in a running editor using
-      the <code>setIndentUnit(spaces)</code> method.</dd>
-
-      <dt><code>tabMode</code></dt><dd>Determines what the effect of
-      pressing tab is. Possibilities are:
-      <dl>
-        <dt><code>"indent"</code></dt><dd>The default. Causes tab to
-        adjust the indentation of the selection or current line using
-        the parser's rules.</dd>
-        <dt><code>"spaces"</code></dt><dd>Pressing tab simply inserts
-        four spaces.</dd>
-        <dt><code>"default"</code></dt><dd>CodeMirror does not
-        interfere with the tab key, but leaves it to the browser to
-        handle it. Binds shift-space to regular indentation
-        behaviour.</dd>
-        <dt><code>"shift"</code></dt><dd>Pressing tab indents the
-        current line (or selection) one <code>indentUnit</code>
-        deeper, pressing shift-tab, un-indents it.</dd>
-      </dl>
-      This option can be changed at run-time using the
-      <code>setTabMode(mode)</code> method.</dd>
-
-      <dt><code>enterMode</code></dt><dd>Determines how a new line
-      created by pressing enter is indented. Supported modes are:
-      <dl>
-        <dt><code>"indent"</code></dt><dd>The default. Causes the new
-        line to be intented by the rules of the parser.</dd>
-        <dt><code>"keep"</code></dt><dd>Keeps the indentation of the
-        previous line.</dd>
-        <dt><code>"flat"</code></dt><dd>Never indents new lines.</dd>
-      </dl>
-      The <code>setEnterMode</code> method can be used to change this
-      option in a running editor.</dd>
-
-      <dt><code>electricChars</code></dt><dd>A boolean that can be
-      used to turn "electric chars" (characters that cause the current
-      line to be reindented when typed, such as <code>{</code> and
-      <code>}</code> in C-like languages) on and off. Default is
-      on.</dd>
-
-      <dt><code>reindentOnLoad</code></dt><dd>When <code>true</code>,
-      this causes the content of the editor to be reindented
-      immediately when the editor loads. Defaults to
-      <code>false</code>.</dd>
-
-      <dt><code>readOnly</code></dt><dd>When set to <code>true</code>,
-      the document is not editable.</dd>
-
-      <dt><code>domain</code></dt><dd>Can be set to the value
-      <code>document.domain</code> should have inside of the iframe.
-      Used to prevent access issues in IE, where this value isn't
-      automatically inherited by iframes.</dd>
-
-      <dt><code>initCallback</code></dt><dd>If set to a function, this
-      will be called (with the editor object as its argument) after
-      the editor has finished initialising.</dd>
-      
-      <dt><code>cursorActivity</code></dt><dd>A function that is
-      called every time the cursor moves, with the top-level node that
-      the cursor is inside or next to as an argument. Can be used to
-      have some controls react to the context of the cursor.</dd>
-
-      <dt><code>activeTokens</code></dt><dd>Can be set to a function
-      that will be called with <code>(spanNode, tokenObject,
-      editor)</code> arguments whenever a new token node is being
-      added to the document. Can be used to do things like add event
-      handlers to nodes. Should <em>not</em> change the DOM structure
-      of the node (so no turning the span into a link), since this
-      will greatly confuse the editor.</dd>
-
-      <dt id="parserConfig"><code>parserConfig</code></dt><dd>An
-      object value that is passed along to the parser to configure it.
-      What this object should look like depends on the parser
-      used.</dd>
-
-      <dt><code>content</code></dt><dd>The starting content of the
-      editor. You'll probably not want to provide a global default for
-      this, but add it to the <code>options</code> object passed to
-      individual editors as they are created.</dd>
-
-    </dl>
-
-    <h2 id="parsers">Parsers</h2>
-
-    <p>(If you want to use a CodeMirror parser to highlight a piece of
-    text, without creating an editor, see <a
-    href="highlight.html">this example</a>, and the <code><a
-    href="js/highlight.js">highlight.js</a></code> script.)</p>
-
-    <p>The following parsers come with the distribution of CodeMirror:</p>
-
-    <dl>
-      <dt><code><a href="js/parsexml.js">parsexml.js</a></code> (<a
-      href="htmltest.html">demo</a>)</dt><dd>A HTML/XML parser. Takes
-      a <code>useHTMLKludges</code> configuration option (see the
-      <code><a href="#parserConfig">parserConfig</a></code> option
-      above), which specifies whether the content of the editor is
-      HTML or XML, and things like self-closing tags (<code>br</code>,
-      <code>img</code>) exist. This defaults to <code>true</code>.
-      Example colours for the styles that this parser uses are defined
-      in <code><a
-      href="css/xmlcolors.css">css/xmlcolors.css</a></code>.</dd>
-
-      <dt><code><a
-      href="js/tokenizejavascript.js">tokenizejavascript.js</a></code>,
-      <code><a
-      href="js/parsejavascript.js">parseejavascript.js</a></code> (<a
-      href="jstest.html">demo</a>)</dt><dd>The JavaScript parser.
-      Example colours in <code><a
-      href="css/jscolors.css">css/jscolors.css</a></code>. Takes one
-      configuration option, <code>json</code>, that can be set when
-      the editor content is JSON data. It causes every opening brace
-      to be treated as the start of an object, rather than a
-      block.</dd>
-
-      <dt><code><a href="js/parsecss.js">parsecss.js</a></code> (<a
-      href="csstest.html">demo</a>)</dt><dd>A CSS parser. Styles in
-      <code><a
-      href="css/csscolors.css">css/csscolors.css</a></code></dd>
-
-      <dt><code><a
-      href="js/parsehtmlmixed.js">parsehtmlmixed.js</a></code> (<a
-      href="mixedtest.html">demo</a>)</dt><dd>A mixed-mode HTML
-      parser. Requires the XML, JavaScript, and CSS parsers to also be
-      loaded, so your <code>parserfile</code> option looks something
-      like <code>["parsexml.js", "parsecss.js",
-      "tokenizejavascript.js", "parsejavascript.js",
-      "parsehtmlmixed.js"]</code>.</dd>
-
-      <dt><code><a href="js/parsesparql.js">parsesparql.js</a></code>
-      (<a href="sparqltest.html">demo</a>)</dt><dd>Parses the <a
-      href="http://en.wikipedia.org/wiki/SPARQL">SPARQL</a> query
-      language. Example styles in <code><a
-      href="css/sparqlcolors.css">css/sparqlcolors.css</a></code></dd>
-
-      <dt><code><a
-      href="js/parsedummy.js">parsedummy.js</a></code></dt><dd>A
-      'dummy' parser to make it possible to edit plain text, or
-      documents for which no suitable parser exists.</dd>
-
-      <dt><code><a
-      href="contrib/php/js/parsephp.js">contrib/php/js/parsephp.js</a></code>
-      (<a href="contrib/php/index.html">demo</a>)</dt><dd>PHP parser.
-      There is also <code><a
-      href="contrib/php/js/parsephphtmlmixed.js">contrib/php/js/parsephphtmlmixed.js</a></code>,
-      which wraps this parser to allow mixed-mode HTML + PHP parsing.
-      This one takes a configuration parameter <code>opening</code>,
-      which should contain an array of XML processing instruction
-      openings (<code>&lt;?php</code>, <code>&lt;?</code> etc) which
-      can be used to open a PHP block. Default is
-      <code>["&lt;?php"]</code>.</dd>
-
-      <dt><code><a
-      href="contrib/python/js/parsepython.js">contrib/python/js/parsepython.js</a></code>
-      (<a href="contrib/python/index.html">demo</a>)</dt><dd>Python
-      parser.</dd>
-
-      <dt><code><a href="contrib/lua/js/parselua.js">contrib/lua/js/parselua.js</a></code>
-      (<a href="contrib/lua/index.html">demo</a>)</dt><dd>Lua
-      parser.</dd>
-
-    </dl>
-
-    <h2 id="programming">Programming Interface</h2>
-
-    <p>To be as flexible as possible, CodeMirror implements a very
-    plain editable field, without any accompanying buttons, bells, and
-    whistles. <code>CodeMirror</code> objects do, however, provide a
-    number of methods and properties that make it possible to add
-    extra functionality around the editor. <a
-    href="js/mirrorframe.js"><code>mirrorframe.js</code></a> provides
-    a basic example of their usage.</p>
-
-    <h3 id="properties">Properties</h3>
-
-    <dl>
-      <dt><code>frame</code></dt><dd>The editable frame.</dd>
-      <dt><code>win</code></dt><dd>The window of the editable frame.
-      Mostly useful for attaching event handlers.</dd>
-      <dt><code>wrapping</code></dt><dd>The <code>DIV</code> element
-      wrapped around the frame. This always has a CSS class of
-      <code>CodeMirror-wrapping</code>.</dd>
-    </dl>
-
-    <h3 id="methods">Methods</h3>
-
-    <dl>
-      <dt><code>getCode()</code> &#8594;
-      <code>string</code></dt><dd>Returns the current content of the
-      editor, as a string.</dd>
-
-      <dt><code>setCode(string)</code></dt><dd>Replaces the current
-      content of the editor with the given value.</dd>
-
-      <dt><code>focus()</code></dt><dd>Gives focus to the editor
-      frame.</dd>
-
-      <dt><code>selection()</code> &#8594;
-      <code>string</code></dt><dd>Returns the text that is currently
-      selected in the editor.</dd>
-
-      <dt><code>replaceSelection(string)</code></dt><dd>Replaces the
-      currently selected text with the given string. Will also cause
-      the editor frame to gain focus.</dd>
-
-      <dt><code>reindent()</code></dt><dd>Automatically re-indent the
-      whole document.</dd>
-
-      <dt><code>reindentSelection()</code></dt><dd>Automatically
-      re-indent the selected lines.</dd>
-
-      <dt><code>getSearchCursor(string, startPos, caseFold)</code>
-      &#8594; <code>cursor</code></dt><dd>The first argument provides
-      the string that should be searched for. The second determines
-      where to start searching. It can be <code>false</code> (or left
-      off) for the start of the document, <code>true</code> for the
-      current cursor position, or a <code>{line, character}</code>
-      object (as returned by <code>cursorPosition</code>, or created
-      yourself using a line handle and a number) to set a random
-      position. The third argument, a boolean, determines whether the
-      search will be case-sensitive. If it is not provided, the search
-      will only be case-sensitive if the search string contains
-      uppercase characters. Returns an object that provides an
-      interface for searching. Call its <code>findNext()</code> and
-      <code>findPrevious()</code> methods to search for an occurrence.
-      This returns <code>true</code> if something is found, or
-      <code>false</code> if the end or start of the document was
-      reached. When an occurrence has been found, you can call
-      <code>select()</code> to select it, or
-      <code>replace(string)</code> to replace it with a given string.
-      To find out where the match was found, call the
-      <code>position()</code> method, which returns a <code>{line,
-      character}</code> object. Note that letting the user change the
-      document, or programmatically changing it in any way except for
-      calling <code>replace</code> on the cursor itself, might cause a
-      cursor object to skip back to the beginning of the
-      document.</dd>
-
-      <dt><code>undo()</code></dt><dd>Undo one changeset, if available.</dd>
-      <dt><code>redo()</code></dt><dd>Redo one changeset, if available.</dd>
-      <dt><code>historySize() &#8594; object</code></dt><dd>Get a
-      <code>{undo, redo}</code> object holding the sizes of the undo
-      and redo histories.</dd>
-      <dt><code>clearHistory()</code></dt><dd>Drop all history
-      information.</dd>
-
-      <dt><code>grabKeys(callback, filter)</code></dt><dd>Route
-      keyboard input in the editor to a callback function. This
-      function is given a slightly normalised (see
-      <code>normalizeEvent</code> in <a
-      href="js/util.js"><code>util.js</code></a>) <code>keydown</code>
-      event object. If a second argument is given, this will be used
-      to determine which events to apply the callback to. It should
-      take a key code (as in <code>event.keyCode</code>), and return a
-      boolean, where <code>true</code> means the event should be
-      routed to the callback, and <code>false</code> leaves the key to
-      perform its normal behaviour.</dd>
-      <dt><code>ungrabKeys()</code></dt><dd>Revert the effect of
-      <code>grabKeys</code>.</dd>
-
-      <dt><code>setParser(name, parserConfig)</code></dt><dd>Change
-      the active parser. To use this you'll have to load more than one
-      parser (put the one you want to use as default at the end of the
-      list). Then call this function with a string containing the name
-      of the parser you want to switch to (see the parser script file
-      to find the name, it'll be something like
-      <code>CSSParser</code>). The second argument is optional, and
-      can be used to pass a new parser configuration object.</dd>
-
-      <dt><code>cursorCoords(start)</code></dt><dd>Get the coordinates
-      of the cursor in the editor, relative to the top-left corner of
-      the outer document. Normally returns an object with
-      <code>x</code>, <code>y</code>, and <code>yBot</code> (the
-      bottom of the cursor) properties. May return <code>null</code>
-      if the cursor position could not be determined (for example, if
-      the editor is not focused).</dd>
-    </dl>
-
-    <h3 id="lines">Line Manipulation</h3>
-
-    <p>For detailed interaction with the content of the editor,
-    CodeMirror exposes a line-oriented interface, which allows you to
-    inspect and manipulate the document line by line. Line handles
-    should be considered opaque (they are in fact the <code>BR</code>
-    nodes at the start of the line), except that the value
-    <code>false</code> (but <em>not</em> <code>null</code>) always
-    denotes an invalid value. Since changing the document might cause
-    some line handles to become invalid, every function that takes
-    them as argument can throw
-    <code>CodeMirror.InvalidLineHandle</code>. These are the relevant
-    methods:</p>
-
-    <dl>
-      <dt><code>cursorPosition(start)</code> &#8594;
-      <code>object</code></dt><dd>Retrieve a <code>{line,
-      character}</code> object representing the cursor position.
-      <code>start</code> defaults to <code>true</code> and determines
-      if the startpoint or the endpoint of the selection is used.</dd>
-      <dt><code>cursorLine()</code> &#8594;
-      <code>handle</code></dt><dd>Returns the line on which the cursor
-      is currently sitting.</dd>
-      <dt><code>firstLine()</code> &#8594;
-      <code>handle</code></dt><dd>Get the first line of the
-      document.</dd>
-      <dt><code>lastLine()</code> &#8594;
-      <code>handle</code></dt><dd>The last line.</dd>
-      <dt><code>nextLine(handle)</code> &#8594;
-      <code>handle</code></dt><dd>Get the line after the given one, or
-      <code>false</code> if that was the last line.</dd>
-      <dt><code>prevLine(handle)</code> &#8594;
-      <code>handle</code></dt><dd>Find the line before the given one,
-      return <code>false</code> if that was the first line.</dd>
-      <dt><code>nthLine(number)</code> &#8594;
-      <code>handle</code></dt><dd>Find the Nth line of the document.
-      Note that the first line counts as one, not zero. Returns
-      <code>false</code> if there is no such line.</dd>
-      <dt><code>lineContent(handle)</code> &#8594;
-      <code>string</code></dt><dd>Retrieve the content of the
-      line.</dd>
-      <dt><code>setLineContent(handle, string)</code></dt><dd>Replace
-      the content of the line with the given string.</dd>
-      <dt><code>removeLine(handle)</code></dt><dd>Remove the given
-      line from the editor. The handle will stay valid after this
-      operation, and now refers to the next line.</dd>
-      <dt><code>lineNumber(handle)</code> &#8594;
-      <code>number</code></dt><dd>Ask which line of the document
-      (1-based) the given line is.</dd>
-      <dt><code>jumpToLine(handle)</code></dt><dd>Moves the cursor to
-      the start of the given line.</dd>
-      <dt><code>selectLines(startHandle, startOffset,
-      endHandle, endOffset)</code></dt><dd>Move the selection to a
-      specific point. <code>endHandle</code> and
-      <code>endOffset</code> can be omitted to just place the cursor
-      somewhere without selecting any text.</dd>
-      <dt><code>insertIntoLine(handle, position,
-      text)</code></dt><dd>Insert a piece of text into a line.
-      <code>position</code> can be an integer, specifying the position
-      in the line where the text should be inserted, or the string
-      <code>"end"</code>, for the end of the line.</dd>
-    </dl>
-
-    <h2 id="writeparser">Writing a Parser</h2>
-
-    <p>A parser is implemented by one or more files (see
-    <code>parserfile</code> above) which, when loaded, add a
-    <code>Parser</code> property to the <code>Editor</code> object
-    defined by <a href="js/editor.js"><code>editor.js</code></a>. This
-    object must support the following interface:</p>
-
-    <dl>
-
-      <dt><code>make(stream)</code></dt><dd>A function that, given a
-      string stream (see <a
-      href="js/stringstream.js"><code>stringstream.js</code></a>),
-      creates a parser. The behaviour of this parser is described
-      below.</dd>
-
-      <dt><code>electricChars</code></dt><dd>An optional string
-      containing the characters that, when typed, should cause the
-      indentation of the current line to be recomputed (for example
-      <code>"{}"</code> for c-like languages).</dd>
-
-      <dt><code>configure(object)</code></dt><dd>An optional function
-      that can be used to configure the parser. If it exists, and an
-      editor is given a <code>parserConfig</code> option, it will be
-      called with the value of that option.</dd>
-
-      <dt><code>firstIndentation(chars, current,
-      direction)</code></dt><dd>An optional function that is used to
-      determine the proper indentation of the first line of a
-      document. When not provided, <code>0</code> is used.</dd>
-    </dl>
-
-    <p>When the <code>make</code> method is called with a string
-    stream, it should return a MochiKit-style iterator: an object with
-    a <code>next</code> method, which will raise
-    <code>StopIteration</code> when it is at its end (see <a
-    href="http://bob.pythonmac.org/archives/2005/07/06/iteration-in-javascript/">this</a>
-    for details). This iterator, when called, will consume input from
-    the string stream, and produce a token object.</p>
-
-    <p>Token objects represent a single significant piece of the text
-    that is being edited. A token object must have a
-    <code>value</code> property holding the text it stands for, and a
-    <code>style</code> property with the CSS class that should be used
-    to colour this element. This can be anything, except that any
-    whitespace at the start of a line should <em>always</em> have
-    class <code>"whitespace"</code>: The editor must be able to
-    recognize these when it indents lines. Furthermore, each newline
-    character <em>must</em> have its own separate token, which has an
-    <code>indentation</code> property holding a function that can be
-    used to determine the proper indentation level for the next line.
-    This function optionally takes the text in the first token of the
-    next line, the current indentation of the line, and the
-    'direction' of the indentation as arguments, which it can use to
-    adjust the indentation level. The direction argument is only
-    useful for modes in which lines do not have a fixed indentation,
-    and can be modified by multiple tab presses. It is
-    <code>null</code> for 'default' indentations (like what happens
-    when the user presses enter), <code>true</code> for regular tab
-    presses, and <code>false</code> for control-tab or shift-tab.</p>
-
-    <p>So far this should be pretty easy. The hard part is that this
-    iterator must also have a <code>copy</code> method. This method,
-    called without arguments, returns a function representing the
-    current state of the parser. When this state function is later
-    called with a string stream as its argument, it returns a parser
-    object that resumes parsing using the old state and the new input
-    stream. It may assume that only one parser is active at a time,
-    and can clobber the state of the old parser if it wants.</p>
-
-    <p>For examples, see <a
-    href="js/parsejavascript.js"><code>parsejavascript.js</code></a>,
-    <a href="js/parsexml.js"><code>parsexml.js</code></a>, and <a
-    href="js/parsecss.js"><code>parsecss.js</code></a>.</p>
-
-</div><div class="rightsmall blk">
-
-  <h2>Contents</h2>
-
-  <ul>
-    <li><a href="#usage">Basic Usage</a></li>
-    <li><a href="#configuration">Configuration</a></li>
-    <li><a href="#parsers">Parsers</a></li>
-    <li><a href="#programming">Programming Interface</a>
-    <ul>
-      <li><a href="#properties">Properties</a></li>
-      <li><a href="#methods">Methods</a></li>
-      <li><a href="#lines">Line Manipulation</a></li>
-    </ul>
-    </li>
-    <li><a href="#writeparser">Writing a Parser</a></li>
-  </ul>
-
-  <h2>Site</h2>
-
-  <ul>
-    <li><a href="index.html">Front Page</a></li>
-    <li><a href="faq.html">FAQ</a></li>
-    <li><a href="http://groups.google.com/group/codemirror">Google Group</a></li>
-    <li><a href="compress.html">Compression Helper</a></li>
-    <li><a href="story.html">War Story</a></li>
-  </ul>
-
-</div></div>
-
-<div style="height: 2em">&nbsp;</div>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/mixedtest.html b/typo3/contrib/codemirror/mixedtest.html
deleted file mode 100644 (file)
index 46d25da..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/codemirror.js" type="text/javascript"></script>
-    <title>CodeMirror: HTML mixed-mode demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-  </head>
-  <body style="padding: 20px;">
-
-<p>This is a simple demonstration of the HTML mixed-mode indentation
-module for <a href="index.html">CodeMirror</a>. Script tags use the JS
-parser, style tags use the CSS parser.</p>
-
-<div style="border: 1px solid black; padding: 3px;">
-<textarea id="code" cols="120" rows="30">
-&lt;html>
-  &lt;head>
-    &lt;title>HTML Example&lt;/title>
-    &lt;script type="text/javascript">
-      function foo(bar, baz) {
-        alert("quux");
-        return bar + baz + 1;
-      }
-    &lt;/script>
-    &lt;style type="text/css">
-      div.border {
-        border: 1px solid black;
-        padding: 3px;
-      }
-      #foo code {
-        font-family: courier, monospace;
-        font-size: 80%;
-        color: #448888;
-      }
-    &lt;/style>
-  &lt;/head>
-  &lt;body>
-    &lt;p>Duh&lt;/p>
-  &lt;/body>
-&lt;/html>
-</textarea>
-</div>
-
-<script type="text/javascript">
-  var editor = CodeMirror.fromTextArea('code', {
-    height: "350px",
-    parserfile: ["parsexml.js", "parsecss.js", "tokenizejavascript.js", "parsejavascript.js", "parsehtmlmixed.js"],
-    stylesheet: ["css/xmlcolors.css", "css/jscolors.css", "css/csscolors.css"],
-    path: "js/"
-  });
-</script>
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/sparqltest.html b/typo3/contrib/codemirror/sparqltest.html
deleted file mode 100644 (file)
index 5d65c93..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-<html xmlns="http://www.w3.org/1999/xhtml">
-  <head>
-    <script src="js/codemirror.js" type="text/javascript"></script>
-    <title>CodeMirror: Sparql demonstration</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-  </head>
-  <body style="padding: 20px;">
-
-<p>Demonstration of <a href="index.html">CodeMirror</a>'s Sparql
-highlighter.</p>
-
-<div class="border">
-<textarea id="code" cols="120" rows="30">
-PREFIX a: &lt;http://www.w3.org/2000/10/annotation-ns#>
-PREFIX dc: &lt;http://purl.org/dc/elements/1.1/>
-PREFIX foaf: &lt;http://xmlns.com/foaf/0.1/>
-
-# Comment!
-
-SELECT ?given ?family
-WHERE {
-  ?annot a:annotates &lt;http://www.w3.org/TR/rdf-sparql-query/> .
-  ?annot dc:creator ?c .
-  OPTIONAL {?c foaf:given ?given ;
-               foaf:family ?family } .
-  FILTER isBlank(?c)
-}
-</textarea>
-</div>
-
-<script type="text/javascript">
-  var editor = CodeMirror.fromTextArea('code', {
-    height: "250px",
-    parserfile: "parsesparql.js",
-    stylesheet: "css/sparqlcolors.css",
-    path: "js/"
-  });
-</script>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/story.html b/typo3/contrib/codemirror/story.html
deleted file mode 100644 (file)
index fbf7e96..0000000
+++ /dev/null
@@ -1,671 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
-<html>
-  <head>
-    <title>Implementing a Syntax-Highlighting JavaScript Editor In JavaScript</title>
-    <link rel="stylesheet" type="text/css" href="css/docs.css"/>
-    <link rel="stylesheet" type="text/css" href="http://fonts.googleapis.com/css?family=Droid+Sans|Droid+Sans+Mono|Droid+Sans:bold"/>
-    <link rel="stylesheet" type="text/css" href="css/jscolors.css"/>
-    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
-  </head>
-  <body>
-
-<h1 style="letter-spacing: -2px">Implementing a Syntax-Highlighting JavaScript Editor In JavaScript</h1>
-
-<pre class="grey">
-/* A brutal odyssey to the dark
-   side of the DOM tree */
-</pre>
-
-<div class="clear"><div class="leftbig blk">
-
-  <p>In one of his (very informative) <a
-  href="http://www.learnwebdesignonline.com/videos/programming/javascript/yahoo-douglas-crockford">video
-  lectures</a>, Douglas Crockford remarks that writing JavaScript
-  for the web is 'programming in a hostile environment'. I had done
-  my fair share of weird workarounds, and even occasonally gave up
-  an on idea entirely because browsers just wouldn't support it, but
-  before this project I never really realized just how powerless a
-  programmer can be in the face of buggy, incompatible, and poorly
-  designed platforms.</p>
-
-  <p>The plan was not ridiculously ambitious. I wanted to 'enhance' a
-  textarea to the point where writing code in it is pleasant. This meant
-  automatic indentation and, if possible at all, syntax highlighting.</p>
-
-  <p>In this document I describe the story of implementing this, for your
-  education and amusement. A demonstration of the resulting program,
-  along with the source code, can be found at <a
-  href="http://codemirror.net/">the project website</a>.</p>
-
-  <p style="color: #811; font-size: 90%; font-style: italic">Note:
-  some of the details given here no longer apply to the current <a
-  href="http://codemirror.net/">CodeMirror</a> codebase, which has
-  evolved quite a bit in the meantime.</p>
-
-  <h2 id="indent">Take one: Only indentation</h2>
-
-  <p>The very first attempt merely added auto-indentation to a textarea
-  element. It would scan backwards through the content of the area,
-  starting from the cursor, until it had enough information to decide
-  how to indent the current line. It took me a while to figure out a
-  decent model for indenting JavaScript code, but in the end this seems
-  to work:</p>
-
-  <ul>
-    <li>Code that sits inside a block is indented one unit (generally two
-    spaces) more than the statement or brace that opened the block.</li>
-    <li>A statement that is continued to the next line is indented one unit
-    more than the line that starts the statement.</li>
-    <li>When dealing with lists of arguments or the content of array and
-    object literals there are two possible models. If there is any text
-    directly after the opening brace, bracket, or parenthesis,
-    subsequent lines are aligned with this opening character. If the
-    opening character is followed by a newline (optionally with whitespace
-    or comments before it), the next line is indented one unit further
-    than the line that started the list.</li>
-    <li>And, obviously, if a statement follows another statement it is
-    indented the same amount as the one before it.</li>
-  </ul>
-
-  <p>When scanning backwards through code one has to take string values,
-  comments, and regular expressions (which are delimited by slashes)
-  into account, because braces and semicolons and such are not
-  significant when they appear inside them. Single-line ('//') comments
-  turned out to be rather inefficient to check for when doing a
-  backwards scan, since every time you encounter a newline you have to
-  go on to the next newline to determine whether this line ends in a
-  comment or not. Regular expressions are even worse &#x2015; without
-  contextual information they are impossible to distinguish from the
-  division operator, and I didn't get them working in this first
-  version.</p>
-
-  <p>To find out which line to indent, and to make sure that adding or
-  removing whitespace doesn't cause the cursor to jump in strange ways,
-  it is necessary to determine which text the user has selected. Even
-  though I was working with just a simple textarea at this point, this
-  was already a bit of a headache.</p>
-
-  <p>On W3C-standards-respecting browsers, textarea nodes have
-  <code>selectionStart</code> and <code>selectionEnd</code>
-  properties which nicely give you the amount of characters before
-  the start and end of the selection. Great!</p>
-
-  <p>Then, there is Internet Explorer. Internet Explorer also has an API
-  for looking at and manipulating selections. It gives you information
-  such as a detailed map of the space the selected lines take up on the
-  screen, in pixels, and of course the text inside the selection. It
-  does, however, not give you much of a clue on where the selection is
-  located in the document.</p>
-
-  <p>After some experimentation I managed to work out an elaborate
-  method for getting something similar to the
-  <code>selectionStart</code> and <code>selectionEnd</code> values
-  in other browsers. It worked like this:</p>
-
-  <ul>
-    <li>Get the <code>TextRange</code> object corresponding to the selection.</li>
-    <li>Record the length of the text inside it.</li>
-    <li>Make another <code>TextRange</code> that covers the whole textarea element.</li>
-    <li>Set the start of the first <code>TextRange</code> to the start of the second one.</li>
-    <li>Again get the length of the text in the first object.</li>
-    <li>Now <code>selectionEnd</code> is the second length, and <code>selectionStart</code> is
-    the second minus the first one.</li>
-  </ul>
-
-  <p>That seemed to work, but when resetting the selection after modifying
-  the content of the textarea I ran into another interesting feature of
-  these <code>TextRange</code>s: You can move their endpoints by a given number of
-  characters, which is useful when trying to set a cursor at the Nth
-  character of a textarea, but in this context, newlines are <em>not</em>
-  considered to be characters, so you'll always end up one character too
-  far for every newline you passed. Of course, you can count newlines
-  and compensate for this (though it is still not possible to position
-  the cursor right in front of a newline). Sheesh.</p>
-
-  <p>After ragging on Internet Explorer for a while, let us move on and rag
-  on Firefox a bit. It turns out that, in Firefox, getting and setting
-  the text content of a DOM element is unexplainably expensive,
-  especially when there is a lot of text involved. As soon as I tried to
-  use my indentation code to indent itself (some 400 lines), I found
-  myself waiting for over four seconds every time I pressed enter. That
-  seemed a little slow.</p>
-
-  <h2 id="designmode">designMode it is</h2>
-
-  <p>The solution was obvious: Since the text inside a textarea can only be
-  manipulated as one single big string, I had to spread it out over
-  multiple nodes. How do you spread editable content over multiple
-  nodes? Right! <code>designMode</code> or <code>contentEditable</code>.</p>
-
-  <p>Now I wasn't entirely naive about <code>designMode</code>, I had been looking
-  into writing a non-messy WYSIWYG editor before, and at that time I had
-  concluded two things:</p>
-
-  <ul>
-    <li>It is impossible to prevent the user from inserting whichever HTML
-    junk he wants into the document.</li>
-    <li>In Internet Explorer, it is extemely hard to get a good view
-    on what nodes the user has selected.</li>
-  </ul>
-
-  <p>Basically, the good folks at Microsoft designed a really bad interface
-  for putting editable documents in pages, and the other browsers, not
-  wanting to be left behind, more or less copied that. And there isn't
-  much hope for a better way to do this appearing anytime soon. Wise
-  people probably use a Flash movie or (God forbid) a Java applet for
-  these kind of things, though those are not without drawbacks either.</p>
-
-  <p>Anyway, seeing how using an editable document would also make syntax
-  highlighting possible, I foolishly went ahead. There is something
-  perversely fascinating about trying to build a complicated system on a
-  lousy, unsuitable platform.</p>
-
-  <h2 id="parser">A parser</h2>
-
-  <p>How does one do decent syntax highlighting? A very simple scanning can
-  tell the difference between strings, comments, keywords, and other
-  code. But this time I wanted to actually be able to recognize regular
-  expressions, so that I didn't have any blatant incorrect behaviour
-  anymore.</p>
-
-  <p>That brought me to the idea of doing a serious parse on the code. This
-  would not only make detecting regular expressions much easier, it
-  would also give me detailed information about the code, which can be
-  used to determine proper indentation levels, and to make subtle
-  distinctions in colouring, for example the difference between variable
-  names and property names.</p>
-
-  <p>And hey, when we're parsing the whole thing, it would even be possible
-  to make a distinction between local and global variables, and colour
-  them differently. If you've ever programmed JavaScript you can
-  probably imagine how useful this would be &#x2015; it is ridiculously easy
-  to accidentally create global instead of local variables. I don't
-  consider myself a JavaScript rookie anymore, but it was (embarrasingly
-  enough) only this week that I realized that my habit of typing <code>for
-  (name in object) ...</code> was creating a global variable <code>name</code>, and that
-  I should be typing <code>for (var name in object) ...</code> instead.</p>
-
-  <p>Re-parsing all the code the user has typed in every time he hits a key
-  is obviously not feasible. So how does one combine on-the-fly
-  highlighting with a serious parser? One option would be to split the
-  code into top-level statements (functions, variable definitions, etc.)
-  and parse these separately. This is horribly clunky though, especially
-  considering the fact that modern JavaScripters often put all the code
-  in a file in a single big object or function to prevent namespace
-  pollution.</p>
-
-  <p>I have always liked continuation-passing style and generators. So the
-  idea I came up with is this: An interruptable, resumable parser. This
-  is a parser that does not run through a whole document at once, but
-  parses on-demand, a little bit at a time. At any moment you can create
-  a copy of its current state, which can be resumed later. You start
-  parsing at the top of the code, and keep going as long as you like,
-  but throughout the document, for example at every end of line, you
-  store a copy of the current parser state. Later on, when line 106
-  changes, you grab the interrupted parser that was stored at the end of
-  line 105, and use it to re-parse line 106. It still knows exactly what
-  the context was at that point, which local variables were defined,
-  which unfinished statements were encountered, and so on.</p>
-
-  <p>But that, unfortunately, turned out to be not quite as easy as it
-  sounds.</p>
-
-  <h2 id="dom">The DOM nodes underfoot</h2>
-
-  <p>Of course, when working inside an editable frame we don't just
-  have to deal with text. The code will be represented by some kind
-  of DOM tree. My first idea was to set the <code>white-space:
-  pre</code> style for the frame and try to work with mostly text,
-  with the occasional coloured <code>span</code> element. It turned
-  out that support for <code>white-space: pre</code> in browsers,
-  especially in editable frames, is so hopelessly glitchy that this
-  was unworkable.</p>
-
-  <p>Next I tried a series of <code>div</code> elements, one per
-  line, with <code>span</code> elements inside them. This seemed to
-  nicely reflect the structure of the code in a shallowly
-  hierarchical way. I soon realized, however, that my code would be
-  much more straightfoward when using no hierarchy whatsoever
-  &#x2015; a series of <code>span</code>s, with <code>br</code> tags
-  at the end of every line. This way, the DOM nodes form a flat
-  sequence that corresponds to the sequence of the text &#x2015;
-  just extract text from <code>span</code> nodes and substitute
-  newlines for <code>br</code> nodes.</p>
-
-  <p>It would be a shame if the editor would fall apart as soon as
-  someone pastes some complicated HTML into it. I wanted it to be
-  able to deal with whatever mess it finds. This means using some
-  kind of HTML-normalizer that takes arbitrary HTML and flattens it
-  into a series of <code>br</code>s and <code>span</code> elements
-  that contain a single text node. Just like the parsing process, it
-  would be best if this did not have to done to the entire buffer
-  every time something changes.</p>
-
-  <p>It took some banging my head against my keyboard, but I found a very
-  nice way to model this. It makes heavy use of generators, for which I
-  used <a href="http://www.mochikit.com">MochiKit</a>'s iterator
-  framework. Bob Ippolito explains the concepts in this library very
-  well in his <a
-  href="http://bob.pythonmac.org/archives/2005/07/06/iteration-in-javascript/">blog
-  post</a> about it. (Also notice some of the dismissive comments at the
-  bottom of that post. They say "I don't think I really want to learn
-  this, so I'll make up some silly reason to condemn it.")</p>
-
-  <p>The highlighting process consists of the following elements:
-  normalizing the DOM tree, extracting the text from the DOM tree,
-  tokenizing this text, parsing the tokens, and finally adjusting the
-  DOM nodes to reflect the structure of the code.</p>
-
-  <p>The first two, I put into a single generator. It scans the DOM
-  tree, fixing anything that is not a simple top-level
-  <code>span</code> or <code>br</code>, and it produces the text
-  content of the nodes (or a newline in case of a <code>br</code>)
-  as its output &#x2015; each time it is called, it yields a string.
-  Continuation passing style was a good way to model this process in
-  an iterator, which has to be processed one step at a time. Look at
-  this simplified version:</p>
-
-  <pre class="code" style="width: 110%"><span class="js-keyword">function</span> <span class="js-variable">traverseDOM</span>(<span class="js-variabledef">start</span>){
-  <span class="js-keyword">var</span> <span class="js-variabledef">cc</span> = <span class="js-keyword">function</span>(){<span class="js-keyword">return</span> <span class="js-variable">scanNode</span>(<span class="js-localvariable">start</span>, <span class="js-variable">stop</span>);};
-  <span class="js-keyword">function</span> <span class="js-variabledef">stop</span>(){
-    <span class="js-localvariable">cc</span> = <span class="js-localvariable">stop</span>;
-    <span class="js-keyword">throw</span> <span class="js-variable">StopIteration</span>;
-  }
-  <span class="js-keyword">function</span> <span class="js-variabledef">yield</span>(<span class="js-variabledef">value</span>, <span class="js-variabledef">c</span>){
-    <span class="js-localvariable">cc</span> = <span class="js-localvariable">c</span>;
-    <span class="js-keyword">return</span> <span class="js-localvariable">value</span>;
-  }
-  <span class="js-keyword">function</span> <span class="js-variabledef">scanNode</span>(<span class="js-variabledef">node</span>, <span class="js-variabledef">c</span>){
-    <span class="js-keyword">if</span> (<span class="js-localvariable">node</span>.<span class="js-property">nextSibling</span>)
-      <span class="js-keyword">var</span> <span class="js-variabledef">nextc</span> = <span class="js-keyword">function</span>(){<span class="js-keyword">return</span> <span class="js-localvariable">scanNode</span>(<span class="js-localvariable">node</span>.<span class="js-property">nextSibling</span>, <span class="js-localvariable">c</span>);};
-    <span class="js-keyword">else</span> 
-      <span class="js-keyword">var</span> <span class="js-variabledef">nextc</span> = <span class="js-localvariable">c</span>;
-    <span class="js-keyword">if</span> (<span class="js-comment">/* node is proper span element */</span>)
-      <span class="js-keyword">return</span> <span class="js-localvariable">yield</span>(<span class="js-localvariable">node</span>.<span class="js-property">firstChild</span>.<span class="js-property">nodeValue</span>, <span class="js-localvariable">nextc</span>);
-    <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-comment">/* node is proper br element */</span>)
-      <span class="js-keyword">return</span> <span class="js-localvariable">yield</span>(<span class="js-string">&quot;\n&quot;</span>, <span class="js-localvariable">nextc</span>);
-    <span class="js-keyword">else</span> 
-      <span class="js-comment">/* flatten node, yield its textual content */</span>;
-  }
-  <span class="js-keyword">return</span> {<span class="js-property">next</span>: <span class="js-keyword">function</span>(){<span class="js-keyword">return</span> <span class="js-localvariable">cc</span>();}};
-}</pre> 
-
-  <p>The variable <code>c</code> stands for 'continuation', and <code>cc</code> for 'current
-  continuation' &#x2015; that last variable is used to store the function to
-  continue with, when yielding a value to the outside world. Every time
-  control leaves this function, it has to make sure that <code>cc</code> is set to
-  a suitable value, which is what <code>yield</code> and <code>stop</code> take care of.</p>
-
-  <p>The object that is returned contains a <code>next</code> method, which is
-  MochiKit's idea of an iterator, and the initial continuation just
-  throws a <code>StopIteration</code>, which is how MochiKit signals that an
-  iterator has reached its end.</p>
-
-  <p>The first lines of <code>scanNode</code> extend the continuation with the task of
-  scanning the next node, if there is a next node. The rest of the
-  function decides what kind of value to <code>yield</code>. Note that this is a
-  rather trivial example of this technique, since the process of going
-  through these nodes is basically linear (it was much, much more
-  complex in earlier versions), but still the trick with the
-  continuations makes the code shorter and, for those in the know,
-  clearer than the equivalent 'storing the iterator state in variables'
-  approach.</p>
-
-  <p>The next iterator that the input passes through is the
-  tokenizer. Well, actually, there is another iterator in between
-  that isolates the tokenizer from the fact that the DOM traversal
-  yields a bunch of separate strings, and presents them as a single
-  character stream (with a convenient <code>peek</code> operation),
-  but this is not a very interesting one. What the tokenizer returns
-  is a stream of token objects, each of which has a
-  <code>value</code>, its textual content, a <code>type</code>, like
-  <code>"variable"</code>, <code>"operator"</code>, or just itself,
-  <code>"{"</code> for example, in the case of significant
-  punctuation or special keywords. They also have a
-  <code>style</code>, which is used later by the highlighter to give
-  their <code>span</code> elements a class name (the parser will
-  still adjust this in some cases).</p>
-
-  <p>At first I assumed the parser would have to talk back to the
-  tokenizer about the current context, in order to be able to
-  distinguish those accursed regular expressions from divisions, but
-  it seems that regular expressions are only allowed if the previous
-  (non-whitespace, non-comment) token was either an operator, a
-  keyword like <code>new</code> or <code>throw</code>, or a specific
-  kind of punctuation (<code>"[{}(,;:"</code>) that indicates a new
-  expression can be started here. This made things considerably
-  easier, since the 'regexp or no regexp' question could stay
-  entirely within the tokenizer.</p>
-
-  <p>The next step, then, is the parser. It does not do a very
-  thorough job because, firstly, it has to be fast, and secondly, it
-  should not go to pieces when fed an incorrect program. So only
-  superficial constructs are recognized, keywords that resemble each
-  other in syntax, such as <code>while</code> and <code>if</code>,
-  are treated in precisely the same way, as are <code>try</code> and
-  <code>else</code> &#x2015; the parser doesn't mind if an
-  <code>else</code> appears without an <code>if</code>. Stuff that
-  binds variables, <code>var</code>, <code>function</code>, and
-  <code>catch</code> to be precise, is treated with more care,
-  because the parser wants to know about local variables.</p>
-
-  <p>Inside the parser, three kinds of context are stored. Firstly, a set
-  of known local variables, which is used to adjust the style of
-  variable tokens. Every time the parser enters a function, a new set of
-  variables is created. If there was already such a set (entering an
-  inner function), a pointer to the old one is stored in the new one. At
-  the end of the function, the current variable set is 'popped' off and
-  the previous one is restored.</p>
-
-  <p>The second kind of context is the lexical context, this keeps track of
-  whether we are inside a statement, block, or list. Like the variable
-  context, it also forms a stack of contexts, with each one containing a
-  pointer to the previous ones so that they can be popped off again when
-  they are finished. This information is used for indentation. Every
-  time the parser encounters a newline token, it attaches the current
-  lexical context and a 'copy' of itself (more about that later) to this
-  token.</p>
-
-  <p>The third context is a continuation context. This parser does not use
-  straight continuation style, instead it uses a stack of actions that
-  have to be performed. These actions are simple functions, a kind of
-  minilanguage, they act on tokens, and decide what kind of new actions
-  should be pushed onto the stack. Here are some examples:</p>
-
-  <pre class="code" style="width: 110%"><span class="js-keyword">function</span> <span class="js-variable">expression</span>(<span class="js-variabledef">type</span>){
-  <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> in <span class="js-variable">atomicTypes</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">maybeoperator</span>);
-  <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;function&quot;</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">functiondef</span>);
-  <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;(&quot;</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">pushlex</span>(<span class="js-string">&quot;list&quot;</span>), <span class="js-variable">expression</span>, <span class="js-variable">expect</span>(<span class="js-string">&quot;)&quot;</span>), <span class="js-variable">poplex</span>);
-  <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;operator&quot;</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">expression</span>);
-  <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;[&quot;</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">pushlex</span>(<span class="js-string">&quot;list&quot;</span>), <span class="js-variable">commasep</span>(<span class="js-variable">expression</span>), <span class="js-variable">expect</span>(<span class="js-string">&quot;]&quot;</span>), <span class="js-variable">poplex</span>);
-  <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;{&quot;</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">pushlex</span>(<span class="js-string">&quot;list&quot;</span>), <span class="js-variable">commasep</span>(<span class="js-variable">objprop</span>), <span class="js-variable">expect</span>(<span class="js-string">&quot;}&quot;</span>), <span class="js-variable">poplex</span>);
-  <span class="js-keyword">else</span> <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;keyword c&quot;</span>)
-    <span class="js-variable">cont</span>(<span class="js-variable">expression</span>);
-}
-<span class="js-keyword">function</span> <span class="js-variable">block</span>(<span class="js-variabledef">type</span>){
-  <span class="js-keyword">if</span> (<span class="js-localvariable">type</span> == <span class="js-string">&quot;}&quot;</span>) <span class="js-variable">cont</span>();
-  <span class="js-keyword">else</span> <span class="js-variable">pass</span>(<span class="js-variable">statement</span>, <span class="js-variable">block</span>);
-}</pre>
-
-  <p>The function <code>cont</code> (for continue), will push the actions it is given
-  onto the stack (in reverse order, so that the first one will be popped
-  first). Actions such as <code>pushlex</code> and <code>poplex</code> merely adjust the
-  lexical environment, while others, such as <code>expression</code> itself, do
-  actual parsing. <code>pass</code>, as seen in <code>block</code>, is similar to <code>cont</code>, but
-  it does not 'consume' the current token, so the next action will again
-  see this same token. In <code>block</code>, this happens when the function
-  determines that we are not at the end of the block yet, so it pushes
-  the <code>statement</code> function which will interpret the current token as the
-  start of a statement.</p>
-
-  <p>These actions are called by a 'driver' function, which filters out the
-  whitespace and comments, so that the parser actions do not have to
-  think about those, and keeps track of some things like the indentation
-  of the current line and the column at which the current token ends,
-  which are stored in the lexical context and used for indentation.
-  After calling an action, if the action called <code>cont</code>, this driver
-  function will return the current token, if <code>pass</code> (or nothing) was
-  called, it will immediately continue with the next action.</p>
-
-  <p>This goes to show that it is viable to write a quite elaborate
-  minilanguage in a macro-less language like JavaScript. I don't think
-  it would be possible to do something like this without closures (or
-  similarly powerful abstraction) though, I've certainly never seen
-  anything like it in Java code.</p>
-
-  <p>The way a 'copy' of the parser was produced shows a nice usage
-  of closures. Like with the DOM transformer shown above, most of
-  the local state of the parser is held in a closure produced by
-  calling <code>parse(stream)</code>. The function
-  <code>copy</code>, which is local to the parser function, produces
-  a new closure, with copies of all the relevant variables:</p>
-
-  <pre class="code"><span class="js-keyword">function</span> <span class="js-variable">copy</span>(){
-  <span class="js-keyword">var</span> <span class="js-variabledef">_context</span> = <span class="js-variable">context</span>, <span class="js-variabledef">_lexical</span> = <span class="js-variable">lexical</span>,
-      <span class="js-variabledef">_actions</span> = <span class="js-variable">copyArray</span>(<span class="js-variable">actions</span>);
-  <span class="js-keyword">return</span> <span class="js-keyword">function</span>(<span class="js-variabledef">_tokens</span>){
-    <span class="js-variable">context</span> = <span class="js-localvariable">_context</span>;
-    <span class="js-variable">lexical</span> = <span class="js-localvariable">_lexical</span>;
-    <span class="js-variable">actions</span> = <span class="js-variable">copyArray</span>(<span class="js-localvariable">_actions</span>);
-    <span class="js-variable">tokens</span> = <span class="js-localvariable">_tokens</span>;
-    <span class="js-keyword">return</span> <span class="js-variable">parser</span>;
-  };
-}</pre>
-
-  <p>Where <code>parser</code> is the object that contains the <code>next</code> (driver)
-  function, and a reference to this <code>copy</code> function. When the function
-  that <code>copy</code> produces is called with a token stream as argument, it
-  updates the local variables in the parser closure, and returns the
-  corresponding iterator object.</p>
-
-  <p>Moving on, we get to the last stop in this chain of generators, the
-  actual highlighter. You can view this one as taking two streams as
-  input, on the one hand there is the stream of tokens from the parser,
-  and on the other hand there is the DOM tree as left by the DOM
-  transformer. If everything went correctly, these two should be
-  synchronized. The highlighter can look at the current token, see if
-  the <code>span</code> in the DOM tree corresponds to it (has the same text
-  content, and the correct class), and if not it can chop up the DOM
-  nodes to conform to the tokens.</p>
-
-  <p>Every time the parser yields a newline token, the highligher
-  encounters a <code>br</code> element in the DOM stream. It takes the copy of the
-  parser and the lexical context from this token and attaches them to
-  the DOM node. This way, a new highlighting process can be started from
-  that node by re-starting the copy of the parser with a new token
-  stream, which reads tokens from the DOM nodes starting at that <code>br</code>
-  element, and the indentation code can use the lexical context
-  information to determine the correct indentation at that point.</p>
-
-  <h2 id="selection">Selection woes</h2>
-
-  <p>All the above can be done using the DOM interface that all major
-  browsers have in common, and which is relatively free of weird bugs
-  and abberrations. However, when the user is typing in new code, this
-  must also be highlighted. For this to happen, the program must know
-  where the cursor currently is, and because it mucks up the DOM tree,
-  it has to restore this cursor position after doing the highlighting.</p>
-
-  <p>Re-highlighting always happens per line, because the copy of the
-  parser is stored only at the end of lines. Doing this every time the
-  user presses a key is terribly slow and obnoxious, so what I did was
-  keep a list of 'dirty' nodes, and as soon as the user didn't type
-  anyting for 300 milliseconds the program starts re-highlighting these
-  nodes. If it finds more than ten lines must be re-parsed, it does only
-  ten and waits another 300 milliseconds before it continues, this way
-  the browser never freezes up entirely.</p>
-
-  <p>As mentioned earlier, Internet Explorer's selection model is not the
-  most practical one. My attempts to build a wrapper that makes it look
-  like the W3C model all stranded. In the end I came to the conclusion
-  that I only needed two operations:</p>
-
-  <ul>
-    <li>Creating a selection 'snapshot' that can be restored after
-    highlighting, in such a way that it still works if some of the nodes
-    that were selected are replaced by other nodes with the same
-    size but a different structure.</li>
-    <li>Finding the top-level node around or before the cursor, to mark it
-    dirty or to insert indentation whitespace at the start of that line.</li>
-  </ul>
-
-  <p>It turns out that the pixel-based selection model that Internet
-  Explorer uses, which always seemed completely ludricrous to me, is
-  perfect for the first case. Since the DOM transformation (generally)
-  does not change the position of things, storing the pixel offsets of
-  the selection makes it possible to restore that same selection, never
-  mind what happened to the underlying DOM structure.</p>
-
-  <p>[Later addition: Note that this, due to the very random design
-  of the <a
-  href="http://msdn2.microsoft.com/en-us/library/ms535872(VS.85).aspx#">TextRange
-  interface</a>, only really works when the whole selection falls
-  within the visible part of the document.]</p>
-
-  <p>Doing the same with the W3C selection model is a lot harder. What I
-  ended up with was this:</p>
-
-  <ul>
-    <li>Create an object pointing to the nodes at the start and end of the
-    selection, and the offset within those nodes. This is basically the
-    information that the <code>Range</code> object gives you.</li>
-    <li>Make references from these nodes back to that object.</li>
-    <li>When replacing (part of) a node with another one, check for such a
-    reference, and when it is present, check whether this new node will
-    get the selection. If it does, move the reference from the old to the
-    new node, if it does not, adjust the offset in the selection object to
-    reflect the fact that part of the old node has been replaced.</li>
-  </ul>
-
-  <p>Now in the second case (getting the top-level node at the
-  cursor) the Internet Explorer cheat does not work. In the W3C
-  model this is rather easy, you have to do some creative parent-
-  and sibling-pointer following to arrive at the correct top-level
-  node, but nothing weird. In Internet Explorer, all we have to go
-  on is the <code>parentElement</code> method on a
-  <code>TextRange</code>, which gives the first element that
-  completely envelops the selection. If the cursor is inside a text
-  node, this is good, that text node tells us where we are. If the
-  cursor is between nodes, for example between two <code>br</code>
-  nodes, you get to top-level node itself back, which is remarkably
-  useless. In cases like this I stoop to a rather ugly hack (which
-  fortunately turned out to be acceptably fast) &#x2015; I create a
-  temporary empty <code>span</code> with an ID inside the selection,
-  get a reference to this <code>span</code> by ID, take its
-  <code>previousSibling</code>, and remove it again.</p>
-
-  <p>Unfortunately, Opera's selection implementation is buggy, and it
-  will give wildly incorrect <code>Range</code> objects when the cursor
-  is between two nodes. This is a bit of a showstopper, and until I find
-  a workaround for that or it gets fixed, the highlighter doesn't work
-  properly in Opera.</p>
-
-  <p>Also, when one presses enter in a <code>designMode</code>
-  document in Firefox or Opera, a <code>br</code> tag is inserted.
-  In Internet Explorer, pressing enter causes some maniacal gnome to
-  come out and start wrapping all the content before and after the
-  cursor in <code>p</code> tags. I suppose there is something to be
-  said for that, in principle, though if you saw the tag soup of
-  <code>font</code>s and nested paragraphs Internet Explorer
-  generates you would soon enough forget all about principle.
-  Anyway, getting unwanted <code>p</code> tags slowed the
-  highlighter down terribly &#x2015; it had to overhaul the whole
-  DOM tree to remove them again, every time the user pressed enter.
-  Fortunately I could fix this by capturing the enter presses and
-  manually inserting a <code>br</code> tag at the cursor.</p>
-
-  <p>On the subject of Internet Explorer's tag soup, here is an interesting
-  anecdote: One time, when testing the effect that modifying the content
-  of a selection had, I inspected the DOM tree and found a <code>"/B"</code>
-  element. This was not a closing tag, there are no closing tags in the
-  DOM tree, just elements. The <code>nodeName</code> of this element was actually
-  <code>"/B"</code>. That was when I gave up any notions of ever understanding the
-  profound mystery that is Internet Explorer.</p>
-
-  <h2 id="closing">Closing thoughts</h2>
-
-  <p>Well, I despaired at times, but I did end up with a working JavaScript
-  editor. I did not keep track of the amount of time I wasted on this,
-  but I would estimate it to be around fifty hours. Finding workarounds
-  for browser bugs can be a terribly nonlinear process. I just spent
-  half a day working on a weird glitch in Firefox that caused the cursor
-  in the editable frame to be displayed 3/4 line too high when it was at
-  the very end of the document. Then I found out that setting the
-  style.display of the iframe to "block" fixed this (why not?). I'm
-  amazed how often issues that seem hopeless do turn out to be
-  avoidable, even if it takes hours of screwing around and some truly
-  non-obvious ideas.</p>
-
-  <p>For a lot of things, JavaScript + DOM elements are a surprisingly
-  powerful platform. Simple interactive documents and forms can be
-  written in browsers with very little effort, generally less than with
-  most 'traditional' platforms (Java, Win32, things like WxWidgets).
-  Libraries like Dojo (and a similar monster I once wrote myself) even
-  make complex, composite widgets workable. However, when applications
-  go sufficiently beyond the things that browsers were designed for, the
-  available APIs do not give enough control, are nonstandard and buggy,
-  and are often poorly designed. Because of this, writing such
-  applications, when it is even possible, is <em>painful</em> process.</p>
-
-  <p>And who likes pain? Sure, when finding that crazy workaround,
-  subdueing the damn browser, and getting everything to work, there
-  is a certain macho thrill. But one can't help wondering how much
-  easier things like preventing the user from pasting pictures in
-  his source code would be on another platform. Maybe something like
-  Silverlight or whatever other new browser plugin gizmos people are
-  pushing these days will become the way to solve things like this
-  in the future. But, personally, I would prefer for those browser
-  companies to put some real effort into things like cleaning up and
-  standardising shady things like <code>designMode</code>, fixing
-  their bugs, and getting serious about ECMAScript 4.</p>
-
-  <p>Which is probably not realistically going to happen anytime soon.</p>
-
-  <hr/>
-
-  <p>Some interesting projects similar to this:</p>
-
-  <ul>
-    <li><a href="http://www.ymacs.org">Ymacs</a></li>
-    <li><a href="http://gpl.internetconnection.net/vi/">vi clone</a></li>
-    <li><a href="http://robrohan.com/projects/9ne/">Emacs clone</a></li>
-    <li><a href="http://codepress.sourceforge.net/">CodePress</a></li>
-    <li><a href="http://www.codeide.com">CodeIDE</a></li>
-    <li><a href="http://www.cdolivet.net/editarea">EditArea</a></li>
-  </ul>
-
-  <hr/>
-
-  <p>If you have any remarks, criticism, or hints related to the
-  above, drop me an e-mail at <a
-  href="mailto:marijnh@gmail.com">marijnh@gmail.com</a>. If you say
-  something generally interesting, I'll include your reaction here
-  at the bottom of this page.</p>
-
-</div><div class="rightsmall blk">
-
-  <p style="font-size: 80%">
-    <b>Topic</b>: JavaScript, advanced browser weirdness, cool programming techniques<br/>
-    <b>Audience</b>: Programmers, especially JavaScript programmers<br/>
-    <b>Author</b>: Marijn Haverbeke<br/>
-    <b>Date</b>: May 24th 2007
-  </p>
-
-  <h2>Contents</h2>
-
-  <ul>
-    <li><a href="#indent">Only Indentation</a></li>
-    <li><a href="#designmode"><code>designMode</code></a></li>
-    <li><a href="#parser">A Parser</a></li>
-    <li><a href="#dom">DOM Nodes</a></li>
-    <li><a href="#selection">Selection Woes</a></li>
-    <li><a href="#closing">Closing Thoughts</a></li>
-  </ul>
-
-  <h2>Site</h2>
-
-  <ul>
-    <li><a href="index.html">Front Page</a></li>
-    <li><a href="manual.html">User Manual</a></li>
-    <li><a href="faq.html">FAQ</a></li>
-    <li><a href="http://groups.google.com/group/codemirror">Google Group</a></li>
-    <li><a href="compress.html">Compression Helper</a></li>
-  </ul>
-
-</div></div>
-
-<div style="height: 2em">&nbsp;</div>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/unittests.html b/typo3/contrib/codemirror/unittests.html
deleted file mode 100644 (file)
index a216df4..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-<!DOCTYPE html>
-<!--
-  Test Harness for CodeMirror
-  This HTML file provides a minimal environment within which one can execute
-  JSUnit-style tests.
--->
-
-<html>
-  <head>
-    <title>Test Harness for CodeMirror</title>
-
-    <script type="text/javascript" src="unittests.js"></script>
-
-    <script type="text/javascript">
-      // Counters for unit test results.
-      var test_good = 0;
-      var test_bad = 0;
-
-      // If expected and actual are the identical, print 'Ok', otherwise 'Fail!'
-      function assertEquals(msg, expected, actual) {
-        if (typeof actual == 'undefined') {
-          // msg is optional.
-          actual = expected;
-          expected = msg;
-          msg = 'Expected: \'' + expected + '\' Actual: \'' + actual + '\'';
-        }
-        var html;
-        if (expected === actual) {
-          html = '<FONT COLOR="#009900">Ok</FONT>';
-          test_good++;
-        } else {
-          html = '<FONT COLOR="#990000"><BIG>Fail!</BIG></FONT><BR>';
-          msg += ' Expected: \'' + expected + '\' Actual: \'' + actual + '\'';
-          msg = msg.replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;');
-          msg = msg.replace(/\r\n/g, '&para;');
-          msg = msg.replace(/\n/g, '&para;');
-          msg = msg.replace(/\r/g, '&para;');
-          msg = msg.replace(/\u00A0/g, '&middot;');
-          html += '<code>' + msg + '</code>';
-          test_bad++;
-        }
-        printDiv(html);
-      }
-
-      // If expected and actual are the equivalent, pass the test.
-      function assertEquivalent(msg, expected, actual) {
-        if (typeof actual == 'undefined') {
-          // msg is optional.
-          actual = expected;
-          expected = msg;
-          msg = 'Expected: \'' + expected + '\' Actual: \'' + actual + '\'';
-        }
-        if (_equivalent(expected, actual)) {
-          assertEquals(msg, String.toString(expected), String.toString(actual));
-        } else {
-          assertEquals(msg, expected, actual);
-        }
-      }
-
-      // Are a and b the equivalent? -- Recursive.
-      function _equivalent(a, b) {
-        if (a == b) {
-          return true;
-        }
-        if (typeof a == 'object' && typeof b == 'object' && a !== null && b !== null) {
-          if (a.toString() != b.toString()) {
-            return false;
-          }
-          for (var p in a) {
-            if (!_equivalent(a[p], b[p])) {
-              return false;
-            }
-          }
-          for (var p in b) {
-            if (!_equivalent(a[p], b[p])) {
-              return false;
-            }
-          }
-          return true;
-        }
-        return false;
-      }
-
-      function runTests() {
-        for (var x = 0; x < tests.length; x++) {
-          printDiv('<H3>' + tests[x] + ':</H3>');
-          eval(tests[x] + '()');
-        }
-      }
-      function initTests() {
-        var startTime = (new Date()).getTime();
-        runTests();
-        var endTime = (new Date()).getTime();
-        var html = '<H3>Done.</H3>';
-        html += '<P>Tests passed: ' + test_good + '<BR>Tests failed: ' + test_bad + '</P>';
-        html += '<P>Total time: ' + (endTime - startTime) + ' ms</P>';
-        printDiv(html);
-      }
-
-      function printDiv(html) {
-        var div = document.createElement('div');
-        div.innerHTML = html;
-        document.getElementById('testoutput').appendChild(div);
-      }
-    </script>
-  </head>
-
-  <body onload="initTests()">
-    <h1>Test Harness for CodeMirror</h1>
-    <div id="testoutput"></div>
-    <hr>
-    <div style="border: 1px solid black;">
-    <textarea id="inputfield"></textarea>
-    </div>
-    <script type="text/javascript" src="js/codemirror.js"></script>
-    <script>
-      var editor = new CodeMirror(CodeMirror.replace(document.getElementById('inputfield')), {
-          parserfile: ["tokenizejavascript.js", "parsejavascript.js"],
-          path: "js/"
-      });
-    </script>
-
-  </body>
-</html>
diff --git a/typo3/contrib/codemirror/webalizer/._.htaccess b/typo3/contrib/codemirror/webalizer/._.htaccess
deleted file mode 100644 (file)
index f59a053..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._.htaccess and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._.htpasswd b/typo3/contrib/codemirror/webalizer/._.htpasswd
deleted file mode 100644 (file)
index 9b81ce6..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._.htpasswd and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._ctry_usage_201008.png b/typo3/contrib/codemirror/webalizer/._ctry_usage_201008.png
deleted file mode 100644 (file)
index 107308a..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._ctry_usage_201008.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._daily_usage_201008.png b/typo3/contrib/codemirror/webalizer/._daily_usage_201008.png
deleted file mode 100644 (file)
index 9b479ea..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._daily_usage_201008.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._hourly_usage_201008.png b/typo3/contrib/codemirror/webalizer/._hourly_usage_201008.png
deleted file mode 100644 (file)
index 28ca7ee..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._hourly_usage_201008.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._index.html b/typo3/contrib/codemirror/webalizer/._index.html
deleted file mode 100644 (file)
index 23be680..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._index.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._usage.png b/typo3/contrib/codemirror/webalizer/._usage.png
deleted file mode 100644 (file)
index e5c6407..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._usage.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._usage_201008.html b/typo3/contrib/codemirror/webalizer/._usage_201008.html
deleted file mode 100644 (file)
index 1603266..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._usage_201008.html and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._webalizer.current b/typo3/contrib/codemirror/webalizer/._webalizer.current
deleted file mode 100644 (file)
index add380e..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._webalizer.current and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/._webalizer.hist b/typo3/contrib/codemirror/webalizer/._webalizer.hist
deleted file mode 100644 (file)
index e409510..0000000
Binary files a/typo3/contrib/codemirror/webalizer/._webalizer.hist and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/.htaccess b/typo3/contrib/codemirror/webalizer/.htaccess
deleted file mode 100644 (file)
index c3c256d..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-AuthUserFile /home/marijn/ejs/www/webalizer/.htpasswd
-AuthGroupFile /dev/null
-AuthName "EJS Webalizer Access"
-AuthType Basic
-
-#require user marijn
-require valid-user
diff --git a/typo3/contrib/codemirror/webalizer/.htpasswd b/typo3/contrib/codemirror/webalizer/.htpasswd
deleted file mode 100644 (file)
index e4adc57..0000000
+++ /dev/null
@@ -1 +0,0 @@
-marijn:m$rygKb1cLcUQ
diff --git a/typo3/contrib/codemirror/webalizer/ctry_usage_201008.png b/typo3/contrib/codemirror/webalizer/ctry_usage_201008.png
deleted file mode 100644 (file)
index e1cddbb..0000000
Binary files a/typo3/contrib/codemirror/webalizer/ctry_usage_201008.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/daily_usage_201008.png b/typo3/contrib/codemirror/webalizer/daily_usage_201008.png
deleted file mode 100644 (file)
index 59b9db3..0000000
Binary files a/typo3/contrib/codemirror/webalizer/daily_usage_201008.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/hourly_usage_201008.png b/typo3/contrib/codemirror/webalizer/hourly_usage_201008.png
deleted file mode 100644 (file)
index a725847..0000000
Binary files a/typo3/contrib/codemirror/webalizer/hourly_usage_201008.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/index.html b/typo3/contrib/codemirror/webalizer/index.html
deleted file mode 100644 (file)
index 2573ee0..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<!-- Generated by The Webalizer  Ver. 2.01-10 -->
-<!--                                          -->
-<!-- Copyright 1997-2000 Bradford L. Barrett  -->
-<!-- (brad@mrunix.net  http://www.mrunix.net) -->
-<!--                                          -->
-<!-- Distributed under the GNU GPL  Version 2 -->
-<!--        Full text may be found at:        -->
-<!--     http://www.mrunix.net/webalizer/     -->
-<!--                                          -->
-<!--  Give the power back to the programmers  -->
-<!--   Support the Free Software Foundation   -->
-<!--           (http://www.fsf.org)           -->
-<!--                                          -->
-<!-- *** Generated: 08-Aug-2010 07:00 BST *** -->
-
-<HTML>
-<HEAD>
- <TITLE>Usage Statistics for codemirror.net - Last 12 Months</TITLE>
-</HEAD>
-
-<BODY BGCOLOR="#E8E8E8" TEXT="#000000" LINK="#0000FF" VLINK="#ff0000">
-<H2>Usage Statistics for codemirror.net</H2>
-<SMALL><STRONG>
-Summary Period: Last 12 Months<BR>
-Generated 08-Aug-2010 07:00 BST<BR>
-</STRONG></SMALL>
-<CENTER>
-<HR>
-<P>
-<IMG SRC="usage.png" ALT="Usage summary for codemirror.net" HEIGHT=256 WIDTH=512><P>
-<TABLE WIDTH=600 BORDER=2 CELLSPACING=1 CELLPADDING=1>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH COLSPAN=13 BGCOLOR="#C0C0C0" ALIGN=center>Summary by Month</TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH ALIGN=left ROWSPAN=2 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Month</FONT></TH>
-<TH ALIGN=center COLSPAN=4 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Daily Avg</FONT></TH>
-<TH ALIGN=center COLSPAN=8 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Monthly Totals</FONT></TH></TR>
-<TR><TH ALIGN=center BGCOLOR="#00805c"><FONT SIZE="-1">Hits</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff"><FONT SIZE="-1">Files</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00c0ff"><FONT SIZE="-1">Pages</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ffff00"><FONT SIZE="-1">Visits</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff8000"><FONT SIZE="-1">Sites</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff0000"><FONT SIZE="-1">kB F</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff"><FONT SIZE="-1">kB In</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00FF00"><FONT SIZE="-1">kB Out</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ffff00"><FONT SIZE="-1">Visits</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00c0ff"><FONT SIZE="-1">Pages</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff"><FONT SIZE="-1">Files</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00805c"><FONT SIZE="-1">Hits</FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD NOWRAP><A HREF="usage_201008.html"><FONT SIZE="-1">Aug 2010</FONT></A></TD>
-<TD ALIGN=right><FONT SIZE="-1">3377</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">2839</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">831</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">299</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">1299</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">207245</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">0</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">0</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">1797</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">4988</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">17037</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1">20266</FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD BGCOLOR="#C0C0C0" COLSPAN=6 ALIGN=left><FONT SIZE="-1"><B>Totals</B></FONT></TD>
-<TD BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1"><B>207244</B></FONT></TD>
-<TD BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1">0</FONT></TH>
-<TH BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1">0</FONT></TH>
-<TH BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1"><B>1797</B></FONT></TD>
-<TD BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1"><B>4988</B></FONT></TD>
-<TD BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1"><B>17037</B></FONT></TD>
-<TD BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE="-1"><B>20266</B></FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-</TABLE>
-</CENTER>
-<P>
-<HR>
-<TABLE WIDTH="100%" CELLPADDING=0 CELLSPACING=0 BORDER=0>
-<TR>
-<TD ALIGN=left VALIGN=top>
-<SMALL>Generated by
-<A HREF="http://www.mrunix.net/webalizer/"><STRONG>Webalizer Version 2.01</STRONG></A>
-</SMALL>
-</TD>
-</TR>
-</TABLE>
-
-<!-- Webalizer Version 2.01-10 (Mod: 26-Aug-2002) -->
-
-</BODY>
-</HTML>
diff --git a/typo3/contrib/codemirror/webalizer/usage.png b/typo3/contrib/codemirror/webalizer/usage.png
deleted file mode 100644 (file)
index 24eb3e7..0000000
Binary files a/typo3/contrib/codemirror/webalizer/usage.png and /dev/null differ
diff --git a/typo3/contrib/codemirror/webalizer/usage_201008.html b/typo3/contrib/codemirror/webalizer/usage_201008.html
deleted file mode 100644 (file)
index 0195b20..0000000
+++ /dev/null
@@ -1,2887 +0,0 @@
-<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
-
-<!-- Generated by The Webalizer  Ver. 2.01-10 -->
-<!--                                          -->
-<!-- Copyright 1997-2000 Bradford L. Barrett  -->
-<!-- (brad@mrunix.net  http://www.mrunix.net) -->
-<!--                                          -->
-<!-- Distributed under the GNU GPL  Version 2 -->
-<!--        Full text may be found at:        -->
-<!--     http://www.mrunix.net/webalizer/     -->
-<!--                                          -->
-<!--  Give the power back to the programmers  -->
-<!--   Support the Free Software Foundation   -->
-<!--           (http://www.fsf.org)           -->
-<!--                                          -->
-<!-- *** Generated: 08-Aug-2010 07:00 BST *** -->
-
-<HTML>
-<HEAD>
- <TITLE>Usage Statistics for codemirror.net - August 2010</TITLE>
-</HEAD>
-
-<BODY BGCOLOR="#E8E8E8" TEXT="#000000" LINK="#0000FF" VLINK="#ff0000">
-<H2>Usage Statistics for codemirror.net</H2>
-<SMALL><STRONG>
-Summary Period: August 2010<BR>
-Generated 08-Aug-2010 07:00 BST<BR>
-</STRONG></SMALL>
-<CENTER>
-<HR>
-<P>
-<SMALL>
-<A HREF="#DAYSTATS">[Daily Statistics]</A>
-<A HREF="#HOURSTATS">[Hourly Statistics]</A>
-<A HREF="#TOPURLS">[URLs]</A>
-<A HREF="#TOPENTRY">[Entry]</A>
-<A HREF="#TOPEXIT">[Exit]</A>
-<A HREF="#TOPSITES">[Sites]</A>
-<A HREF="#TOPREFS">[Referrers]</A>
-<A HREF="#TOPSEARCH">[Search]</A>
-<A HREF="#TOPUSERS">[Users]</A>
-<A HREF="#TOPAGENTS">[Agents]</A>
-<A HREF="#TOPCTRYS">[Locations]</A>
-</SMALL>
-<P>
-<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH COLSPAN=3 ALIGN=center BGCOLOR="#C0C0C0">Monthly Statistics for August 2010</TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Hits</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>20266</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Files</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>17037</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Pages</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>4988</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Visits</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>1797</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total kB Files</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>207245</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total kB In</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>0</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total kB Out</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>0</B></FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Unique Sites</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>1299</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Unique URLs</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>160</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Unique Referrers</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>279</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Unique Usernames</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>1</B></FONT></TD></TR>
-<TR><TD WIDTH=380><FONT SIZE="-1">Total Unique User Agents</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>592</B></FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH WIDTH=380 BGCOLOR="#C0C0C0"><FONT SIZE=-1 COLOR="#C0C0C0">.</FONT></TH>
-<TH WIDTH=65 BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE=-1>Avg </FONT></TH>
-<TH WIDTH=65 BGCOLOR="#C0C0C0" ALIGN=right><FONT SIZE=-1>Max </FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD><FONT SIZE="-1">Hits per Hour</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>140</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>504</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Hits per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>3377</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>5073</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Files per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>2839</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>4323</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Pages per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>831</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>1158</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Visits per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>299</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>403</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">kB Files per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>34541</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>51918</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">kB In per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>0</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">kB Out per Day</FONT></TD>
-<TD ALIGN=right WIDTH=65><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD WIDTH=65 ALIGN=right><FONT SIZE=-1><B>0</B></FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH COLSPAN=3 ALIGN=center BGCOLOR="#C0C0C0">
-<FONT SIZE="-1">Hits by Response Code</FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD><FONT SIZE="-1">Code 200 - OK</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>17037</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 206 - Partial Content</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>47</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 301 - Moved Permanently</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>185</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 302 - Found</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>20</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 304 - Not Modified</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>1813</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 400 - Bad Request</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>8</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 401 - Unauthorized</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>1</B></FONT></TD></TR>
-<TR><TD><FONT SIZE="-1">Code 404 - Not Found</FONT></TD>
-<TD ALIGN=right COLSPAN=2><FONT SIZE="-1"><B>1155</B></FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-</TABLE>
-<P>
-<A NAME="DAYSTATS"></A>
-<IMG SRC="daily_usage_201008.png" ALT="Daily usage for August 2010" HEIGHT=400 WIDTH=512><P>
-<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH BGCOLOR="#C0C0C0" COLSPAN=17 ALIGN=center>Daily Statistics for August 2010</TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH ALIGN=center BGCOLOR="#C0C0C0"><FONT SIZE="-1">Day</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00805c" COLSPAN=2><FONT SIZE="-1">Hits</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff" COLSPAN=2><FONT SIZE="-1">Files</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00c0ff" COLSPAN=2><FONT SIZE="-1">Pages</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ffff00" COLSPAN=2><FONT SIZE="-1">Visits</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff8000" COLSPAN=2><FONT SIZE="-1">Sites</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff0000" COLSPAN=2><FONT SIZE="-1">kB F</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0080FF" COLSPAN=2><FONT SIZE="-1">kB In</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00FF00" COLSPAN=2><FONT SIZE="-1">kB Out</FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>3</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>3216</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">15.87%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2704</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">15.87%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>739</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">14.82%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>281</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">15.64%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>261</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">20.09%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>32208</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">15.54%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>4</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>5073</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">25.03%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>4323</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">25.37%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1158</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">23.22%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>403</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">22.43%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>355</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">27.33%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>51918</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">25.05%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>5</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>4466</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">22.04%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>3661</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">21.49%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1066</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">21.37%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>392</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">21.81%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>349</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">26.87%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>46152</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">22.27%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>6</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>4374</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">21.58%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>3683</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">21.62%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1081</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">21.67%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>357</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">19.87%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>321</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">24.71%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>47073</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">22.71%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>7</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2419</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">11.94%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2044</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">12.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>719</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">14.41%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>282</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">15.69%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>233</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">17.94%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>22737</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">10.97%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>8</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>718</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.54%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>622</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.65%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>225</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.51%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>84</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.67%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>87</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.70%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>7157</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.45%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-</TABLE>
-<P>
-<A NAME="HOURSTATS"></A>
-<IMG SRC="hourly_usage_201008.png" ALT="Hourly usage for August 2010" HEIGHT=256 WIDTH=512><P>
-<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH BGCOLOR="#C0C0C0" COLSPAN=19 ALIGN=center>Hourly Statistics for August 2010</TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH ALIGN=center ROWSPAN=2 BGCOLOR="#C0C0C0"><FONT SIZE="-1">Hour</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00805c" COLSPAN=3><FONT SIZE="-1">Hits</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff" COLSPAN=3><FONT SIZE="-1">Files</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00c0ff" COLSPAN=3><FONT SIZE="-1">Pages</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff0000" COLSPAN=3><FONT SIZE="-1">kB F</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0080FF" COLSPAN=3><FONT SIZE="-1">kB In</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00FF00" COLSPAN=3><FONT SIZE="-1">kB Out</FONT></TH></TR>
-<TR><TH ALIGN=center BGCOLOR="#00805c"><FONT SIZE="-2">Avg</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00805c" COLSPAN=2><FONT SIZE="-2">Total</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff"><FONT SIZE="-2">Avg</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff" COLSPAN=2><FONT SIZE="-2">Total</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00c0ff"><FONT SIZE="-2">Avg</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00c0ff" COLSPAN=2><FONT SIZE="-2">Total</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff0000"><FONT SIZE="-2">Avg</FONT></TH>
-<TH ALIGN=center BGCOLOR="#ff0000" COLSPAN=2><FONT SIZE="-2">Total</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff"><FONT SIZE="-2">Avg</FONT></TH>
-<TH ALIGN=center BGCOLOR="#0000ff" COLSPAN=2><FONT SIZE="-2">Total</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00FF00"><FONT SIZE="-2">Avg</FONT></TH>
-<TH ALIGN=center BGCOLOR="#00FF00" COLSPAN=2><FONT SIZE="-2">Total</FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>136</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>821</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.05%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>101</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>607</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.56%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>60</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>363</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">7.28%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1207</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>7239</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.49%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>1</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>69</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>414</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.04%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>54</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>325</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.91%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>17</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>103</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.06%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>597</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>3580</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.73%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>2</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>127</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>763</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.76%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>80</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>482</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.83%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>56</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>338</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.78%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>942</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>5652</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.73%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>3</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>87</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>523</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.58%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>74</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>448</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.63%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>22</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>133</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.67%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>874</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>5245</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.53%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>4</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>60</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>360</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.78%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>55</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>332</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.95%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>16</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>99</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.98%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>690</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>4141</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>5</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>60</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>361</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.78%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>52</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>312</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.83%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>17</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>103</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.06%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>565</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>3393</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.64%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>6</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>81</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>488</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.41%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>68</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>413</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.42%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>17</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>105</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>822</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>4932</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.38%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>7</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>81</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>489</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.41%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>75</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>453</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.66%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>19</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>114</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.29%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>913</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>5477</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.64%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>8</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>198</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1192</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.88%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>144</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>867</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.09%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>56</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>336</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.74%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1842</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>11053</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.33%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>9</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>108</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>648</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.20%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>89</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>537</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.15%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>19</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>114</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.29%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1097</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>6582</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.18%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>10</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>127</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>766</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.78%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>96</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>580</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.40%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>21</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>127</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.55%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1355</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>8132</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.92%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>11</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>186</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1116</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.51%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>157</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>943</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.54%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>34</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>208</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.17%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1964</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>11782</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.68%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>12</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>214</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1285</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.34%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>185</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1111</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.52%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>53</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>323</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.48%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2023</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>12137</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.86%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>13</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>206</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1239</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>174</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1046</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.14%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>43</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>258</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.17%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2011</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>12066</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.82%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>14</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>214</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1285</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.34%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>181</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1091</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.40%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>45</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>272</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.45%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2534</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>15204</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">7.34%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>15</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>183</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1098</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.42%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>157</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>942</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.53%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>42</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>254</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.09%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2085</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>12509</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.04%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>16</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>228</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1373</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.77%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>173</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1043</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.12%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>67</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>407</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">8.16%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>2108</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>12648</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">6.10%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>17</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>157</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>942</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.65%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>142</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>857</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.03%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>37</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>227</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.55%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1664</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>9984</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.82%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>18</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>166</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>997</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.92%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>149</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>899</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.28%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>34</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>208</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.17%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1773</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>10637</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.13%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>19</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>166</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1001</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.94%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>154</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>926</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.44%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>34</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>209</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.19%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1887</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>11320</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.46%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>20</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>155</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>934</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.61%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>142</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>856</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.02%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>36</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>216</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.33%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1649</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>9893</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.77%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>21</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>117</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>705</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.48%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>107</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>643</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.77%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>27</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>164</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.29%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1364</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>8185</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.95%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>22</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>134</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>809</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.99%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>122</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>736</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.32%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>26</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>160</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.21%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1407</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>8440</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.07%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TD ALIGN=center><FONT SIZE="-1"><B>23</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>109</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>657</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.24%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>98</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>588</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.45%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>24</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>147</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.95%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1169</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>7013</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">3.38%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-</TABLE>
-<P>
-<A NAME="TOPURLS"></A>
-<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH BGCOLOR="#C0C0C0" ALIGN=CENTER COLSPAN=10>Top 30 of 160 Total URLs</TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH BGCOLOR="#C0C0C0" ALIGN=center><FONT SIZE="-1">#</FONT></TH>
-<TH BGCOLOR="#00805c" ALIGN=center COLSPAN=2><FONT SIZE="-1">Hits</FONT></TH>
-<TH BGCOLOR="#ff0000" ALIGN=center COLSPAN=2><FONT SIZE="-1">kB F</FONT></TH>
-<TH BGCOLOR="#0000ff" ALIGN=center COLSPAN=2><FONT SIZE="-1">kB In</FONT></TH>
-<TH BGCOLOR="#00FF00" ALIGN=center COLSPAN=2><FONT SIZE="-1">kB Out</FONT></TH>
-<TH BGCOLOR="#00c0ff" ALIGN=center><FONT SIZE="-1">URL</FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>1</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1573</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">7.76%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>14775</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">7.13%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/">/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>2</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1150</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.67%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1253</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.60%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/favicon.ico">/favicon.ico</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>3</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>354</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.75%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>10415</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">5.03%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/manual.html">/manual.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>4</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>298</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.47%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>476</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.23%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/jstest.html">/jstest.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>5</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>224</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">1.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>294</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.14%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/htmltest.html">/htmltest.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>6</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>187</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.92%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1730</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.83%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/php/">/contrib/php/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>7</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>177</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.87%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>231</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/mixedtest.html">/mixedtest.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>8</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>129</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.64%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>22899</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">11.05%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/codemirror-0.8.zip">/codemirror-0.8.zip</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>9</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>122</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.60%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>4183</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">2.02%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/story.html">/story.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>10</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>116</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.57%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>116</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.06%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/csstest.html">/csstest.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>11</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>103</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.51%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>335</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.16%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/python/">/contrib/python/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>12</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>91</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.45%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>129</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.06%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/csharp/">/contrib/csharp/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>13</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>91</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.45%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>115</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.06%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/sql/">/contrib/sql/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>14</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>81</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.40%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>595</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.29%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/compress.html">/compress.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>15</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>57</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.28%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>113</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.05%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/groovy/">/contrib/groovy/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>16</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>56</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.28%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>69</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.03%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/lua/">/contrib/lua/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>17</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>51</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.25%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>45</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.02%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/sparqltest.html">/sparqltest.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>18</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>50</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.25%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>8771</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">4.23%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/codemirror.zip">/codemirror.zip</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>19</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>50</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.25%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>111</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.05%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/scheme/">/contrib/scheme/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>20</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>49</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.24%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>95</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.05%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/faq.html">/faq.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>21</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>45</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.22%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>36</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.02%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/LICENSE">/LICENSE</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>22</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>42</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.21%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>121</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.06%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/ometa/">/contrib/ometa/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>23</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>36</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.18%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>80</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.04%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/plsql/">/contrib/plsql/</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>24</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>33</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.16%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>92</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.04%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/highlight.html">/highlight.html</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>25</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>28</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.14%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>40</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.02%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/python/LICENSE">/contrib/python/LICENSE</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>26</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>24</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.12%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>1</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/.git/HEAD">/.git/HEAD</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>27</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>24</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.12%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>8</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/.git/info/refs">/.git/info/refs</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>28</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>22</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>53</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.03%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib//">/contrib//</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>29</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>22</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>225</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/php//">/contrib/php//</A></FONT></TD></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>30</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>22</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.11%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>34</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.02%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>0</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-2">0.00%</FONT></TD>
-<TD ALIGN=left NOWRAP><FONT SIZE="-1"><A HREF="http://codemirror.net/contrib/php/LICENSE">/contrib/php/LICENSE</A></FONT></TD></TR>
-<TR><TH HEIGHT=4></TH></TR>
-</TABLE>
-<P>
-<TABLE WIDTH=510 BORDER=2 CELLSPACING=1 CELLPADDING=1>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH BGCOLOR="#C0C0C0" ALIGN=CENTER COLSPAN=10>Top 10 of 160 Total URLs By kB F</TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR><TH BGCOLOR="#C0C0C0" ALIGN=center><FONT SIZE="-1">#</FONT></TH>
-<TH BGCOLOR="#00805c" ALIGN=center COLSPAN=2><FONT SIZE="-1">Hits</FONT></TH>
-<TH BGCOLOR="#ff0000" ALIGN=center COLSPAN=2><FONT SIZE="-1">kB F</FONT></TH>
-<TH BGCOLOR="#0000ff" ALIGN=center COLSPAN=2><FONT SIZE="-1">kB In</FONT></TH>
-<TH BGCOLOR="#00FF00" ALIGN=center COLSPAN=2><FONT SIZE="-1">kB Out</FONT></TH>
-<TH BGCOLOR="#00c0ff" ALIGN=center><FONT SIZE="-1">URL</FONT></TH></TR>
-<TR><TH HEIGHT=4></TH></TR>
-<TR>
-<TD ALIGN=center><FONT SIZE="-1"><B>1</B></FONT></TD>
-<TD ALIGN=right><FONT SIZE="-1"><B>129&l