add a way to unregister snippets

This commit is contained in:
nightwing 2013-03-20 02:38:57 +04:00
commit f9ed205557
3 changed files with 38 additions and 6 deletions

View file

@ -450,14 +450,20 @@ require("ace/placeholder").PlaceHolder;
var SnippetManager = require("ace/snippets").SnippetManager var SnippetManager = require("ace/snippets").SnippetManager
var jsSnippets = require("ace/snippets/javascript"); var jsSnippets = require("ace/snippets/javascript");
window.SnippetManager = SnippetManager window.SnippetManager = SnippetManager
saveSnippets()
function saveSnippets() { function saveSnippets() {
jsSnippets.snippets = SnippetManager.parseSnippetFile(jsSnippets.snippetText); jsSnippets.snippets = SnippetManager.parseSnippetFile(jsSnippets.snippetText);
SnippetManager.snipp
SnippetManager.register(jsSnippets.snippets, "javascript") SnippetManager.register(jsSnippets.snippets, "javascript")
} }
env.editSnippets = function() { env.editSnippets = function() {
var sp = env.split; var sp = env.split;
if (sp.getSplits() == 2) {
sp.setSplits(1);
return;
}
sp.setSplits(1); sp.setSplits(1);
sp.setSplits(2); sp.setSplits(2);
sp.setOrientation(sp.BESIDE); sp.setOrientation(sp.BESIDE);

View file

@ -404,6 +404,7 @@ var SnippetManager = function() {
this.register = function(snippets, scope) { this.register = function(snippets, scope) {
var snippetMap = this.snippetMap; var snippetMap = this.snippetMap;
var snippetNameMap = this.snippetNameMap; var snippetNameMap = this.snippetNameMap;
var self = this;
function wrapRegexp(src) { function wrapRegexp(src) {
if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
src = "(?:" + src + ")" src = "(?:" + src + ")"
@ -433,9 +434,15 @@ var SnippetManager = function() {
snippetMap[scope] = []; snippetMap[scope] = [];
snippetNameMap[scope] = {}; snippetNameMap[scope] = {};
} }
var map = snippetNameMap[scope];
if (s.name) {
var old = map[s.name];
if (old)
self.unregister(old);
map[s.name] = s;
}
snippetMap[scope].push(s); snippetMap[scope].push(s);
if (s.name)
snippetNameMap[scope][s.name] = s;
if (s.tabTrigger && !s.trigger) { if (s.tabTrigger && !s.trigger) {
if (!s.guard && /^\w/.test(s.tabTrigger)) if (!s.guard && /^\w/.test(s.tabTrigger))
@ -455,6 +462,25 @@ var SnippetManager = function() {
else if (Array.isArray(snippets)) else if (Array.isArray(snippets))
snippets.forEach(addSnippet); snippets.forEach(addSnippet);
}; };
this.unregister = function(snippets, scope) {
var snippetMap = this.snippetMap;
var snippetNameMap = this.snippetNameMap;
function removeSnippet(s) {
var map = snippetNameMap[scope];
if (map && map[s.name]) {
delete map[s.name];
map = snippetMap[scope];
var i = map && map.indexOf(s);
if (i >= 0)
map.splice(i, 1);
}
}
if (snippets.content)
removeSnippet(snippets);
else if (Array.isArray(snippets))
snippets.forEach(removeSnippet);
};
this.parseSnippetFile = function(str) { this.parseSnippetFile = function(str) {
var list = [], snippet = {}; var list = [], snippet = {};
var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm; var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;

View file

@ -163,13 +163,13 @@ snippet for-
} }
# for (...) {...} # for (...) {...}
snippet for snippet for
for (var ${1:i} = 0; $1 < ${2:Things}.length; $1${3:++}) { for (var ${1:i} = 0; $1 < ${2:Things}.length; $1$++) {
${0:$2[$1]} ${3:$2[$1]}$0
} }
# for (...) {...} (Improved Native For-Loop) # for (...) {...} (Improved Native For-Loop)
snippet forr snippet forr
for (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1${3:--}) { for (var ${1:i} = ${2:Things}.length - 1; $1 >= 0; $1$--) {
${0:$2[$1]} ${3:$2[$1]}$0
} }