Merge remote-tracking branch 'remotes/origin/mode_issues'

This commit is contained in:
nightwing 2014-11-08 16:25:19 +04:00
commit c4e937939a
13 changed files with 654 additions and 57 deletions

View file

@ -3,6 +3,6 @@
<div id="comments">
{{#each comments}}
<h2><a href="/posts/{{../permalink}}#{{id}}">{{title}}</a></h2>
<div>{{body}}</div>
<div>{{{body}}}</div>
{{/each}}
</div>

View file

@ -342,29 +342,29 @@ var keymap = {
var editorProxy = new AceEmmetEditor();
exports.commands = new HashHandler();
exports.runEmmetCommand = function(editor) {
editorProxy.setupContext(editor);
if (editorProxy.getSyntax() == "php")
return false;
var actions = emmet.require("actions");
if (this.action == "expand_abbreviation_with_tab") {
if (!editor.selection.isEmpty())
return false;
}
if (this.action == "wrap_with_abbreviation") {
// without setTimeout prompt doesn't work on firefox
return setTimeout(function() {
actions.run("wrap_with_abbreviation", editorProxy);
}, 0);
}
var pos = editor.selection.lead;
var token = editor.session.getTokenAt(pos.row, pos.column);
if (token && /\btag\b/.test(token.type))
return false;
try {
editorProxy.setupContext(editor);
if (editorProxy.getSyntax() == "php")
return false;
var actions = emmet.require("actions");
if (this.action == "expand_abbreviation_with_tab") {
if (!editor.selection.isEmpty())
return false;
}
if (this.action == "wrap_with_abbreviation") {
// without setTimeout prompt doesn't work on firefox
return setTimeout(function() {
actions.run("wrap_with_abbreviation", editorProxy);
}, 0);
}
var pos = editor.selection.lead;
var token = editor.session.getTokenAt(pos.row, pos.column);
if (token && /\btag\b/.test(token.type))
return false;
var result = actions.run(this.action, editorProxy);
} catch(e) {
editor._signal("changeStatus", typeof e == "string" ? e : e.message);
@ -393,7 +393,7 @@ exports.updateCommands = function(editor, enabled) {
};
exports.isSupportedMode = function(modeId) {
return modeId && /css|less|scss|sass|stylus|html|php|twig/.test(modeId);
return modeId && /css|less|scss|sass|stylus|html|php|twig|ejs/.test(modeId);
};
var onChangeMode = function(e, target) {
@ -406,9 +406,8 @@ var onChangeMode = function(e, target) {
if (enabled) {
if (typeof emmetPath == "string") {
require("ace/config").loadModule(emmetPath, function() {
emmetPath = null;
});
emmetPath = null;
}
}
exports.updateCommands(editor, enabled);

View file

@ -0,0 +1,267 @@
[[
"start",
["comment.line.double-dash","-- https://github.com/Cirru/cirru-gopher/blob/master/code/scope.cr,"]
],[
"start"
],[
"line",
["support.function","set"],
["text"," "],
["variable.parameter","a"],
["text"," "],
["storage.modifier","("],
["support.function","int"],
["text"," "],
["constant.numeric","2"],
["storage.modifier",")"]
],[
"start"
],[
"line",
["support.function","print"],
["text"," "],
["storage.modifier","("],
["support.function","self"],
["storage.modifier",")"]
],[
"start"
],[
"line",
["support.function","set"],
["text"," "],
["variable.parameter","c"],
["text"," "],
["storage.modifier","("],
["support.function","child"],
["storage.modifier",")"]
],[
"start"
],[
"line",
["support.function","under"],
["text"," "],
["variable.parameter","c"]
],[
"line",
["markup.raw"," "],
["support.function","under"],
["text"," "],
["variable.parameter","parent"]
],[
"line",
["markup.raw"," "],
["support.function","print"],
["text"," "],
["variable.parameter","a"]
],[
"start"
],[
"line",
["support.function","print"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","get"],
["text"," "],
["variable.parameter","c"],
["text"," "],
["variable.parameter","a"]
],[
"start"
],[
"line",
["support.function","set"],
["text"," "],
["variable.parameter","c"],
["text"," "],
["variable.parameter","x"],
["text"," "],
["storage.modifier","("],
["support.function","int"],
["text"," "],
["constant.numeric","3"],
["storage.modifier",")"]
],[
"line",
["support.function","print"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","get"],
["text"," "],
["variable.parameter","c"],
["text"," "],
["variable.parameter","x"]
],[
"start"
],[
"line",
["support.function","set"],
["text"," "],
["variable.parameter","just-print"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","code"]
],[
"line",
["markup.raw"," "],
["support.function","print"],
["text"," "],
["variable.parameter","a"]
],[
"start"
],[
"line",
["support.function","print"],
["text"," "],
["variable.parameter","just-print"]
],[
"start"
],[
"line",
["support.function","eval"],
["text"," "],
["storage.modifier","("],
["support.function","self"],
["storage.modifier",")"],
["text"," "],
["variable.parameter","just-print"]
],[
"line",
["support.function","eval"],
["text"," "],
["variable.parameter","just-print"]
],[
"start"
],[
"line",
["support.function","print"],
["text"," "],
["storage.modifier","("],
["support.function","string"],
["text"," "],
["string.quoted.double","\"string with space\""],
["storage.modifier",")"]
],[
"line",
["support.function","print"],
["text"," "],
["storage.modifier","("],
["support.function","string"],
["text"," "],
["string.quoted.double","\"escapes "],
["constant.character.escape","\\n"],
["string.quoted.double"," "],
["constant.character.escape","\\\"\\\\"],
["string.quoted.double","\""],
["storage.modifier",")"]
],[
"start"
],[
"start",
["support.function","brackets"],
["text"," "],
["storage.modifier","((((()))))"]
],[
"start"
],[
"line",
["string.quoted.double","\"eval\""],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","string"],
["text"," "],
["string.quoted.double","\"eval\""]
],[
"start"
],[
"line",
["support.function","print"],
["text"," "],
["storage.modifier","("],
["support.function","add"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["storage.modifier","("],
["support.function","int"],
["text"," "],
["constant.numeric","1"],
["storage.modifier",")"],
["text"," "],
["storage.modifier","("],
["support.function","int"],
["text"," "],
["constant.numeric","2"],
["storage.modifier","))"]
],[
"start"
],[
"start",
["support.function","print"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","unwrap"],
["text"," "],
["storage.modifier","$"]
],[
"line",
["text"," "],
["support.function","map"],
["text"," "],
["storage.modifier","("],
["support.function","a"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","int"],
["text"," "],
["constant.numeric","1"],
["storage.modifier",")"],
["text"," "],
["storage.modifier","("],
["support.function","b"],
["text"," "],
["storage.modifier","$"],
["text"," "],
["support.function","int"],
["text"," "],
["constant.numeric","2"],
["storage.modifier",")"]
],[
"start"
],[
"line",
["support.function","print"],
["text"," "],
["variable.parameter","a"]
],[
"line",
["markup.raw"," "],
["support.function","int"],
["text"," "],
["constant.numeric","1"]
],[
"line",
["markup.raw"," "],
["storage.modifier",","],
["text"," "],
["variable.parameter","b"],
["text"," "],
["variable.parameter","c"]
],[
"line",
["markup.raw"," "],
["support.function","int"],
["text"," "],
["constant.numeric","2"]
],[
"line",
["markup.raw"," "],
["storage.modifier",","],
["text"," "],
["variable.parameter","d"]
]]

View file

@ -0,0 +1,196 @@
[[
"start",
["keyword.control.module.elixir","defmodule"],
["meta.module.elixir"," "],
["entity.name.type.module.elixir","HelloModule"],
["text"," "],
["keyword.control.elixir","do"]
],[
"comment.documentation.heredoc",
["text"," "],
["comment.documentation.heredoc","@moduledoc \"\"\""]
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," This is supposed to be `markdown`."]
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," __Yes__ this is [mark](http://down.format)"]
],[
"comment.documentation.heredoc"
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," # Truly"]
],[
"comment.documentation.heredoc"
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," ## marked"]
],[
"comment.documentation.heredoc"
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," * with lists"]
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," * more"]
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," * and more"]
],[
"comment.documentation.heredoc"
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," Even.with(code)"]
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," blocks |> with |> samples"]
],[
"comment.documentation.heredoc"
],[
"comment.documentation.heredoc",
["comment.documentation.heredoc"," _Docs are first class citizens in Elixir_ (Jose Valim)"]
],[
"start",
["comment.documentation.heredoc"," \"\"\""]
],[
"start",
["text"," "]
],[
"start",
["text"," "],
["punctuation.definition.comment.elixir","#"],
["comment.line.number-sign.elixir"," A \"Hello world\" function"]
],[
"start",
["text"," "],
["keyword.control.elixir","def"],
["text"," some_fun "],
["keyword.control.elixir","do"]
],[
"start",
["text"," "],
["variable.other.constant.elixir","IO"],
["punctuation.separator.method.elixir","."],
["text","puts "],
["punctuation.definition.string.begin.elixir","\""],
["string.quoted.double.elixir","Juhu Kinners!"],
["punctuation.definition.string.end.elixir","\""]
],[
"start",
["text"," "],
["keyword.control.elixir","end"]
],[
"start",
["text"," "],
["punctuation.definition.comment.elixir","#"],
["comment.line.number-sign.elixir"," A private function"]
],[
"start",
["text"," "],
["keyword.control.elixir","defp"],
["text"," priv "],
["keyword.control.elixir","do"]
],[
"punctuation.definition.string.begin.elixir7",
["text"," is_regex "],
["punctuation.definition.string.begin.elixir","~r\"\"\""]
],[
"punctuation.definition.string.begin.elixir7",
["string.quoted.double.heredoc.elixir"," This is a regex"]
],[
"punctuation.definition.string.begin.elixir7",
["string.quoted.double.heredoc.elixir"," spanning several"]
],[
"punctuation.definition.string.begin.elixir7",
["string.quoted.double.heredoc.elixir"," lines."]
],[
"start",
["punctuation.definition.string.end.elixir"," \"\"\""]
],[
"start",
["text"," x "],
["keyword.operator.assignment.elixir","="],
["text"," elem"],
["punctuation.section.function.elixir","("],
["punctuation.section.scope.elixir","{"],
["text"," "],
["punctuation.definition.constant.elixir",":"],
["constant.other.symbol.elixir","a"],
["punctuation.separator.object.elixir",","],
["text"," "],
["punctuation.definition.constant.elixir",":"],
["constant.other.symbol.elixir","b"],
["punctuation.separator.object.elixir",","],
["text"," "],
["punctuation.definition.constant.elixir",":"],
["constant.other.symbol.elixir","c"],
["text"," "],
["punctuation.section.scope.elixir","}"],
["punctuation.separator.object.elixir",","],
["text"," "],
["constant.numeric.elixir","0"],
["punctuation.section.function.elixir",")"],
["text"," "],
["punctuation.definition.comment.elixir","#"],
["comment.line.number-sign.elixir","=> :a"]
],[
"start",
["text"," "],
["keyword.control.elixir","end"]
],[
"start",
["keyword.control.elixir","end"]
],[
"start"
],[
"start",
["text","test_fun "],
["keyword.operator.assignment.elixir","="],
["text"," "],
["keyword.control.elixir","fn"],
["punctuation.section.function.elixir","("],
["text","x"],
["punctuation.section.function.elixir",")"],
["text"," "],
["keyword.operator.arithmetic.elixir","-"],
["keyword.operator.comparison.elixir",">"]
],[
"start",
["text"," "],
["keyword.control.elixir","cond"],
["text"," "],
["keyword.control.elixir","do"]
],[
"start",
["text"," x "],
["keyword.operator.comparison.elixir",">"],
["text"," "],
["constant.numeric.elixir","10"],
["text"," "],
["keyword.operator.arithmetic.elixir","-"],
["keyword.operator.comparison.elixir",">"]
],[
"start",
["text"," "],
["punctuation.definition.constant.elixir",":"],
["constant.other.symbol.elixir","greater_than_ten"]
],[
"start",
["text"," "],
["constant.language.elixir","true"],
["text"," "],
["keyword.operator.arithmetic.elixir","-"],
["keyword.operator.comparison.elixir",">"]
],[
"start",
["text"," "],
["punctuation.definition.constant.elixir",":"],
["constant.other.symbol.elixir","maybe_ten"]
],[
"start",
["text"," "],
["keyword.control.elixir","end"]
],[
"start",
["keyword.control.elixir","end"]
]]

View file

@ -59,9 +59,9 @@
["meta.tag.punctuation.tag-open.xml","<"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"],
["storage.type.start","{{"],
["support.function","{{{"],
["variable.parameter","body"],
["storage.type.end","}}"],
["support.function","}}}"],
["meta.tag.punctuation.end-tag-open.xml","</"],
["meta.tag.tag-name.xml","div"],
["meta.tag.punctuation.tag-close.xml",">"]

View file

@ -0,0 +1,133 @@
/* ***** BEGIN LICENSE BLOCK *****
* Distributed under the BSD license:
*
* Copyright (c) 2010, Ajax.org B.V.
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
* * Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* * Neither the name of Ajax.org B.V. nor the
* names of its contributors may be used to endorse or promote products
* derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* ***** END LICENSE BLOCK ***** */
if (typeof process !== "undefined") {
require("amd-loader");
}
define(function(require, exports, module) {
"use strict";
require("../../multi_select");
var assert = require("../../test/assertions");
var Range = require("../../range").Range;
var Editor = require("../../editor").Editor;
var EditSession = require("../../edit_session").EditSession;
var MockRenderer = require("../../test/mockrenderer").MockRenderer;
var JavaScriptMode = require("../javascript").Mode;
var editor;
var exec = function(name, times, args) {
do {
editor.commands.exec(name, editor, args);
} while(times --> 1);
};
var testRanges = function(str) {
assert.equal(editor.selection.getAllRanges() + "", str + "");
};
module.exports = {
name: "ACE multi_select.js",
"test: cstyle": function() {
function testValue(line) {
assert.equal(editor.getValue(), Array(4).join(line + "\n"));
}
function testSelection(line, col, inc) {
editor.selection.rangeList.ranges.forEach(function(r) {
assert.range(r, line, col, line, col);
line += (inc || 1);
});
}
var doc = new EditSession([
"",
"",
"",
""
], new JavaScriptMode());
editor = new Editor(new MockRenderer(), doc);
editor.setOption("behavioursEnabled", true);
editor.navigateFileStart();
exec("addCursorBelow", 2);
exec("insertstring", 1, "if ");
// pairing (
exec("insertstring", 1, "(");
testValue("if ()");
testSelection(0, 4);
exec("insertstring", 1, ")");
testValue("if ()");
testSelection(0, 5);
// pairing [
exec("gotoleft", 1);
exec("insertstring", 1, "[");
testValue("if ([])");
testSelection(0, 5);
exec("insertstring", 1, "]");
testValue("if ([])");
testSelection(0, 6);
// test deletion
exec("gotoleft", 1);
exec("backspace", 1);
testValue("if ()");
testSelection(0, 4);
exec("gotolineend", 1);
exec("insertstring", 1, "{");
testValue("if (){}");
testSelection(0, 6);
exec("insertstring", 1, "}");
testValue("if (){}");
testSelection(0, 7);
exec("gotolinestart", 1);
exec("insertstring", 1, "(");
testValue("(if (){}");
exec("backspace", 1);
editor.setValue("");
exec("insertstring", 1, "{");
assert.equal(editor.getValue(), "{")
exec("insertstring", 1, "\n");
assert.equal(editor.getValue(), "{\n \n}")
}
};
});
if (typeof module !== "undefined" && module === require.main) {
require("asyncjs").test.testcase(module.exports).exec();
}

View file

@ -42,11 +42,11 @@ var SAFE_INSERT_BEFORE_TOKENS =
["text", "paren.rparen", "punctuation.operator", "comment"];
var context;
var contextCache = {}
var contextCache = {};
var initContext = function(editor) {
var id = -1;
if (editor.multiSelect) {
id = editor.selection.id;
id = editor.selection.index;
if (contextCache.rangeCount != editor.multiSelect.rangeCount)
contextCache = {rangeCount: editor.multiSelect.rangeCount};
}

View file

@ -21,7 +21,7 @@ var Mode = function() {
oop.inherits(Mode, HtmlMode);
(function() {
this.blockComment = {start: "{!--", end: "--}"};
this.$id = "ace/mode/handlebars";
}).call(Mode.prototype);

View file

@ -15,7 +15,7 @@ var HandlebarsHighlightRules = function() {
var hbs = {
regex : "(?={{)",
push : "handlebars"
}
};
for (var key in this.$rules) {
this.$rules[key].unshift(hbs);
}
@ -40,22 +40,22 @@ var HandlebarsHighlightRules = function() {
defaultToken : "comment"
}]
}, {
token : "storage.type.start", // begin section
regex : "{{[#\\^/&]?",
token : "support.function", // unescaped variable
regex : "{{{",
push : [{
token : "storage.type.end",
regex : "}}",
token : "support.function",
regex : "}}}",
next : pop2
}, {
token : "variable.parameter",
regex : "[a-zA-Z_$][a-zA-Z0-9_$]*"
}]
}, {
token : "support.function", // unescaped variable
regex : "{{{",
token : "storage.type.start", // begin section
regex : "{{[#\\^/&]?",
push : [{
token : "support.function",
regex : "}}}",
token : "storage.type.end",
regex : "}}",
next : pop2
}, {
token : "variable.parameter",

View file

@ -35,22 +35,22 @@ if (typeof process !== "undefined") {
define(function(require, exports, module) {
"use strict";
var EditSession = require("./edit_session").EditSession;
var Editor = require("./editor").Editor;
var MockRenderer = require("./test/mockrenderer").MockRenderer;
var Range = require("./range").Range;
require("./multi_select");
var assert = require("./test/assertions");
var MultiSelect = require("./multi_select").MultiSelect;
var Range = require("./range").Range;
var Editor = require("./editor").Editor;
var EditSession = require("./edit_session").EditSession;
var MockRenderer = require("./test/mockrenderer").MockRenderer;
var editor;
var exec = function(name, times, args) {
do {
editor.commands.exec(name, editor, args);
} while(times --> 1)
} while(times --> 1);
};
var testRanges = function(str) {
assert.equal(editor.selection.getAllRanges() + "", str + "");
}
};
module.exports = {
@ -63,7 +63,6 @@ module.exports = {
" wtt.w"
]);
editor = new Editor(new MockRenderer(), doc);
MultiSelect(editor);
editor.navigateFileEnd();
exec("selectMoreBefore", 3);
@ -90,7 +89,6 @@ module.exports = {
" wtt.we"
]);
editor = new Editor(new MockRenderer(), doc);
MultiSelect(editor);
editor.selectMoreLines(1);
testRanges("Range: [0/0] -> [0/0],Range: [1/0] -> [1/0]");
@ -113,9 +111,8 @@ module.exports = {
" wtt.w"
]);
editor = new Editor(new MockRenderer(), doc);
MultiSelect(editor);
editor.selectMoreLines(1)
editor.selectMoreLines(1);
testRanges("Range: [0/0] -> [0/0],Range: [1/0] -> [1/0]");
assert.ok(editor.inMultiSelectMode);
@ -134,7 +131,6 @@ module.exports = {
" wtt.w"
]);
editor = new Editor(new MockRenderer(), doc);
MultiSelect(editor);
var selection = editor.selection;
var range1 = new Range(0, 2, 0, 4);
@ -158,7 +154,6 @@ module.exports = {
"test: onPaste in command with multiselect": function() {
var doc = new EditSession(["l1", "l2"]);
editor = new Editor(new MockRenderer(), doc);
MultiSelect(editor);
editor.commands.addCommand({
name: 'insertfoo',
exec: function(ed) { ed.onPaste('foo'); },
@ -167,7 +162,7 @@ module.exports = {
var selection = editor.selection;
var range1 = new Range(0,2,0,2);
var range2 = new Range(1,2,1,2);
selection.fromOrientedRange(range1)
selection.fromOrientedRange(range1);
selection.addRange(range2);
editor.execCommand('insertfoo');
assert.equal('l1foo\nl2foo', editor.getValue());
@ -176,14 +171,13 @@ module.exports = {
"test multiselect fromJSON/toJSON": function() {
var doc = new EditSession(["l1", "l2"]);
editor = new Editor(new MockRenderer(), doc);
MultiSelect(editor);
var selection = editor.selection;
var before = selection.toJSON();
var range1 = new Range(0,2,0,2);
var range2 = new Range(1,2,1,2);
selection.fromOrientedRange(range1)
selection.fromOrientedRange(range1);
selection.addRange(range2);
var after = selection.toJSON();
@ -201,5 +195,5 @@ module.exports = {
});
if (typeof module !== "undefined" && module === require.main) {
require("asyncjs").test.testcase(module.exports).exec()
require("asyncjs").test.testcase(module.exports).exec();
}

View file

@ -0,0 +1,7 @@
define(function(require, exports, module) {
"use strict";
exports.snippetText = require("../requirejs/text!./.snippets");
exports.scope = "";
});

View file

View file

@ -43,6 +43,7 @@ var testNames = [
"ace/mode/folding/pythonic_test",
"ace/mode/folding/xml_test",
"ace/mode/folding/coffee_test",
"ace/mode/behaviour/behaviour_test",
"ace/multi_select_test",
"ace/mouse/mouse_handler_test",
"ace/occur_test",