From 7fbe5383680e1d1ff263368c12f7c1c8ede58517 Mon Sep 17 00:00:00 2001
From: Marijn Haverbeke <marijnh@gmail.com>
Date: Thu, 6 Feb 2014 15:41:41 +0100
Subject: [PATCH] [runmode.node addon] Integrate with node's require mechanism

Mode dependencies are now loaded in a saner way.
---
 addon/runmode/runmode.node.js |  2 ++
 bin/source-highlight          | 16 +++-------------
 mode/meta.js                  | 13 ++++++++++++-
 3 files changed, 17 insertions(+), 14 deletions(-)

diff --git a/addon/runmode/runmode.node.js b/addon/runmode/runmode.node.js
index 3bfd11a93..74c39be7e 100644
--- a/addon/runmode/runmode.node.js
+++ b/addon/runmode/runmode.node.js
@@ -114,3 +114,5 @@ exports.runMode = function(string, modespec, callback, options) {
     }
   }
 };
+
+require.cache[require.resolve("../../lib/codemirror")] = require.cache[require.resolve("./runmode.node")];
diff --git a/bin/source-highlight b/bin/source-highlight
index 1373f6626..6d15f1ae3 100755
--- a/bin/source-highlight
+++ b/bin/source-highlight
@@ -8,7 +8,7 @@
 
 var fs = require("fs");
 
-CodeMirror = require("../addon/runmode/runmode.node.js");
+var CodeMirror = require("../addon/runmode/runmode.node.js");
 require("../mode/meta.js");
 
 var sPos = process.argv.indexOf("-s");
@@ -26,18 +26,8 @@ CodeMirror.modeInfo.forEach(function(info) {
   }
 });
 
-function ensureMode(name) {
-  if (CodeMirror.modes[name] || name == "null") return;
-  try {
-    require("../mode/" + name + "/" + name + ".js");
-  } catch(e) {
-    console.error("Could not load mode " + name + ".");
-    process.exit(1);
-  }
-  var obj = CodeMirror.modes[name];
-  if (obj.dependencies) obj.dependencies.forEach(ensureMode);
-}
-ensureMode(modeName);
+if (!CodeMirror.modes[modeName])
+  require("../mode/" + modeName + "/" + modeName + ".js");
 
 function esc(str) {
   return str.replace(/[<&]/g, function(ch) { return ch == "&" ? "&amp;" : "&lt;"; });
diff --git a/mode/meta.js b/mode/meta.js
index e048c22e1..84ae8070b 100644
--- a/mode/meta.js
+++ b/mode/meta.js
@@ -1,3 +1,13 @@
+(function(mod) {
+  if (typeof exports == "object" && typeof module == "object") // CommonJS
+    mod(require("../lib/codemirror"));
+  else if (typeof define == "function" && define.amd) // AMD
+    define(["../lib/codemirror"], mod);
+  else // Plain browser env
+    mod(CodeMirror);
+})(function(CodeMirror) {
+  "use strict";
+
 CodeMirror.modeInfo = [
   {name: 'APL', mime: 'text/apl', mode: 'apl'},
   {name: 'Asterisk', mime: 'text/x-asterisk', mode: 'asterisk'},
@@ -85,8 +95,9 @@ CodeMirror.modeInfo = [
   {name: 'Velocity', mime: 'text/velocity', mode: 'velocity'},
   {name: 'Verilog', mime: 'text/x-verilog', mode: 'verilog'},
   {name: 'XML', mime: 'application/xml', mode: 'xml'},
-  {name: 'HTML', mime: 'text/html', mode: 'xml'},
   {name: 'XQuery', mime: 'application/xquery', mode: 'xquery'},
   {name: 'YAML', mime: 'text/x-yaml', mode: 'yaml'},
   {name: 'Z80', mime: 'text/x-z80', mode: 'z80'}
 ];
+
+});
-- 
GitLab