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) {