From c356c14940f949af7fee2a13c049f4ad6549948e Mon Sep 17 00:00:00 2001 From: nightwing Date: Mon, 19 Jan 2015 00:33:14 +0400 Subject: [PATCH] fix weird pairing of quotes in cstyle behavior --- lib/ace/mode/behaviour/behaviour_test.js | 18 ++++++++++++++++-- lib/ace/mode/behaviour/cstyle.js | 4 ++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/lib/ace/mode/behaviour/behaviour_test.js b/lib/ace/mode/behaviour/behaviour_test.js index ba0a5041..ea2d6232 100644 --- a/lib/ace/mode/behaviour/behaviour_test.js +++ b/lib/ace/mode/behaviour/behaviour_test.js @@ -30,6 +30,7 @@ if (typeof process !== "undefined") { require("amd-loader"); + require("../../test/mockdom"); } define(function(require, exports, module) { @@ -117,9 +118,9 @@ module.exports = { editor.setValue(""); exec("insertstring", 1, "{"); - assert.equal(editor.getValue(), "{") + assert.equal(editor.getValue(), "{"); exec("insertstring", 1, "\n"); - assert.equal(editor.getValue(), "{\n \n}") + assert.equal(editor.getValue(), "{\n \n}"); editor.setValue(""); exec("insertstring", 1, "("); @@ -129,6 +130,19 @@ module.exports = { exec("backspace", 1); exec("insertstring", 1, '"'); assert.equal(editor.getValue(), '("")'); + + editor.setValue("('foo')", 1); + exec("gotoleft", 1); + exec("selectleft", 1); + exec("selectMoreBefore", 1); + exec("insertstring", 1, "'"); + assert.equal(editor.getValue(), "('foo')"); + exec("selectleft", 1); + exec("insertstring", 1, '"'); + assert.equal(editor.getValue(), '("foo")'); + exec("selectleft", 1); + exec("insertstring", 1, '"'); + assert.equal(editor.getValue(), '("foo")'); } }; diff --git a/lib/ace/mode/behaviour/cstyle.js b/lib/ace/mode/behaviour/cstyle.js index 5abf08fd..c67f1130 100644 --- a/lib/ace/mode/behaviour/cstyle.js +++ b/lib/ace/mode/behaviour/cstyle.js @@ -256,7 +256,7 @@ var CstyleBehaviour = function() { text: quote + selected + quote, selection: false }; - } else { + } else if (!selected) { var cursor = editor.getCursorPosition(); var line = session.doc.getLine(cursor.row); var leftChar = line.substring(cursor.column-1, cursor.column); @@ -278,7 +278,7 @@ var CstyleBehaviour = function() { if (stringBefore && !stringAfter) return null; // wrap string with different quote if (stringBefore && stringAfter) - return null; // do not pair quotes inside strings + return null; // do not pair quotes inside strings var wordRe = session.$mode.tokenRe; wordRe.lastIndex = 0; var isWordBefore = wordRe.test(leftChar);