Skip to content
This repository has been archived by the owner on Sep 6, 2021. It is now read-only.

Commit

Permalink
Load modes via require after all, allowing language.setMode to be pri…
Browse files Browse the repository at this point in the history
…vate since now the mode is already available when defining a language
  • Loading branch information
DennisKehrig committed Feb 21, 2013
1 parent c1a6e28 commit c590931
Show file tree
Hide file tree
Showing 4 changed files with 13 additions and 54 deletions.
3 changes: 2 additions & 1 deletion src/brackets.js
Expand Up @@ -28,7 +28,8 @@
require.config({
paths: {
"text" : "thirdparty/text",
"i18n" : "thirdparty/i18n"
"i18n" : "thirdparty/i18n",
"mode" : "thirdparty/CodeMirror2/mode"
},
// Use custom brackets property until CEF sets the correct navigator.language
// NOTE: When we change to navigator.language here, we also should change to
Expand Down
7 changes: 4 additions & 3 deletions src/extensions/default/LESSSupport/main.js
Expand Up @@ -26,15 +26,16 @@

define(function (require, exports, module) {
"use strict";


require("mode/less/less");

var Languages = brackets.getModule("language/Languages");

var language = Languages.defineLanguage("less", {
name: "LESS",
mode: "less",
fileExtensions: ["less"],
blockComment: ["/*", "*/"],
lineComment: "//"
});

language.loadAndSetBuiltinMode("less");
});
54 changes: 5 additions & 49 deletions src/language/Languages.js
Expand Up @@ -193,29 +193,6 @@ define(function (require, exports, module) {
return _fallbackLanguage;
}

/**
* Loads a mode stored in thirdparty/CodeMirror2/mode/
* @param {!string} mode Name of the mode to load
* @param {string} subDirectory Name of a sub directory with mode files (e.g. "rpm")
* @return {$.Promise} A promise object that is resolved when the mode has been loaded
*/
function loadBuiltinMode(mode, subDirectory) {
var result = new $.Deferred();

var modePath = mode + "/" + mode;
if (subDirectory) {
modePath = subDirectory + "/" + modePath;
}

if (!modePath.match(/^[a-zA-Z0-9_\-]+(\/[a-zA-Z0-9_\-]+)*$/)) {
throw new Error("loadBuiltinMode call resulted in possibly unsafe path " + modePath);
}

require(["thirdparty/CodeMirror2/mode/" + modePath], result.resolve, result.reject);

return result.promise();
}

/**
* @constructor
* Model for a language.
Expand Down Expand Up @@ -246,7 +223,7 @@ define(function (require, exports, module) {
* @param {Array.<string>} modeAliases Names of CodeMirror modes or MIME modes that are only used as submodes
* @return {Language} This language
*/
Language.prototype.setMode = function (mode, modeAliases) {
Language.prototype._setMode = function (mode, modeAliases) {
var i;

_validateMode(mode, "mode");
Expand All @@ -266,25 +243,6 @@ define(function (require, exports, module) {
return this;
};

/**
* First load, then set a mode provided by our CodeMirror distribution.
*
* @param {!string} mode Name
* @return {$.Promise} A promise object that is resolved when the mode has been loaded and set
*/
Language.prototype.loadAndSetBuiltinMode = function (mode) {
var result = new $.Deferred(), _this = this;

loadBuiltinMode(mode)
.done(function () {
_this.setMode(mode);
result.resolve();
})
.fail(result.reject);

return result.promise();
};

/**
* Returns an array of file extensions for this language.
* @return {Array.<string>} File extensions used by this language
Expand Down Expand Up @@ -427,15 +385,14 @@ define(function (require, exports, module) {
if (mode) {

var setMode = function () {
language.setMode(mimeMode || mode, modeAliases);
language._setMode(mimeMode || mode, modeAliases);
};

if (_hasMode(mode)) {
setMode();
} else {
loadBuiltinMode(mode).done(function () {
// For some reason, passing setMode directly to done swallows the exceptions it throws
window.setTimeout(setMode);
require(["mode/" + mode + "/" + mode], function () {
setMode();
});
}
}
Expand Down Expand Up @@ -467,7 +424,6 @@ define(function (require, exports, module) {
defineLanguage: defineLanguage,
getLanguage: getLanguage,
getLanguageForFileExtension: getLanguageForFileExtension,
getLanguageForMode: getLanguageForMode,
loadBuiltinMode: loadBuiltinMode
getLanguageForMode: getLanguageForMode
};
});
3 changes: 2 additions & 1 deletion src/utils/ExtensionLoader.js
Expand Up @@ -48,7 +48,8 @@ define(function (require, exports, module) {

var globalConfig = {
"text" : srcPath + "/thirdparty/text",
"i18n" : srcPath + "/thirdparty/i18n"
"i18n" : srcPath + "/thirdparty/i18n",
"mode" : srcPath + "/thirdparty/CodeMirror2/mode"
};

/**
Expand Down

0 comments on commit c590931

Please sign in to comment.