From eb2969fbc30ba58cbb81acdc9ca5fc0189c9d5e9 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke <marijnh@gmail.com>
Date: Tue, 8 Jan 2013 10:48:58 +0100
Subject: [PATCH] Organize add-on scripts into subdirectories

Closes #1133
---
 {lib/util => addon/dialog}/dialog.css         |  0
 {lib/util => addon/dialog}/dialog.js          |  0
 {lib/util => addon/edit}/closetag.js          |  0
 {lib/util => addon/edit}/continuecomment.js   |  0
 {lib/util => addon/edit}/continuelist.js      |  0
 {lib/util => addon/edit}/matchbrackets.js     |  0
 {lib/util => addon/fold}/collapserange.js     |  0
 {lib/util => addon/fold}/foldcode.js          |  0
 {lib/util => addon/format}/formatting.js      |  0
 {lib/util => addon/hint}/javascript-hint.js   |  0
 {lib/util => addon/hint}/pig-hint.js          |  0
 {lib/util => addon/hint}/python-hint.js       |  0
 {lib/util => addon/hint}/simple-hint.css      |  0
 {lib/util => addon/hint}/simple-hint.js       |  0
 {lib/util => addon/hint}/xml-hint.js          |  0
 {lib/util => addon/mode}/loadmode.js          |  0
 {lib/util => addon/mode}/multiplex.js         |  0
 {lib/util => addon/mode}/overlay.js           |  0
 {lib/util => addon/runmode}/colorize.js       |  0
 .../runmode/runmode-standalone.js             |  0
 {lib/util => addon/runmode}/runmode.js        |  0
 .../runmode/runmode.node.js                   |  0
 .../search}/match-highlighter.js              |  0
 {lib/util => addon/search}/search.js          |  0
 {lib/util => addon/search}/searchcursor.js    |  0
 bin/compress                                  |  3 +-
 demo/closetag.html                            |  2 +-
 demo/collapserange.html                       |  2 +-
 demo/complete.html                            | 10 +--
 demo/folding.html                             |  4 +-
 demo/formatting.html                          |  2 +-
 demo/loadmode.html                            |  2 +-
 demo/matchhighlighter.html                    |  4 +-
 demo/multiplex.html                           |  6 +-
 demo/mustache.html                            |  4 +-
 demo/runmode.html                             |  4 +-
 demo/search.html                              | 16 ++---
 demo/vim.html                                 |  6 +-
 demo/xmlcomplete.html                         | 12 ++--
 doc/compress.html                             | 41 +++++++-----
 doc/manual.html                               | 66 ++++++++++---------
 doc/oldrelease.html                           |  6 +-
 doc/upgrade_v3.html                           |  8 +--
 index.html                                    |  2 +-
 mode/clike/index.html                         |  2 +-
 mode/clike/scala.html                         |  2 +-
 mode/d/index.html                             |  2 +-
 mode/erlang/index.html                        |  2 +-
 mode/gfm/index.html                           |  2 +-
 mode/go/index.html                            |  2 +-
 mode/groovy/index.html                        |  2 +-
 mode/haskell/index.html                       |  2 +-
 mode/javascript/index.html                    |  4 +-
 mode/less/index.html                          |  2 +-
 mode/lua/index.html                           |  2 +-
 mode/markdown/index.html                      |  2 +-
 mode/ocaml/index.html                         |  2 +-
 mode/php/index.html                           |  2 +-
 mode/python/index.html                        |  2 +-
 mode/ruby/index.html                          |  2 +-
 mode/sass/index.html                          |  2 +-
 mode/shell/index.html                         |  2 +-
 mode/smalltalk/index.html                     |  2 +-
 mode/sparql/index.html                        |  2 +-
 mode/tiddlywiki/index.html                    |  2 +-
 mode/vb/index.html                            |  2 +-
 test/index.html                               |  4 +-
 test/run.js                                   |  1 +
 68 files changed, 132 insertions(+), 119 deletions(-)
 rename {lib/util => addon/dialog}/dialog.css (100%)
 rename {lib/util => addon/dialog}/dialog.js (100%)
 rename {lib/util => addon/edit}/closetag.js (100%)
 rename {lib/util => addon/edit}/continuecomment.js (100%)
 rename {lib/util => addon/edit}/continuelist.js (100%)
 rename {lib/util => addon/edit}/matchbrackets.js (100%)
 rename {lib/util => addon/fold}/collapserange.js (100%)
 rename {lib/util => addon/fold}/foldcode.js (100%)
 rename {lib/util => addon/format}/formatting.js (100%)
 rename {lib/util => addon/hint}/javascript-hint.js (100%)
 rename {lib/util => addon/hint}/pig-hint.js (100%)
 rename {lib/util => addon/hint}/python-hint.js (100%)
 rename {lib/util => addon/hint}/simple-hint.css (100%)
 rename {lib/util => addon/hint}/simple-hint.js (100%)
 rename {lib/util => addon/hint}/xml-hint.js (100%)
 rename {lib/util => addon/mode}/loadmode.js (100%)
 rename {lib/util => addon/mode}/multiplex.js (100%)
 rename {lib/util => addon/mode}/overlay.js (100%)
 rename {lib/util => addon/runmode}/colorize.js (100%)
 rename lib/util/runmodeonly.js => addon/runmode/runmode-standalone.js (100%)
 rename {lib/util => addon/runmode}/runmode.js (100%)
 rename lib/util/runmode-standalone.js => addon/runmode/runmode.node.js (100%)
 rename {lib/util => addon/search}/match-highlighter.js (100%)
 rename {lib/util => addon/search}/search.js (100%)
 rename {lib/util => addon/search}/searchcursor.js (100%)

diff --git a/lib/util/dialog.css b/addon/dialog/dialog.css
similarity index 100%
rename from lib/util/dialog.css
rename to addon/dialog/dialog.css
diff --git a/lib/util/dialog.js b/addon/dialog/dialog.js
similarity index 100%
rename from lib/util/dialog.js
rename to addon/dialog/dialog.js
diff --git a/lib/util/closetag.js b/addon/edit/closetag.js
similarity index 100%
rename from lib/util/closetag.js
rename to addon/edit/closetag.js
diff --git a/lib/util/continuecomment.js b/addon/edit/continuecomment.js
similarity index 100%
rename from lib/util/continuecomment.js
rename to addon/edit/continuecomment.js
diff --git a/lib/util/continuelist.js b/addon/edit/continuelist.js
similarity index 100%
rename from lib/util/continuelist.js
rename to addon/edit/continuelist.js
diff --git a/lib/util/matchbrackets.js b/addon/edit/matchbrackets.js
similarity index 100%
rename from lib/util/matchbrackets.js
rename to addon/edit/matchbrackets.js
diff --git a/lib/util/collapserange.js b/addon/fold/collapserange.js
similarity index 100%
rename from lib/util/collapserange.js
rename to addon/fold/collapserange.js
diff --git a/lib/util/foldcode.js b/addon/fold/foldcode.js
similarity index 100%
rename from lib/util/foldcode.js
rename to addon/fold/foldcode.js
diff --git a/lib/util/formatting.js b/addon/format/formatting.js
similarity index 100%
rename from lib/util/formatting.js
rename to addon/format/formatting.js
diff --git a/lib/util/javascript-hint.js b/addon/hint/javascript-hint.js
similarity index 100%
rename from lib/util/javascript-hint.js
rename to addon/hint/javascript-hint.js
diff --git a/lib/util/pig-hint.js b/addon/hint/pig-hint.js
similarity index 100%
rename from lib/util/pig-hint.js
rename to addon/hint/pig-hint.js
diff --git a/lib/util/python-hint.js b/addon/hint/python-hint.js
similarity index 100%
rename from lib/util/python-hint.js
rename to addon/hint/python-hint.js
diff --git a/lib/util/simple-hint.css b/addon/hint/simple-hint.css
similarity index 100%
rename from lib/util/simple-hint.css
rename to addon/hint/simple-hint.css
diff --git a/lib/util/simple-hint.js b/addon/hint/simple-hint.js
similarity index 100%
rename from lib/util/simple-hint.js
rename to addon/hint/simple-hint.js
diff --git a/lib/util/xml-hint.js b/addon/hint/xml-hint.js
similarity index 100%
rename from lib/util/xml-hint.js
rename to addon/hint/xml-hint.js
diff --git a/lib/util/loadmode.js b/addon/mode/loadmode.js
similarity index 100%
rename from lib/util/loadmode.js
rename to addon/mode/loadmode.js
diff --git a/lib/util/multiplex.js b/addon/mode/multiplex.js
similarity index 100%
rename from lib/util/multiplex.js
rename to addon/mode/multiplex.js
diff --git a/lib/util/overlay.js b/addon/mode/overlay.js
similarity index 100%
rename from lib/util/overlay.js
rename to addon/mode/overlay.js
diff --git a/lib/util/colorize.js b/addon/runmode/colorize.js
similarity index 100%
rename from lib/util/colorize.js
rename to addon/runmode/colorize.js
diff --git a/lib/util/runmodeonly.js b/addon/runmode/runmode-standalone.js
similarity index 100%
rename from lib/util/runmodeonly.js
rename to addon/runmode/runmode-standalone.js
diff --git a/lib/util/runmode.js b/addon/runmode/runmode.js
similarity index 100%
rename from lib/util/runmode.js
rename to addon/runmode/runmode.js
diff --git a/lib/util/runmode-standalone.js b/addon/runmode/runmode.node.js
similarity index 100%
rename from lib/util/runmode-standalone.js
rename to addon/runmode/runmode.node.js
diff --git a/lib/util/match-highlighter.js b/addon/search/match-highlighter.js
similarity index 100%
rename from lib/util/match-highlighter.js
rename to addon/search/match-highlighter.js
diff --git a/lib/util/search.js b/addon/search/search.js
similarity index 100%
rename from lib/util/search.js
rename to addon/search/search.js
diff --git a/lib/util/searchcursor.js b/addon/search/searchcursor.js
similarity index 100%
rename from lib/util/searchcursor.js
rename to addon/search/searchcursor.js
diff --git a/bin/compress b/bin/compress
index de86ca1f6..eb45e1d19 100755
--- a/bin/compress
+++ b/bin/compress
@@ -6,7 +6,7 @@
 //
 //   bin/compress codemirror runmode javascript xml
 //
-// Will take lib/codemirror.js, lib/util/runmode.js,
+// Will take lib/codemirror.js, addon/runmode/runmode.js,
 // mode/javascript/javascript.js, and mode/xml/xml.js, run them though
 // the online minifier at http://marijnhaverbeke.nl/uglifyjs, and spit
 // out the result.
@@ -61,6 +61,7 @@ function walk(dir) {
 }
 
 walk("lib/");
+walk("addon/");
 walk("mode/");
 
 if (!blob) help(false);
diff --git a/demo/closetag.html b/demo/closetag.html
index c33d10875..87f4f019f 100644
--- a/demo/closetag.html
+++ b/demo/closetag.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Close-Tag Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/closetag.js"></script>
+    <script src="../addon/edit/closetag.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <script src="../mode/css/css.js"></script>
diff --git a/demo/collapserange.html b/demo/collapserange.html
index 87aad8230..5a6df0d25 100644
--- a/demo/collapserange.html
+++ b/demo/collapserange.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Range Collapsing Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/collapserange.js"></script>
+    <script src="../addon/fold/collapserange.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
 
diff --git a/demo/complete.html b/demo/complete.html
index 13569edf9..2efbd3d62 100644
--- a/demo/complete.html
+++ b/demo/complete.html
@@ -5,9 +5,9 @@
     <title>CodeMirror: Autocomplete Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/simple-hint.js"></script>
-    <link rel="stylesheet" href="../lib/util/simple-hint.css">
-    <script src="../lib/util/javascript-hint.js"></script>
+    <script src="../addon/hint/simple-hint.js"></script>
+    <link rel="stylesheet" href="../addon/hint/simple-hint.css">
+    <script src="../addon/hint/javascript-hint.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
   </head>
@@ -53,8 +53,8 @@ function getCompletions(token, context) {
 </textarea></form>
 
 <p>Press <strong>ctrl-space</strong> to activate autocompletion. See
-the code (<a href="../lib/util/simple-hint.js">here</a>
-and <a href="../lib/util/javascript-hint.js">here</a>) to figure out
+the code (<a href="../addon/hint/simple-hint.js">here</a>
+and <a href="../addon/hint/javascript-hint.js">here</a>) to figure out
 how it works.</p>
 
     <script>
diff --git a/demo/folding.html b/demo/folding.html
index e6180fe88..f28e5af46 100644
--- a/demo/folding.html
+++ b/demo/folding.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Code Folding Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/foldcode.js"></script>
+    <script src="../addon/fold/foldcode.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
@@ -25,7 +25,7 @@
     <h1>CodeMirror: Code Folding Demo</h1>
 
     <p>Demonstration of code folding using the code
-    in <a href="../lib/util/foldcode.js"><code>foldcode.js</code></a>.
+    in <a href="../addon/fold/foldcode.js"><code>foldcode.js</code></a>.
     Press ctrl-q or click on the gutter to fold a block, again
     to unfold.<br>Try the <a href="collapserange.html">Range Colapse demo</a> as well.</p>
     <form>
diff --git a/demo/formatting.html b/demo/formatting.html
index b9e800d9c..5d2f4b40f 100644
--- a/demo/formatting.html
+++ b/demo/formatting.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Formatting Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/formatting.js"></script>
+    <script src="../addon/format/formatting.js"></script>
     <script src="../mode/css/css.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
diff --git a/demo/loadmode.html b/demo/loadmode.html
index ffe97e30b..1bd958f70 100644
--- a/demo/loadmode.html
+++ b/demo/loadmode.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Lazy Mode Loading Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/loadmode.js"></script>
+    <script src="../addon/mode/loadmode.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
 
     <style type="text/css">
diff --git a/demo/matchhighlighter.html b/demo/matchhighlighter.html
index c8a4bdf98..ea5944ce3 100644
--- a/demo/matchhighlighter.html
+++ b/demo/matchhighlighter.html
@@ -5,8 +5,8 @@
     <title>CodeMirror: Match Highlighter Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/searchcursor.js"></script>
-    <script src="../lib/util/match-highlighter.js"></script>
+    <script src="../addon/search/searchcursor.js"></script>
+    <script src="../addon/search/match-highlighter.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
 
     <style type="text/css">
diff --git a/demo/multiplex.html b/demo/multiplex.html
index 25fffd329..9ebe8f357 100644
--- a/demo/multiplex.html
+++ b/demo/multiplex.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Multiplexing Parser Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/multiplex.js"></script>
+    <script src="../addon/mode/multiplex.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
 
@@ -52,8 +52,8 @@ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
     boundary strings, switches to one or more inner modes. The out
     (HTML) mode does not get fed the content of the <code>&lt;&lt;
     >></code> blocks. See
-    the <a href="../doc/manual.html#util_multiplex">manual</a> and
-    the <a href="../lib/util/multiplex.js">source</a> for more
+    the <a href="../doc/manual.html#addon_multiplex">manual</a> and
+    the <a href="../addon/mode/multiplex.js">source</a> for more
     information.</p>
 
   </body>
diff --git a/demo/mustache.html b/demo/mustache.html
index c2ce33107..9d2081dc4 100644
--- a/demo/mustache.html
+++ b/demo/mustache.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Overlay Parser Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/overlay.js"></script>
+    <script src="../addon/mode/overlay.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
 
@@ -52,7 +52,7 @@ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "mu
     <p>Demonstration of a mode that parses HTML, highlighting
     the <a href="http://mustache.github.com/">Mustache</a> templating
     directives inside of it by using the code
-    in <a href="../lib/util/overlay.js"><code>overlay.js</code></a>. View
+    in <a href="../addon/mode/overlay.js"><code>overlay.js</code></a>. View
     source to see the 15 lines of code needed to accomplish this.</p>
 
   </body>
diff --git a/demo/runmode.html b/demo/runmode.html
index 53ac04f91..dba808ba7 100644
--- a/demo/runmode.html
+++ b/demo/runmode.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Mode Runner Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/runmode.js"></script>
+    <script src="../addon/runmode/runmode.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
   </head>
@@ -30,7 +30,7 @@ function doHighlight() {
 
     <p>Running a CodeMirror mode outside of the editor.
     The <code>CodeMirror.runMode</code> function, defined
-    in <code><a href="../lib/util/runmode.js">lib/runmode.js</a></code> takes the following arguments:</p>
+    in <code><a href="../addon/runmode/runmode.js">lib/runmode.js</a></code> takes the following arguments:</p>
 
     <dl>
       <dt><code>text (string)</code></dt>
diff --git a/demo/search.html b/demo/search.html
index 219c80572..d72107156 100644
--- a/demo/search.html
+++ b/demo/search.html
@@ -6,10 +6,10 @@
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
     <script src="../mode/xml/xml.js"></script>
-    <script src="../lib/util/dialog.js"></script>
-    <link rel="stylesheet" href="../lib/util/dialog.css">
-    <script src="../lib/util/searchcursor.js"></script>
-    <script src="../lib/util/search.js"></script>
+    <script src="../addon/dialog/dialog.js"></script>
+    <link rel="stylesheet" href="../addon/dialog/dialog.css">
+    <script src="../addon/search/searchcursor.js"></script>
+    <script src="../addon/search/search.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
 
     <style type="text/css">
@@ -76,10 +76,10 @@ var editor = CodeMirror.fromTextArea(document.getElementById("code"), {mode: "te
       <dt>Shift-Ctrl-R / Shift-Cmd-Option-F</dt><dd>Replace all</dd>
     </dl>
     <p>Searching is enabled by
-    including <a href="../lib/util/search.js">lib/util/search.js</a>
-    and <a href="../lib/util/searchcursor.js">lib/util/searchcursor.js</a>.
+    including <a href="../addon/search/search.js">addon/search/search.js</a>
+    and <a href="../addon/search/searchcursor.js">addon/search/searchcursor.js</a>.
     For good-looking input dialogs, you also want to include
-    <a href="../lib/util/dialog.js">lib/util/dialog.js</a>
-    and <a href="../lib/util/dialog.css">lib/util/dialog.css</a>.</p>
+    <a href="../addon/dialog/dialog.js">addon/dialog/dialog.js</a>
+    and <a href="../addon/dialog/dialog.css">addon/dialog/dialog.css</a>.</p>
   </body>
 </html>
diff --git a/demo/vim.html b/demo/vim.html
index d2a143acf..c5835d40d 100644
--- a/demo/vim.html
+++ b/demo/vim.html
@@ -5,12 +5,12 @@
     <title>CodeMirror: Vim bindings demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/dialog.js"></script>
-    <script src="../lib/util/searchcursor.js"></script>
+    <script src="../addon/dialog/dialog.js"></script>
+    <script src="../addon/search/searchcursor.js"></script>
     <script src="../mode/clike/clike.js"></script>
     <script src="../keymap/vim.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
-    <link rel="stylesheet" href="../lib/util/dialog.css">
+    <link rel="stylesheet" href="../addon/dialog/dialog.css">
 
     <style type="text/css">
       .CodeMirror {border-top: 1px solid #eee; border-bottom: 1px solid #eee;}
diff --git a/demo/xmlcomplete.html b/demo/xmlcomplete.html
index 142d52b47..b7dfb42b6 100644
--- a/demo/xmlcomplete.html
+++ b/demo/xmlcomplete.html
@@ -5,10 +5,10 @@
     <title>CodeMirror: XML Autocomplete Demo</title>
     <link rel="stylesheet" href="../lib/codemirror.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/simple-hint.js"></script>
-    <link rel="stylesheet" href="../lib/util/simple-hint.css">
-    <script src="../lib/util/closetag.js"></script>
-    <script src="../lib/util/xml-hint.js"></script>
+    <script src="../addon/hint/simple-hint.js"></script>
+    <link rel="stylesheet" href="../addon/hint/simple-hint.css">
+    <script src="../addon/edit/closetag.js"></script>
+    <script src="../addon/hint/xml-hint.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <link rel="stylesheet" href="../doc/docs.css">
     <style type="text/css">
@@ -23,8 +23,8 @@
 
     <p>Type '&lt;' or space inside tag or
     press <strong>ctrl-space</strong> to activate autocompletion. See
-    the code (<a href="../lib/util/simple-hint.js">here</a>
-    and <a href="../lib/util/xml-hint.js">here</a>) to figure out how
+    the code (<a href="../addon/hint/simple-hint.js">here</a>
+    and <a href="../addon/hint/xml-hint.js">here</a>) to figure out how
     it works.</p>
 
     <script>
diff --git a/doc/compress.html b/doc/compress.html
index 74e68d055..2315838c8 100644
--- a/doc/compress.html
+++ b/doc/compress.html
@@ -127,23 +127,30 @@
           <option value="http://codemirror.net/mode/yaml/yaml.js">yaml.js</option>
           <option value="http://codemirror.net/mode/z80/z80.js">z80.js</option>
         </optgroup>
-        <optgroup label="Utilities and add-ons">
-          <option value="http://codemirror.net/lib/util/overlay.js">overlay.js</option>
-          <option value="http://codemirror.net/lib/util/multiplex.js">multiplex.js</option>
-          <option value="http://codemirror.net/lib/util/runmode.js">runmode.js</option>
-          <option value="http://codemirror.net/lib/util/simple-hint.js">simple-hint.js</option>
-          <option value="http://codemirror.net/lib/util/javascript-hint.js">javascript-hint.js</option>
-          <option value="http://codemirror.net/lib/util/xml-hint.js">xml-hint.js</option>
-          <option value="http://codemirror.net/lib/util/python-hint.js">python-hint.js</option>
-          <option value="http://codemirror.net/lib/util/foldcode.js">foldcode.js</option>
-          <option value="http://codemirror.net/lib/util/dialog.js">dialog.js</option>
-          <option value="http://codemirror.net/lib/util/search.js">search.js</option>
-          <option value="http://codemirror.net/lib/util/searchcursor.js">searchcursor.js</option>
-          <option value="http://codemirror.net/lib/util/matchbrackets.js">matchbrackets.js</option>
-          <option value="http://codemirror.net/lib/util/formatting.js">formatting.js</option>
-          <option value="http://codemirror.net/lib/util/match-highlighter.js">match-highlighter.js</option>
-          <option value="http://codemirror.net/lib/util/closetag.js">closetag.js</option>
-          <option value="http://codemirror.net/lib/util/loadmode.js">loadmode.js</option>
+        <optgroup label="Add-ons">
+          <option value="http://codemirror.net/addon/dialog/dialog.js">dialog.js</option>
+          <option value="http://codemirror.net/addon/edit/closetag.js">closetag.js</option>
+          <option value="http://codemirror.net/addon/edit/continuecomment.js">continuecomment.js</option>
+          <option value="http://codemirror.net/addon/edit/continuelist.js">continuelist.js</option>
+          <option value="http://codemirror.net/addon/edit/matchbrackets.js">matchbrackets.js</option>
+          <option value="http://codemirror.net/addon/fold/foldcode.js">foldcode.js</option>
+          <option value="http://codemirror.net/addon/fold/collapserange.js">collapserange.js</option>
+          <option value="http://codemirror.net/addon/format/formatting.js">formatting.js</option>
+          <option value="http://codemirror.net/addon/hint/simple-hint.js">simple-hint.js</option>
+          <option value="http://codemirror.net/addon/hint/javascript-hint.js">javascript-hint.js</option>
+          <option value="http://codemirror.net/addon/hint/xml-hint.js">xml-hint.js</option>
+          <option value="http://codemirror.net/addon/hint/pig-hint.js">pig-hint.js</option>
+          <option value="http://codemirror.net/addon/hint/python-hint.js">python-hint.js</option>
+          <option value="http://codemirror.net/addon/mode/loadmode.js">loadmode.js</option>
+          <option value="http://codemirror.net/addon/mode/overlay.js">overlay.js</option>
+          <option value="http://codemirror.net/addon/mode/multiplex.js">multiplex.js</option>
+          <option value="http://codemirror.net/addon/runmode/colorize.js">colorize.js</option>
+          <option value="http://codemirror.net/addon/runmode/runmode.js">runmode.js</option>
+          <option value="http://codemirror.net/addon/runmode/runmode-standalone.js">runmode-standalone.js</option>
+          <option value="http://codemirror.net/addon/runmode/runmode.node.js">runmode.node.js</option>
+          <option value="http://codemirror.net/addon/search/search.js">search.js</option>
+          <option value="http://codemirror.net/addon/search/searchcursor.js">searchcursor.js</option>
+          <option value="http://codemirror.net/addon/search/match-highlighter.js">match-highlighter.js</option>
         </optgroup>
         <optgroup label="Keymaps">
           <option value="http://codemirror.net/keymap/emacs.js">emacs.js</option>
diff --git a/doc/manual.html b/doc/manual.html
index 7bb525a46..8f9574b87 100644
--- a/doc/manual.html
+++ b/doc/manual.html
@@ -8,8 +8,8 @@
     <style>dl dl {margin: 0;}</style>
     <script src="../lib/codemirror.js"></script>
     <link rel="stylesheet" href="../lib/codemirror.css">
-    <script src="../lib/util/runmode.js"></script>
-    <script src="../lib/util/colorize.js"></script>
+    <script src="../addon/runmode/runmode.js"></script>
+    <script src="../addon/runmode/colorize.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <script src="../mode/css/css.js"></script>
@@ -1103,19 +1103,19 @@
 
     <h2 id="addons">Add-ons</h2>
 
-    <p>The <code>lib/util</code> directory in the distribution
-    contains a number of reusable components that implement extra
-    editor functionality. In brief, they are:</p>
+    <p>The <code>addon</code> directory in the distribution contains a
+    number of reusable components that implement extra editor
+    functionality. In brief, they are:</p>
 
     <dl>
-      <dt id="util_dialog"><a href="../lib/util/dialog.js"><code>dialog.js</code></a></dt>
+      <dt id="addon_dialog"><a href="../addon/dialog/dialog.js"><code>dialog.js</code></a></dt>
       <dd>Provides a very simple way to query users for text input.
       Adds an <code>openDialog</code> method to CodeMirror instances,
       which can be called with an HTML fragment that provides the
       prompt (should include an <code>input</code> tag), and a
       callback function that is called when text has been entered.
-      Depends on <code>lib/util/dialog.css</code>.</dd>
-      <dt id="util_searchcursor"><a href="../lib/util/searchcursor.js"><code>searchcursor.js</code></a></dt>
+      Depends on <code>addon/dialog/dialog.css</code>.</dd>
+      <dt id="addon_searchcursor"><a href="../addon/search/searchcursor.js"><code>searchcursor.js</code></a></dt>
       <dd>Adds the <code>getSearchCursor(query, start, caseFold) →
       cursor</code> method to CodeMirror instances, which can be used
       to implement search/replace functionality. <code>query</code>
@@ -1144,14 +1144,14 @@
           replacement.</dd>
         </dl></dd>
 
-      <dt id="util_search"><a href="../lib/util/search.js"><code>search.js</code></a></dt>
+      <dt id="addon_search"><a href="../addon/search/search.js"><code>search.js</code></a></dt>
       <dd>Implements the search commands. CodeMirror has keys bound to
       these by default, but will not do anything with them unless an
       implementation is provided. Depends
       on <code>searchcursor.js</code>, and will make use
-      of <a href="#util_dialog"><code>openDialog</code></a> when
+      of <a href="#addon_dialog"><code>openDialog</code></a> when
       available to make prompting for search queries less ugly.</dd>
-      <dt id="util_matchbrackets"><a href="../lib/util/matchbrackets.js"><code>matchbrackets.js</code></a></dt>
+      <dt id="addon_matchbrackets"><a href="../addon/edit/matchbrackets.js"><code>matchbrackets.js</code></a></dt>
       <dd>Defines an option <code>matchBrackets</code> which, when set
       to true, causes matching brackets to be highlighted whenever the
       cursor is next to them. It also adds a
@@ -1159,7 +1159,7 @@
       once, and a method <code>findMatchingBracket</code> that can be
       used to run the bracket-finding algorithm that this uses
       internally.</dd>
-      <dt id="util_foldcode"><a href="../lib/util/foldcode.js"><code>foldcode.js</code></a></dt>
+      <dt id="addon_foldcode"><a href="../addon/fold/foldcode.js"><code>foldcode.js</code></a></dt>
       <dd>Helps with code folding.
       See <a href="../demo/folding.html">the demo</a> for an example.
       Call <code>CodeMirror.newFoldFunction</code> with a range-finder
@@ -1175,17 +1175,21 @@
       where indentation determines block structure (Python, Haskell),
       and <code>CodeMirror.tagRangeFinder</code>, for XML-style
       languages.</dd>
-      <dt id="util_collapserange"><a href="../lib/util/collapserange.js"><code>collapserange.js</code></a></dt>
+      <dt id="addon_collapserange"><a href="../addon/fold/collapserange.js"><code>collapserange.js</code></a></dt>
       <dd>Another approach to
       folding. <a href="../demo/collapserange.html">See demo</a>.
       Allows the user to select a range to fold by clicking in the
       gutter.</dd>
-      <dt id="util_runmode"><a href="../lib/util/runmode.js"><code>runmode.js</code></a></dt>
+      <dt id="addon_runmode"><a href="../addon/runmode/runmode.js"><code>runmode.js</code></a></dt>
       <dd>Can be used to run a CodeMirror mode over text without
       actually opening an editor instance.
-      See <a href="../demo/runmode.html">the demo</a> for an
-      example.</dd>
-      <dt id="util_overlay"><a href="../lib/util/overlay.js"><code>overlay.js</code></a></dt>
+      See <a href="../demo/runmode.html">the demo</a> for an example.
+      There alternate version of the file avaible for
+      running <a href="../addon/runmode/runmode-standalone.js">stand-alone</a>
+      (without including all of CodeMirror) and
+      for <a href="../addon/runmode/runmode.node.js">running under
+      node.js</a>.</dd>
+      <dt id="addon_overlay"><a href="../addon/mode/overlay.js"><code>overlay.js</code></a></dt>
       <dd>Mode combinator that can be used to extend a mode with an
       'overlay' — a secondary mode is run over the stream, along with
       the base mode, and can color specific pieces of text without
@@ -1193,7 +1197,7 @@
       Defines <code>CodeMirror.overlayMode</code>, which is used to
       create such a mode. See <a href="../demo/mustache.html">this
       demo</a> for a detailed example.</dd>
-      <dt id="util_multiplex"><a href="../lib/util/multiplex.js"><code>multiplex.js</code></a></dt>
+      <dt id="addon_multiplex"><a href="../addon/mode/multiplex.js"><code>multiplex.js</code></a></dt>
       <dd>Mode combinator that can be used to easily 'multiplex'
       between several modes.
       Defines <code>CodeMirror.multiplexingMode</code> which, when
@@ -1212,7 +1216,7 @@
       see the content between the delimiters.
       See <a href="../demo/multiplex.html">this demo</a> for an
       example.</dd>
-      <dt id="util_simple-hint"><a href="../lib/util/simple-hint.js"><code>simple-hint.js</code></a></dt>
+      <dt id="addon_simple-hint"><a href="../addon/hint/simple-hint.js"><code>simple-hint.js</code></a></dt>
       <dd>Provides a framework for showing autocompletion hints.
       Defines <code>CodeMirror.simpleHint</code>, which takes a
       CodeMirror instance and a hinting function, and pops up a widget
@@ -1222,36 +1226,36 @@
       is an array of strings (the completions), and <code>from</code>
       and <code>to</code> give the start and end of the token that is
       being completed. Depends
-      on <code>lib/util/simple-hint.css</code>.</dd>
-      <dt id="util_javascript-hint"><a href="../lib/util/javascript-hint.js"><code>javascript-hint.js</code></a></dt>
+      on <code>addon/hint/simple-hint.css</code>.</dd>
+      <dt id="addon_javascript-hint"><a href="../addon/hint/javascript-hint.js"><code>javascript-hint.js</code></a></dt>
       <dd>Defines <code>CodeMirror.javascriptHint</code>
       and <code>CodeMirror.coffeescriptHint</code>, which are simple
       hinting functions for the JavaScript and CoffeeScript
       modes.</dd>
-      <dt id="util_xml-hint"><a href="../lib/util/xml-hint.js"><code>xml-hint.js</code></a></dt>
+      <dt id="addon_xml-hint"><a href="../addon/hint/xml-hint.js"><code>xml-hint.js</code></a></dt>
       <dd>Defines <code>CodeMirror.xmlHint</code>, a hinting function
       for XML (which requires a schema to be defined).</dd>
-      <dt id="util_python-hint"><a href="../lib/util/python-hint.js"><code>python-hint.js</code></a></dt>
+      <dt id="addon_python-hint"><a href="../addon/hint/python-hint.js"><code>python-hint.js</code></a></dt>
       <dd>Defines <code>CodeMirror.pythonHint</code>, a hinter for Python code.</dd>
-      <dt id="util_match-highlighter"><a href="../lib/util/match-highlighter.js"><code>match-highlighter.js</code></a></dt>
+      <dt id="addon_match-highlighter"><a href="../addon/search/match-highlighter.js"><code>match-highlighter.js</code></a></dt>
       <dd>Adds a <code>matchHighlight</code> method to CodeMirror
       instances that can be called (typically from
       a <a href="#event_cursorActivity"><code>cursorActivity</code></a>
       handler) to highlight all instances of a currently selected word
       with the a classname given as a first argument to the method.
       Depends on
-      the <a href="#util_searchcursor"><code>searchcursor</code></a>
+      the <a href="#addon_searchcursor"><code>searchcursor</code></a>
       add-on. Demo <a href="../demo/matchhighlighter.html">here</a>.</dd>
-      <dt id="util_formatting"><a href="../lib/util/formatting.js"><code>formatting.js</code></a></dt>
+      <dt id="addon_formatting"><a href="../addon/format/formatting.js"><code>formatting.js</code></a></dt>
       <dd>Adds <code>commentRange</code>, <code>autoIndentRange</code>,
       and <code>autoFormatRange</code> methods that, respectively,
       comment (or uncomment), indent, or format (add line breaks) a
       range of code. <a href="../demo/formatting.html">Demo here.</a></dd>
-      <dt id="util_closetag"><a href="../lib/util/closetag.js"><code>closetag.js</code></a></dt>
+      <dt id="addon_closetag"><a href="../addon/edit/closetag.js"><code>closetag.js</code></a></dt>
       <dd>Provides utility functions for adding automatic tag closing
       to XML modes. See
       the <a href="../demo/closetag.html">demo</a>.</dd>
-      <dt id="util_loadmode"><a href="../lib/util/loadmode.js"><code>loadmode.js</code></a></dt>
+      <dt id="addon_loadmode"><a href="../addon/mode/loadmode.js"><code>loadmode.js</code></a></dt>
       <dd>Defines a <code>CodeMirror.requireMode(modename,
       callback)</code> function that will try to load a given mode and
       call the callback when it succeeded. You'll have to
@@ -1263,7 +1267,7 @@
       which will ensure the given mode is loaded and cause the given
       editor instance to refresh its mode when the loading
       succeeded. See the <a href="../demo/loadmode.html">demo</a>.</dd>
-      <dt id="util_continuecomment"><a href="../lib/util/continuecomment.js"><code>continuecomment.js</code></a></dt>
+      <dt id="addon_continuecomment"><a href="../addon/edit/continuecomment.js"><code>continuecomment.js</code></a></dt>
       <dd>Adds a <a href="#commands">command</a>
       called <code>newlineAndIndentContinueComment</code> that you can
       bind <code>Enter</code> to in order to have the editor prefix
@@ -1456,8 +1460,8 @@
     extra methods, <code>innerMode</code> which, given a state object,
     returns a <code>{state, mode}</code> object with the inner mode
     and its state for the current position. These are used by utility
-    scripts such as the <a href="#util_formatting">autoformatter</a>
-    and the <a href="#util_closetag">tag closer</a> to get context
+    scripts such as the <a href="#addon_formatting">autoformatter</a>
+    and the <a href="#addon_closetag">tag closer</a> to get context
     information. Use the <code>CodeMirror.innerMode</code> helper
     function to, starting from a mode and a state, recursively walk
     down to the innermost mode and state.</p>
diff --git a/doc/oldrelease.html b/doc/oldrelease.html
index dafe73865..aff806e06 100644
--- a/doc/oldrelease.html
+++ b/doc/oldrelease.html
@@ -91,8 +91,8 @@
     <li>Add <a href="manual.html#option_autoClearEmptyLines"><code>autoClearEmptyLines</code></a> option.</li>
     <li>Properly use tab stops when rendering tabs.</li>
     <li>Make PHP mode more robust.</li>
-    <li>Support indentation blocks in <a href="manual.html#util_foldcode">code folder</a>.</li>
-    <li>Add a script for <a href="manual.html#util_match-highlighter">highlighting instances of the selection</a>.</li>
+    <li>Support indentation blocks in <a href="manual.html#addon_foldcode">code folder</a>.</li>
+    <li>Add a script for <a href="manual.html#addon_match-highlighter">highlighting instances of the selection</a>.</li>
     <li>New <a href="../mode/properties/index.html">.properties</a> mode.</li>
     <li>Fix many bugs.</li>
   </ul>
@@ -148,7 +148,7 @@
     and <a href="../theme/rubyblue.css">Rubyblue</a> themes.</li>
     <li>Add <a href="manual.html#setBookmark"><code>setBookmark</code></a> method.</li>
     <li>Move some of the demo code into reusable components
-    under <a href="../lib/util/"><code>lib/util</code></a>.</li>
+    under <a href="../addon/"><code>lib/util</code></a>.</li>
     <li>Make screen-coord-finding code faster and more reliable.</li>
     <li>Fix drag-and-drop in Firefox.</li>
     <li>Improve support for IME.</li>
diff --git a/doc/upgrade_v3.html b/doc/upgrade_v3.html
index eaaffec17..7e8a6b61a 100644
--- a/doc/upgrade_v3.html
+++ b/doc/upgrade_v3.html
@@ -7,8 +7,8 @@
     <link rel="stylesheet" type="text/css" href="docs.css"/>
     <script src="../lib/codemirror.js"></script>
     <link rel="stylesheet" href="../lib/codemirror.css">
-    <script src="../lib/util/runmode.js"></script>
-    <script src="../lib/util/colorize.js"></script>
+    <script src="../addon/runmode/runmode.js"></script>
+    <script src="../addon/runmode/colorize.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <script src="../mode/css/css.js"></script>
@@ -174,9 +174,9 @@ and <a href="manual.html#getScrollInfo"><code>getScrollInfo</code></a>.</p>
 
 <h2 id=matchbrackets>Bracket matching no longer in core</h2>
 
-<p>The <a href="manual.html#util_matchbrackets"><code>matchBrackets</code></a>
+<p>The <a href="manual.html#addon_matchbrackets"><code>matchBrackets</code></a>
 option is no longer defined in the core editor.
-Load <code>lib/util/matchbrackets.js</code> to enable it.</p>
+Load <code>addon/edit/matchbrackets.js</code> to enable it.</p>
 
 <h2 id=modes>Mode management</h2>
 
diff --git a/index.html b/index.html
index 174bc27fd..e921f0f30 100644
--- a/index.html
+++ b/index.html
@@ -329,7 +329,7 @@
     <li>Add <a href="doc/manual.html#defaultTextHeight"><code>defaultTextHeight</code></a> method.</li>
     <li>Various extensions to the vim keymap.</li>
     <li>Make <a href="mode/php/index.html">PHP mode</a> build on <a href="mode/htmlmixed/index.html">mixed HTML mode</a>.</li>
-    <li>Add <a href="doc/manual.html#util_continuecomment">comment-continuing</a> add-on.</li>
+    <li>Add <a href="doc/manual.html#addon_continuecomment">comment-continuing</a> add-on.</li>
     <li>Full <a href="https://github.com/marijnh/CodeMirror/compare/v2.35...v2.36">list of patches</a>.</li>
   </ul>
 
diff --git a/mode/clike/index.html b/mode/clike/index.html
index ca10c4bc2..5f90394d9 100644
--- a/mode/clike/index.html
+++ b/mode/clike/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: C-like mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="clike.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style>.CodeMirror {border: 2px inset #dee;}</style>
diff --git a/mode/clike/scala.html b/mode/clike/scala.html
index 39115967a..f3c7eea49 100644
--- a/mode/clike/scala.html
+++ b/mode/clike/scala.html
@@ -6,7 +6,7 @@
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <link rel="stylesheet" href="../../theme/ambiance.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="clike.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style>
diff --git a/mode/d/index.html b/mode/d/index.html
index 89a849895..13332727a 100755
--- a/mode/d/index.html
+++ b/mode/d/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: D mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="d.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style>.CodeMirror {border: 2px inset #dee;}</style>
diff --git a/mode/erlang/index.html b/mode/erlang/index.html
index f6bee8f72..fd21521c8 100644
--- a/mode/erlang/index.html
+++ b/mode/erlang/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Erlang mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="erlang.js"></script>
     <link rel="stylesheet" href="../../theme/erlang-dark.css">
     <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
diff --git a/mode/gfm/index.html b/mode/gfm/index.html
index e4ea47357..b5bdb8888 100644
--- a/mode/gfm/index.html
+++ b/mode/gfm/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: GFM mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/overlay.js"></script>
+    <script src="../../addon/mode/overlay.js"></script>
     <script src="../xml/xml.js"></script>
     <script src="../markdown/markdown.js"></script>
     <script src="gfm.js"></script>
diff --git a/mode/go/index.html b/mode/go/index.html
index 1a9ef5385..8a6aafca2 100644
--- a/mode/go/index.html
+++ b/mode/go/index.html
@@ -6,7 +6,7 @@
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <link rel="stylesheet" href="../../theme/elegant.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="go.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style>.CodeMirror {border:1px solid #999; background:#ffc}</style>
diff --git a/mode/groovy/index.html b/mode/groovy/index.html
index d0d76bfa9..3d3959577 100644
--- a/mode/groovy/index.html
+++ b/mode/groovy/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Groovy mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="groovy.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style>.CodeMirror {border-top: 1px solid #500; border-bottom: 1px solid #500;}</style>
diff --git a/mode/haskell/index.html b/mode/haskell/index.html
index b304a2768..56307b8a9 100644
--- a/mode/haskell/index.html
+++ b/mode/haskell/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Haskell mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="haskell.js"></script>
     <link rel="stylesheet" href="../../theme/elegant.css">
     <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
diff --git a/mode/javascript/index.html b/mode/javascript/index.html
index d81413c0a..9222ddf17 100644
--- a/mode/javascript/index.html
+++ b/mode/javascript/index.html
@@ -5,8 +5,8 @@
     <title>CodeMirror: JavaScript mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
-    <script src="../../lib/util/continuecomment.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
+    <script src="../../addon/edit/continuecomment.js"></script>
     <script src="javascript.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
diff --git a/mode/less/index.html b/mode/less/index.html
index 7f27cf30e..78c1e5307 100644
--- a/mode/less/index.html
+++ b/mode/less/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: LESS mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="less.js"></script>
     <style>.CodeMirror {background: #f8f8f8; border: 1px solid #ddd; font-size:12px; height: 400px}</style>
     <link rel="stylesheet" href="../../doc/docs.css">
diff --git a/mode/lua/index.html b/mode/lua/index.html
index df83f9b47..a0a42d91c 100644
--- a/mode/lua/index.html
+++ b/mode/lua/index.html
@@ -4,7 +4,7 @@
     <meta charset="utf-8">
     <title>CodeMirror: Lua mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="../../lib/codemirror.js"></script>
     <script src="lua.js"></script>
     <link rel="stylesheet" href="../../theme/neat.css">
diff --git a/mode/markdown/index.html b/mode/markdown/index.html
index 5d7452f1e..6f97b10e7 100644
--- a/mode/markdown/index.html
+++ b/mode/markdown/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Markdown mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/continuelist.js"></script>
+    <script src="../../addon/edit/continuelist.js"></script>
     <script src="../xml/xml.js"></script>
     <script src="markdown.js"></script>
     <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
diff --git a/mode/ocaml/index.html b/mode/ocaml/index.html
index 962fa29eb..c10a84fad 100644
--- a/mode/ocaml/index.html
+++ b/mode/ocaml/index.html
@@ -10,7 +10,7 @@
 </style>
 
 <script src=../../lib/codemirror.js></script>
-<script src=../../lib/util/matchbrackets.js></script>
+<script src=../../addon/edit/matchbrackets.js></script>
 <script src=ocaml.js></script>
 
 <h1>CodeMirror: OCaml mode</h1>
diff --git a/mode/php/index.html b/mode/php/index.html
index 4b21c1900..3d4c336ce 100644
--- a/mode/php/index.html
+++ b/mode/php/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: PHP mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="../htmlmixed/htmlmixed.js"></script>
     <script src="../xml/xml.js"></script>
     <script src="../javascript/javascript.js"></script>
diff --git a/mode/python/index.html b/mode/python/index.html
index 7a26d278d..c1df11948 100644
--- a/mode/python/index.html
+++ b/mode/python/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Python mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="python.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style type="text/css">.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
diff --git a/mode/ruby/index.html b/mode/ruby/index.html
index f226289d7..64cfe5ef3 100644
--- a/mode/ruby/index.html
+++ b/mode/ruby/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Ruby mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="ruby.js"></script>
     <style>
       .CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}
diff --git a/mode/sass/index.html b/mode/sass/index.html
index 71c05e0c3..3af7bff9e 100644
--- a/mode/sass/index.html
+++ b/mode/sass/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Sass mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="sass.js"></script>
     <style>.CodeMirror {border: 1px solid #ddd; font-size:12px; height: 400px}</style>
     <link rel="stylesheet" href="../../doc/docs.css">
diff --git a/mode/shell/index.html b/mode/shell/index.html
index 0827053ce..9a2ef7c4c 100644
--- a/mode/shell/index.html
+++ b/mode/shell/index.html
@@ -10,7 +10,7 @@
 </style>
 
 <script src=../../lib/codemirror.js></script>
-<script src="../../lib/util/matchbrackets.js"></script>
+<script src="../../addon/edit/matchbrackets.js"></script>
 <script src=shell.js></script>
 
 <h1>CodeMirror: Shell mode</h1>
diff --git a/mode/smalltalk/index.html b/mode/smalltalk/index.html
index 690b560fd..b7aebdb7f 100644
--- a/mode/smalltalk/index.html
+++ b/mode/smalltalk/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: Smalltalk mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="smalltalk.js"></script>
     <link rel="stylesheet" href="../../doc/docs.css">
     <style>
diff --git a/mode/sparql/index.html b/mode/sparql/index.html
index a99febd53..e7433871c 100644
--- a/mode/sparql/index.html
+++ b/mode/sparql/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: SPARQL mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="sparql.js"></script>
     <style>.CodeMirror {border-top: 1px solid black; border-bottom: 1px solid black;}</style>
     <link rel="stylesheet" href="../../doc/docs.css">
diff --git a/mode/tiddlywiki/index.html b/mode/tiddlywiki/index.html
index 89ae85892..848f33a59 100644
--- a/mode/tiddlywiki/index.html
+++ b/mode/tiddlywiki/index.html
@@ -5,7 +5,7 @@
     <title>CodeMirror: TiddlyWiki mode</title>
     <link rel="stylesheet" href="../../lib/codemirror.css">
     <script src="../../lib/codemirror.js"></script>
-    <script src="../../lib/util/matchbrackets.js"></script>
+    <script src="../../addon/edit/matchbrackets.js"></script>
     <script src="tiddlywiki.js"></script>
     <link rel="stylesheet" href="tiddlywiki.css">
     <link rel="stylesheet" href="../../doc/docs.css">
diff --git a/mode/vb/index.html b/mode/vb/index.html
index 1670c7d05..74dd5e816 100644
--- a/mode/vb/index.html
+++ b/mode/vb/index.html
@@ -12,7 +12,7 @@
       .CodeMirror-scroll { overflow-x: auto; overflow-y: hidden;}
       .CodeMirror pre { font-family: Inconsolata; font-size: 14px}
     </style> 
-    <script type="text/javascript" src="../../lib/util/runmode.js"></script>
+    <script type="text/javascript" src="../../addon/runmode/runmode.js"></script>
   </head>
   <body onload="init()">
     <h1>CodeMirror: VB.NET mode</h1>
diff --git a/test/index.html b/test/index.html
index 9634ac23e..4bb4a77be 100644
--- a/test/index.html
+++ b/test/index.html
@@ -7,8 +7,8 @@
     <link rel="stylesheet" href="../doc/docs.css">
     <link rel="stylesheet" href="mode_test.css">
     <script src="../lib/codemirror.js"></script>
-    <script src="../lib/util/overlay.js"></script>
-    <script src="../lib/util/searchcursor.js"></script>
+    <script src="../addon/mode/overlay.js"></script>
+    <script src="../addon/search/searchcursor.js"></script>
     <script src="../mode/javascript/javascript.js"></script>
     <script src="../mode/xml/xml.js"></script>
     <script src="../keymap/vim.js"></script>
diff --git a/test/run.js b/test/run.js
index 8c7649a17..5588d6f38 100755
--- a/test/run.js
+++ b/test/run.js
@@ -4,6 +4,7 @@ var lint = require("./lint/lint");
 
 lint.checkDir("mode");
 lint.checkDir("lib");
+lint.checkDir("addon");
 
 var ok = lint.success();
 
-- 
GitLab