c9-core/plugins/c9.ide.language.generic/snippet_loader.js

59 wiersze
1.8 KiB
JavaScript

/**
* Cloud9 Language Foundation
*
* @copyright 2013, Ajax.org B.V.
*/
define(function(require, exports, module) {
var snippetManager = require("ace/snippets").snippetManager;
var config = require("ace/config");
exports.init = function(worker) {
var loadSnippetsForMode = function(mode) {
var id = mode.$id;
if (!snippetManager.files)
snippetManager.files = {};
loadSnippetFile(id);
if (mode.modes)
mode.modes.forEach(loadSnippetsForMode);
};
function loadSnippetFile(id) {
if (!id || snippetManager.files[id])
return;
var snippetFilePath = id.replace(/\/modes?\//, /snippets/);
snippetManager.files[id] = {};
config.loadModule(snippetFilePath, function(m) {
if (m) {
snippetManager.files[id] = m;
if (m.snippetText)
m.snippets = snippetManager.parseSnippetFile(m.snippetText);
snippetManager.register(m.snippets, m.scope);
if (m.includeScopes) {
snippetManager.snippetMap[m.scope].includeScopes = m.includeScopes;
m.includeScopes.forEach(function(x) {
loadSnippetFile("ace/mode/" + x);
});
}
}
});
}
function sendSnippetsToWorker(e) {
worker.emit("loadSnippets", { data: {
language: e.scope,
snippets: snippetManager.snippetNameMap[e.scope]
}});
}
worker.on("changeMode", function(e) {
loadSnippetsForMode(worker.$doc.$mode);
});
worker.on("terminate", function() {
snippetManager.off("registerSnippets", sendSnippetsToWorker);
});
snippetManager.on("registerSnippets", sendSnippetsToWorker);
};
});