diff --git a/Makefile.dryice.js b/Makefile.dryice.js
index 549f3665..49bf0b28 100755
--- a/Makefile.dryice.js
+++ b/Makefile.dryice.js
@@ -280,7 +280,7 @@ function addSuffix(options) {
}
}
-function getWriteFilters(options, projectType) {
+function getWriteFilters(options, projectType, main) {
var filters = [
copy.filter.moduleDefines,
removeUseStrict,
@@ -310,11 +310,9 @@ function getWriteFilters(options, projectType) {
return text;
});
- if (options.exportModule && projectType == "main") {
- if (options.noconflict)
- filters.push(exportAce(options.ns, options.exportModule, options.ns));
- else
- filters.push(exportAce(options.ns, options.exportModule));
+ if (options.exportModule && projectType == "main" || projectType == "ext") {
+ filters.push(exportAce(options.ns, options.exportModule,
+ options.noconflict ? options.ns : "", projectType == "ext" && main));
}
return filters;
}
@@ -390,7 +388,7 @@ var buildAce = function(options) {
project: cloneProject(project),
require: [ 'ace/ext/' + ext ]
}],
- filter: getWriteFilters(options, "ext"),
+ filter: getWriteFilters(options, "ext", 'ace/ext/' + ext),
dest: targetDir + "/ext-" + ext + ".js"
});
});
@@ -650,7 +648,7 @@ function namespace(ns) {
};
}
-function exportAce(ns, module, requireBase) {
+function exportAce(ns, module, requireBase, extModule) {
requireBase = requireBase || "window";
module = module || "ace/ace";
return function(text) {
@@ -666,7 +664,16 @@ function exportAce(ns, module, requireBase) {
});
})();
};
-
+
+ if (extModule) {
+ module = extModule;
+ template = function() {
+ (function() {
+ REQUIRE_NS.require(["MODULE"], function() {});
+ })();
+ };
+ }
+
return (text + ";" + template
.toString()
.replace(/MODULE/g, module)
diff --git a/demo/kitchen-sink/docs/smarty.smarty b/demo/kitchen-sink/docs/smarty.smarty
new file mode 100644
index 00000000..77206724
--- /dev/null
+++ b/demo/kitchen-sink/docs/smarty.smarty
@@ -0,0 +1,7 @@
+{foreach $foo as $bar}
+ {$bar.zag}
+ {$bar.zag2}
+ {$bar.zag3}
+{foreachelse}
+ There were no rows found.
+{/foreach}
\ No newline at end of file
diff --git a/lib/ace/anchor.js b/lib/ace/anchor.js
index 3a62e632..0f2e9571 100644
--- a/lib/ace/anchor.js
+++ b/lib/ace/anchor.js
@@ -191,7 +191,7 @@ var Anchor = exports.Anchor = function(doc, row, column) {
this.row = pos.row;
this.column = pos.column;
- this._emit("change", {
+ this._signal("change", {
old: old,
value: pos
});
diff --git a/lib/ace/background_tokenizer.js b/lib/ace/background_tokenizer.js
index 217be1b3..b2ba3733 100644
--- a/lib/ace/background_tokenizer.js
+++ b/lib/ace/background_tokenizer.js
@@ -150,7 +150,7 @@ var BackgroundTokenizer = function(tokenizer, editor) {
first: firstRow,
last: lastRow
};
- this._emit("update", {data: data});
+ this._signal("update", {data: data});
};
/**
diff --git a/lib/ace/document.js b/lib/ace/document.js
index 75a7920d..ce9a6e31 100644
--- a/lib/ace/document.js
+++ b/lib/ace/document.js
@@ -326,7 +326,7 @@ var Document = function(text) {
range: range,
lines: lines
};
- this._emit("change", { data: delta });
+ this._signal("change", { data: delta });
return end || range.end;
};
@@ -356,7 +356,7 @@ var Document = function(text) {
range: Range.fromPoints(position, end),
text: this.getNewLineCharacter()
};
- this._emit("change", { data: delta });
+ this._signal("change", { data: delta });
return end;
};
@@ -390,7 +390,7 @@ var Document = function(text) {
range: Range.fromPoints(position, end),
text: text
};
- this._emit("change", { data: delta });
+ this._signal("change", { data: delta });
return end;
};
@@ -458,7 +458,7 @@ var Document = function(text) {
range: range,
text: removed
};
- this._emit("change", { data: delta });
+ this._signal("change", { data: delta });
return range.start;
};
@@ -485,7 +485,7 @@ var Document = function(text) {
nl: this.getNewLineCharacter(),
lines: removed
};
- this._emit("change", { data: delta });
+ this._signal("change", { data: delta });
return removed;
};
@@ -508,7 +508,7 @@ var Document = function(text) {
range: range,
text: this.getNewLineCharacter()
};
- this._emit("change", { data: delta });
+ this._signal("change", { data: delta });
};
/**
diff --git a/lib/ace/edit_session.js b/lib/ace/edit_session.js
index 5b2eb747..8f772db7 100644
--- a/lib/ace/edit_session.js
+++ b/lib/ace/edit_session.js
@@ -163,7 +163,7 @@ var EditSession = function(text, mode) {
config.resetOptions(this);
this.setMode(mode);
- config._emit("session", this);
+ config._signal("session", this);
};
@@ -269,7 +269,7 @@ var EditSession = function(text, mode) {
}
this.bgTokenizer.$updateOnChange(delta);
- this._emit("change", e);
+ this._signal("change", e);
};
/**
@@ -528,7 +528,7 @@ var EditSession = function(text, mode) {
if (!this.$decorations[row])
this.$decorations[row] = "";
this.$decorations[row] += " " + className;
- this._emit("changeBreakpoint", {});
+ this._signal("changeBreakpoint", {});
};
/**
@@ -540,7 +540,7 @@ var EditSession = function(text, mode) {
**/
this.removeGutterDecoration = function(row, className) {
this.$decorations[row] = (this.$decorations[row] || "").replace(" " + className, "");
- this._emit("changeBreakpoint", {});
+ this._signal("changeBreakpoint", {});
};
/**
@@ -563,7 +563,7 @@ var EditSession = function(text, mode) {
for (var i=0; i=|<|>|===|==|%|&&|\\|\\|)|\\b(?:and|or|eq|neq|ne|gte|gt|ge|lte|lt|le|not|mod)\\b' },
+ { token: 'constant.language.smarty',
+ regex: '\\b(?:TRUE|FALSE|true|false)\\b' },
+ { token: 'keyword.control.smarty',
+ regex: '\\b(?:if|else|elseif|foreach|foreachelse|section|switch|case|break|default)\\b' },
+ { token: 'variable.parameter.smarty', regex: '\\b[a-zA-Z]+=' },
+ { token: 'support.function.built-in.smarty',
+ regex: '\\b(?:capture|config_load|counter|cycle|debug|eval|fetch|include_php|include|insert|literal|math|strip|rdelim|ldelim|assign|constant|block|html_[a-z_]*)\\b' },
+ { token: 'support.function.variable-modifier.smarty',
+ regex: '\\|(?:capitalize|cat|count_characters|count_paragraphs|count_sentences|count_words|date_format|default|escape|indent|lower|nl2br|regex_replace|replace|spacify|string_format|strip_tags|strip|truncate|upper|wordwrap)' } ],
+ '#strings':
+ [ { token: 'punctuation.definition.string.begin.smarty',
+ regex: '\'',
+ push:
+ [ { token: 'punctuation.definition.string.end.smarty',
+ regex: '\'',
+ next: 'pop' },
+ { token: 'constant.character.escape.smarty', regex: '\\\\.' },
+ { defaultToken: 'string.quoted.single.smarty' } ] },
+ { token: 'punctuation.definition.string.begin.smarty',
+ regex: '"',
+ push:
+ [ { token: 'punctuation.definition.string.end.smarty',
+ regex: '"',
+ next: 'pop' },
+ { token: 'constant.character.escape.smarty', regex: '\\\\.' },
+ { defaultToken: 'string.quoted.double.smarty' } ] } ],
+ '#variables':
+ [ { token:
+ [ 'punctuation.definition.variable.smarty',
+ 'variable.other.global.smarty' ],
+ regex: '\\b(\\$)(Smarty\\.)' },
+ { token:
+ [ 'punctuation.definition.variable.smarty',
+ 'variable.other.smarty' ],
+ regex: '(\\$)([a-zA-Z_][a-zA-Z0-9_]*)\\b' },
+ { token: [ 'keyword.operator.smarty', 'variable.other.property.smarty' ],
+ regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)\\b' },
+ { token:
+ [ 'keyword.operator.smarty',
+ 'meta.function-call.object.smarty',
+ 'punctuation.definition.variable.smarty',
+ 'variable.other.smarty',
+ 'punctuation.definition.variable.smarty' ],
+ regex: '(->)([a-zA-Z_][a-zA-Z0-9_]*)(\\()(.*?)(\\))' } ] }
+
+ var smartyStart = smartyRules.start;
+
+ ["start", "qqstring_inner", "qstring_inner", "attributes", "cdata"].forEach(function(x) {
+ this.$rules[x].unshift.apply(this.$rules[x], smartyStart);
+ }, this);
+
+ Object.keys(smartyRules).forEach(function(x) {
+ if (!this.$rules[x])
+ this.$rules[x] = smartyRules[x];
+ }, this);
+
+ this.normalizeRules();
+};
+
+SmartyHighlightRules.metaData = { fileTypes: [ 'tpl' ],
+ foldingStartMarker: '\\{%?',
+ foldingStopMarker: '%?\\}',
+ name: 'Smarty',
+ scopeName: 'text.html.smarty' }
+
+
+oop.inherits(SmartyHighlightRules, HtmlHighlightRules);
+
+exports.SmartyHighlightRules = SmartyHighlightRules;
+});
\ No newline at end of file
diff --git a/lib/ace/mode/sql_highlight_rules.js b/lib/ace/mode/sql_highlight_rules.js
index e16ac9ab..df04786c 100644
--- a/lib/ace/mode/sql_highlight_rules.js
+++ b/lib/ace/mode/sql_highlight_rules.js
@@ -59,6 +59,10 @@ var SqlHighlightRules = function() {
"start" : [ {
token : "comment",
regex : "--.*$"
+ }, {
+ token : "comment",
+ start : "/\\*",
+ end : "\\*/"
}, {
token : "string", // " string
regex : '".*?"'
@@ -85,6 +89,7 @@ var SqlHighlightRules = function() {
regex : "\\s+"
} ]
};
+ this.normalizeRules();
};
oop.inherits(SqlHighlightRules, TextHighlightRules);
diff --git a/lib/ace/mode/text_highlight_rules.js b/lib/ace/mode/text_highlight_rules.js
index 416e8182..c4fcf588 100644
--- a/lib/ace/mode/text_highlight_rules.js
+++ b/lib/ace/mode/text_highlight_rules.js
@@ -80,7 +80,9 @@ var TextHighlightRules = function() {
};
this.embedRules = function (HighlightRules, prefix, escapeRules, states, append) {
- var embedRules = new HighlightRules().getRules();
+ var embedRules = typeof HighlightRules == "function"
+ ? new HighlightRules().getRules()
+ : HighlightRules;
if (states) {
for (var i = 0; i < states.length; i++)
states[i] = prefix + states[i];
diff --git a/lib/ace/multi_select.js b/lib/ace/multi_select.js
index 051d7c8f..d2b3c474 100644
--- a/lib/ace/multi_select.js
+++ b/lib/ace/multi_select.js
@@ -100,7 +100,7 @@ var EditSession = require("./edit_session").EditSession;
this.$onRemoveRange(removed);
if (this.rangeCount > 1 && !this.inMultiSelectMode) {
- this._emit("multiSelect");
+ this._signal("multiSelect");
this.inMultiSelectMode = true;
this.session.$undoSelect = false;
this.rangeList.attach(this.session);
@@ -150,7 +150,7 @@ var EditSession = require("./edit_session").EditSession;
this.$onAddRange = function(range) {
this.rangeCount = this.rangeList.ranges.length;
this.ranges.unshift(range);
- this._emit("addRange", {range: range});
+ this._signal("addRange", {range: range});
};
this.$onRemoveRange = function(removed) {
@@ -166,11 +166,11 @@ var EditSession = require("./edit_session").EditSession;
this.ranges.splice(index, 1);
}
- this._emit("removeRange", {ranges: removed});
+ this._signal("removeRange", {ranges: removed});
if (this.rangeCount == 0 && this.inMultiSelectMode) {
this.inMultiSelectMode = false;
- this._emit("singleSelect");
+ this._signal("singleSelect");
this.session.$undoSelect = true;
this.rangeList.detach(this.session);
}
diff --git a/lib/ace/snippets.js b/lib/ace/snippets.js
index ee1a5498..f382f7ba 100644
--- a/lib/ace/snippets.js
+++ b/lib/ace/snippets.js
@@ -169,7 +169,7 @@ var SnippetManager = function() {
// defult but can't fill :(
case "FILENAME":
case "FILEPATH":
- return "ace.ajax.org";
+ return "";
case "FULLNAME":
return "Ace";
}
@@ -329,8 +329,11 @@ var SnippetManager = function() {
continue;
var id = p.tabstopId;
var i1 = tokens.indexOf(p, i + 1);
- if (expanding[id] == p) {
- expanding[id] = null;
+ if (expanding[id]) {
+ // if reached closing bracket clear expanding state
+ if (expanding[id] === p)
+ expanding[id] = null;
+ // otherwise just ignore recursive tabstop
continue;
}
diff --git a/lib/ace/snippets/python.snippets b/lib/ace/snippets/python.snippets
index dd2e8123..347bbdeb 100644
--- a/lib/ace/snippets/python.snippets
+++ b/lib/ace/snippets/python.snippets
@@ -7,8 +7,8 @@ snippet from
# Module Docstring
snippet docs
'''
- File: ${1:`Filename('$1.py', 'foo.py')`}
- Author: ${2:`g:snips_author`}
+ File: ${1:FILENAME:file_name}
+ Author: ${2:author}
Description: ${3}
'''
snippet wh
@@ -129,7 +129,7 @@ snippet "
"""
# test function/method
snippet test
- def test_${1:description}(${2:`indent('.') ? 'self' : ''`}):
+ def test_${1:description}(${2:self}):
${3:# TODO: write code...}
# test case
snippet testcase
diff --git a/lib/ace/worker/worker.js b/lib/ace/worker/worker.js
index b1b83ba9..2646ed17 100644
--- a/lib/ace/worker/worker.js
+++ b/lib/ace/worker/worker.js
@@ -176,7 +176,7 @@ window.onmessage = function(e) {
main = new clazz(sender);
}
else if (msg.event && sender) {
- sender._emit(msg.event, msg.data);
+ sender._signal(msg.event, msg.data);
}
};
})(this);
\ No newline at end of file
diff --git a/lib/ace/worker/worker_client.js b/lib/ace/worker/worker_client.js
index 743bd0ed..cb18998f 100644
--- a/lib/ace/worker/worker_client.js
+++ b/lib/ace/worker/worker_client.js
@@ -96,7 +96,7 @@ var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {
break;
case "event":
- this._emit(msg.name, {data: msg.data});
+ this._signal(msg.name, {data: msg.data});
break;
case "call":
@@ -121,7 +121,7 @@ var WorkerClient = function(topLevelNamespaces, mod, classname, workerUrl) {
};
this.terminate = function() {
- this._emit("terminate", {});
+ this._signal("terminate", {});
this.deltaQueue = null;
this.$worker.terminate();
this.$worker = null;
@@ -217,7 +217,7 @@ var UIWorkerClient = function(topLevelNamespaces, mod, classname) {
if (msg.command)
main[msg.command].apply(main, msg.args);
else if (msg.event)
- sender._emit(msg.event, msg.data);
+ sender._signal(msg.event, msg.data);
};
sender.postMessage = function(msg) {