From a9117a4aee9c7dc377aaa2cdc8fcad72906697bf Mon Sep 17 00:00:00 2001 From: nightwing Date: Sun, 23 Feb 2014 14:02:38 +0400 Subject: [PATCH] define('ace/ace') needs to be at the end of ace.js fixes https://github.com/ajaxorg/ace-builds/issues/15 --- Makefile.dryice.js | 87 +++++++++++++++++++++++++++++----------------- lib/ace/config.js | 6 ++-- 2 files changed, 60 insertions(+), 33 deletions(-) diff --git a/Makefile.dryice.js b/Makefile.dryice.js index ee26328d..add81489 100755 --- a/Makefile.dryice.js +++ b/Makefile.dryice.js @@ -293,27 +293,30 @@ function getWriteFilters(options, projectType, main) { if (options.noconflict) filters.push(namespace(options.ns)); - + + if (options.exportModule && projectType == "main" || projectType == "ext") { + filters.push(exportAce(options.ns, options.exportModule, + options.noconflict ? options.ns : "", projectType == "ext" && main)); + } + if (options.compress) filters.push(copy.filter.uglifyjs); - // copy.filter.uglifyjs.options.ascii = true; doesn't work with some uglify.js versions + // copy.filter.uglifyjs.options.ascii_only = true; doesn't work with some uglify.js versions filters.push(function(text) { - var t1 = text.replace(/[\x80-\uffff]/g, function(c) { + var text = text.replace(/[\x00-\x09\x0b\x0c\x0e\x19\x80-\uffff]/g, function(c) { c = c.charCodeAt(0).toString(16); + if (c.length == 1) + return "\\x0" + c; if (c.length == 2) return "\\x" + c; if (c.length == 3) - c = "0" + c; + return "\\u0" + c; return "\\u" + c; }); return text; }); - if (options.exportModule && projectType == "main" || projectType == "ext") { - filters.push(exportAce(options.ns, options.exportModule, - options.noconflict ? options.ns : "", projectType == "ext" && main)); - } return filters; } @@ -550,15 +553,6 @@ var detectTextModules = function(input, source) { detectTextModules.onRead = true; copy.filter.addDefines = detectTextModules; -function generateThemesModule(themes) { - var themelist = [ - 'define(function(require, exports, module) {', - '\n\nmodule.exports.themes = ' + JSON.stringify(themes, null, ' '), - ';\n\n});' - ].join(''); - fs.writeFileSync(__dirname + '/lib/ace/ext/themelist_utils/themes.js', themelist, 'utf8'); -} - function inlineTextModules(text) { var deps = []; return text.replace(/, *['"]ace\/requirejs\/text!(.*?)['"]| require\(['"](?:ace|[.\/]+)\/requirejs\/text!(.*?)['"]\)/g, function(_, dep, call) { @@ -574,14 +568,37 @@ function inlineTextModules(text) { }); call = textModules[dep]; - // if (deps.length > 1) - // console.log(call.length) if (call) return " " + call; } }); } +var CommonJsProject = copy.createCommonJsProject({roots:[]}).constructor; +CommonJsProject.prototype.getCurrentModules = function() { + function isDep(child, parent) { + if (!modules[parent]) + return false; + var deps = modules[parent].deps; + if (deps[child]) return true; + return Object.keys(deps).some(function(x) { + return isDep(child, x) + }); + } + var depMap = {}, modules = this.currentModules; + return Object.keys(this.currentModules).map(function(moduleName) { + module = modules[moduleName] + module.id = moduleName; + return module; + }).sort(function(a, b) { + if (isDep(a.id, b.id)) + return -1; + if (isDep(b.id, a.id)) + return 1; + return Object.keys(a.deps).length - Object.keys(b.deps).length || a.id.localeCompare(b.id) + }); +}; + // TODO: replace with project.clone once it is fixed in dryice function cloneProject(project) { var clone = copy.createCommonJsProject({ @@ -602,16 +619,12 @@ function cloneProject(project) { } function copyFileSync(srcFile, destFile) { - var BUF_LENGTH = 64*1024, - buf = new Buffer(BUF_LENGTH), - bytesRead = BUF_LENGTH, - pos = 0, - fdr = null, - fdw = null; - - - fdr = fs.openSync(srcFile, 'r'); - fdw = fs.openSync(destFile, 'w'); + var BUF_LENGTH = 64*1024; + var buf = new Buffer(BUF_LENGTH); + var bytesRead = BUF_LENGTH; + var pos = 0; + var fdr = fs.openSync(srcFile, 'r'); + var fdw = fs.openSync(destFile, 'w'); while (bytesRead === BUF_LENGTH) { bytesRead = fs.readSync(fdr, buf, 0, BUF_LENGTH, pos); @@ -652,13 +665,14 @@ function exportAce(ns, module, requireBase, extModule) { requireBase = requireBase || "window"; module = module || "ace/ace"; return function(text) { - var template = function() { (function() { REQUIRE_NS.require(["MODULE"], function(a) { - a && a.config.init(); + a && a.config.init(true); if (!window.NS) window.NS = a; + for (var key in a) if (a.hasOwnProperty(key)) + NS[key] = a[key]; }); })(); }; @@ -672,6 +686,8 @@ function exportAce(ns, module, requireBase, extModule) { }; } + text = text.replace(/function init\(packaged\) {/, "init(true);$&\n"); + return (text + ";" + template .toString() .replace(/MODULE/g, module) @@ -694,6 +710,15 @@ function updateModes() { }) } +function generateThemesModule(themes) { + var themelist = [ + 'define(function(require, exports, module) {', + '\n\nmodule.exports.themes = ' + JSON.stringify(themes, null, ' '), + ';\n\n});' + ].join(''); + fs.writeFileSync(__dirname + '/lib/ace/ext/themelist_utils/themes.js', themelist, 'utf8'); +} + if (!module.parent) main(process.argv); else diff --git a/lib/ace/config.js b/lib/ace/config.js index f8614c1a..1d927e45 100644 --- a/lib/ace/config.js +++ b/lib/ace/config.js @@ -144,8 +144,8 @@ exports.loadModule = function(moduleName, onLoad) { // initialization -exports.init = function() { - options.packaged = require.packaged || module.packaged || (global.define && define.packaged); +function init(packaged) { + options.packaged = packaged || require.packaged || module.packaged || (global.define && define.packaged); if (!global.document) return ""; @@ -190,6 +190,8 @@ exports.init = function() { exports.set(key, scriptOptions[key]); }; +exports.init = init; + function deHyphenate(str) { return str.replace(/-(.)/g, function(m, m1) { return m1.toUpperCase(); }); }