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 == "&" ? "&" : "<"; }); 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