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 jsSnippets = require("ace/snippets/javascript");
window.SnippetManager = SnippetManager
saveSnippets()
function saveSnippets() {
jsSnippets.snippets = SnippetManager.parseSnippetFile(jsSnippets.snippetText);
SnippetManager.snipp
SnippetManager.register(jsSnippets.snippets, "javascript")
}
env.editSnippets = function() {
var sp = env.split;
if (sp.getSplits() == 2) {
sp.setSplits(1);
return;
}
sp.setSplits(1);
sp.setSplits(2);
sp.setOrientation(sp.BESIDE);

View file

@ -404,6 +404,7 @@ var SnippetManager = function() {
this.register = function(snippets, scope) {
var snippetMap = this.snippetMap;
var snippetNameMap = this.snippetNameMap;
var self = this;
function wrapRegexp(src) {
if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
src = "(?:" + src + ")"
@ -433,9 +434,15 @@ var SnippetManager = function() {
snippetMap[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);
if (s.name)
snippetNameMap[scope][s.name] = s;
if (s.tabTrigger && !s.trigger) {
if (!s.guard && /^\w/.test(s.tabTrigger))
@ -455,6 +462,25 @@ var SnippetManager = function() {
else if (Array.isArray(snippets))
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) {
var list = [], snippet = {};
var re = /^#.*|^({[\s\S]*})\s*$|^(\S+) (.*)$|^((?:\n*\t.*)+)/gm;

View file

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