minor fixes

This commit is contained in:
nightwing 2014-07-22 03:20:43 +04:00
commit 9b489c752b
9 changed files with 88 additions and 69 deletions

View file

@ -950,6 +950,9 @@ var EditSession = function(text, mode) {
if (!$isPlaceholder) { if (!$isPlaceholder) {
// experimental method, used by c9 findiniles
if (mode.attachToSession)
mode.attachToSession(this);
this.$options.wrapMethod.set.call(this, this.$wrapMethod); this.$options.wrapMethod.set.call(this, this.$wrapMethod);
this.$setFolding(mode.foldingRules); this.$setFolding(mode.foldingRules);
this.bgTokenizer.start(0); this.bgTokenizer.start(0);
@ -1731,9 +1734,10 @@ var EditSession = function(text, mode) {
// Inside of the foldLine range. Need to split stuff up. // Inside of the foldLine range. Need to split stuff up.
if (cmp == 0) { if (cmp == 0) {
foldLine = foldLine.split(start.row, start.column); foldLine = foldLine.split(start.row, start.column);
if (foldLine) {
foldLine.shiftRow(len); foldLine.shiftRow(len);
foldLine.addRemoveChars( foldLine.addRemoveChars(lastRow, 0, end.column - start.column);
lastRow, 0, end.column - start.column); }
} else } else
// Infront of the foldLine but same row. Need to shift column. // Infront of the foldLine but same row. Need to shift column.
if (cmp == -1) { if (cmp == -1) {

View file

@ -525,25 +525,23 @@ var Editor = function(renderer, session) {
this.$highlightPending = true; this.$highlightPending = true;
setTimeout(function() { setTimeout(function() {
self.$highlightPending = false; self.$highlightPending = false;
var session = self.session;
var pos = self.session.findMatchingBracket(self.getCursorPosition()); if (!session || !session.bgTokenizer) return;
var pos = session.findMatchingBracket(self.getCursorPosition());
if (pos) { if (pos) {
var range = new Range(pos.row, pos.column, pos.row, pos.column+1); var range = new Range(pos.row, pos.column, pos.row, pos.column + 1);
} else if (self.session.$mode.getMatching) { } else if (session.$mode.getMatching) {
var range = self.session.$mode.getMatching(self.session); var range = session.$mode.getMatching(self.session);
} }
if (range) if (range)
self.session.$bracketHighlight = self.session.addMarker(range, "ace_bracket", "text"); session.$bracketHighlight = session.addMarker(range, "ace_bracket", "text");
}, 50); }, 50);
}; };
// todo: move to mode.getMatching // todo: move to mode.getMatching
this.$highlightTags = function() { this.$highlightTags = function() {
var session = this.session; if (this.$highlightTagPending)
if (this.$highlightTagPending) {
return; return;
}
// perform highlight async to not block the browser during navigation // perform highlight async to not block the browser during navigation
var self = this; var self = this;
@ -551,6 +549,9 @@ var Editor = function(renderer, session) {
setTimeout(function() { setTimeout(function() {
self.$highlightTagPending = false; self.$highlightTagPending = false;
var session = self.session;
if (!session || !session.bgTokenizer) return;
var pos = self.getCursorPosition(); var pos = self.getCursorPosition();
var iterator = new TokenIterator(self.session, pos.row, pos.column); var iterator = new TokenIterator(self.session, pos.row, pos.column);
var token = iterator.getCurrentToken(); var token = iterator.getCurrentToken();
@ -2005,17 +2006,13 @@ var Editor = function(renderer, session) {
* Moves the cursor's row and column to the next matching bracket or HTML tag. * Moves the cursor's row and column to the next matching bracket or HTML tag.
* *
**/ **/
this.jumpToMatching = function(select) { this.jumpToMatching = function(select, expand) {
var cursor = this.getCursorPosition(); var cursor = this.getCursorPosition();
var iterator = new TokenIterator(this.session, cursor.row, cursor.column); var iterator = new TokenIterator(this.session, cursor.row, cursor.column);
var prevToken = iterator.getCurrentToken(); var prevToken = iterator.getCurrentToken();
var token = prevToken; var token = prevToken || iterator.stepForward();
if (!token) if (!token) return;
token = iterator.stepForward();
if (!token)
return;
//get next closing tag or bracket //get next closing tag or bracket
var matchType; var matchType;
@ -2034,12 +2031,12 @@ var Editor = function(renderer, session) {
do { do {
if (token.value.match(/[{}()\[\]]/g)) { if (token.value.match(/[{}()\[\]]/g)) {
for (; i<token.value.length && !found; i++) { for (; i < token.value.length && !found; i++) {
if (!brackets[token.value[i]]) { if (!brackets[token.value[i]]) {
continue; continue;
} }
bracketType = brackets[token.value[i]]+'.'+token.type.replace("rparen", "lparen"); bracketType = brackets[token.value[i]] + '.' + token.type.replace("rparen", "lparen");
if (isNaN(depth[bracketType])) { if (isNaN(depth[bracketType])) {
depth[bracketType] = 0; depth[bracketType] = 0;
@ -2056,21 +2053,23 @@ var Editor = function(renderer, session) {
case '}': case '}':
depth[bracketType]--; depth[bracketType]--;
if (depth[bracketType]===-1) { if (depth[bracketType] === -1) {
matchType = 'bracket'; matchType = 'bracket';
found = true; found = true;
} }
break; break;
} }
} }
} else if (token && token.type.indexOf('tag-name') !== -1) { }
else if (token && token.type.indexOf('tag-name') !== -1) {
if (isNaN(depth[token.value])) { if (isNaN(depth[token.value])) {
depth[token.value] = 0; depth[token.value] = 0;
} }
if (prevToken.value === '<') { if (prevToken.value === '<') {
depth[token.value]++; depth[token.value]++;
} else if (prevToken.value === '</') { }
else if (prevToken.value === '</') {
depth[token.value]--; depth[token.value]--;
} }
@ -2088,37 +2087,35 @@ var Editor = function(renderer, session) {
} while (token && !found); } while (token && !found);
//no match found //no match found
if (!matchType) { if (!matchType)
return; return;
}
var range; var range, pos;
if (matchType==='bracket') { if (matchType === 'bracket') {
range = this.session.getBracketRange(cursor); range = this.session.getBracketRange(cursor);
if (!range) { if (!range) {
range = new Range( range = new Range(
iterator.getCurrentTokenRow(), iterator.getCurrentTokenRow(),
iterator.getCurrentTokenColumn()+i-1, iterator.getCurrentTokenColumn() + i - 1,
iterator.getCurrentTokenRow(), iterator.getCurrentTokenRow(),
iterator.getCurrentTokenColumn()+i-1 iterator.getCurrentTokenColumn() + i - 1
); );
if (!range) pos = range.start;
return; if (expand || pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)
var pos = range.start;
if (pos.row === cursor.row && Math.abs(pos.column - cursor.column) < 2)
range = this.session.getBracketRange(pos); range = this.session.getBracketRange(pos);
} }
} else if(matchType==='tag') { }
else if (matchType === 'tag') {
if (token && token.type.indexOf('tag-name') !== -1) if (token && token.type.indexOf('tag-name') !== -1)
var tag = token.value; var tag = token.value;
else else
return; return;
var range = new Range( range = new Range(
iterator.getCurrentTokenRow(), iterator.getCurrentTokenRow(),
iterator.getCurrentTokenColumn()-2, iterator.getCurrentTokenColumn() - 2,
iterator.getCurrentTokenRow(), iterator.getCurrentTokenRow(),
iterator.getCurrentTokenColumn()-2 iterator.getCurrentTokenColumn() - 2
); );
//find matching tag //find matching tag
@ -2130,17 +2127,18 @@ var Editor = function(renderer, session) {
if (prevToken) { if (prevToken) {
if (prevToken.type.indexOf('tag-close') !== -1) { if (prevToken.type.indexOf('tag-close') !== -1) {
range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn()+1); range.setEnd(iterator.getCurrentTokenRow(), iterator.getCurrentTokenColumn() + 1);
} }
if (token.value === tag && token.type.indexOf('tag-name') !== -1) { if (token.value === tag && token.type.indexOf('tag-name') !== -1) {
if (prevToken.value === '<') { if (prevToken.value === '<') {
depth[tag]++; depth[tag]++;
} else if ( prevToken.value === '</') { }
else if (prevToken.value === '</') {
depth[tag]--; depth[tag]--;
} }
if (depth[tag]===0) if (depth[tag] === 0)
found = true; found = true;
} }
} }
@ -2149,7 +2147,7 @@ var Editor = function(renderer, session) {
//we found it //we found it
if (token && token.type.indexOf('tag-name')) { if (token && token.type.indexOf('tag-name')) {
var pos = range.start; pos = range.start;
if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2) if (pos.row == cursor.row && Math.abs(pos.column - cursor.column) < 2)
pos = range.end; pos = range.end;
} }
@ -2158,10 +2156,13 @@ var Editor = function(renderer, session) {
pos = range && range.cursor || pos; pos = range && range.cursor || pos;
if (pos) { if (pos) {
if (select) { if (select) {
if (range && range.isEqual(this.getSelectionRange())) if (range && expand) {
this.selection.setRange(range);
} else if (range && range.isEqual(this.getSelectionRange())) {
this.clearSelection(); this.clearSelection();
else } else {
this.selection.selectTo(pos.row, pos.column); this.selection.selectTo(pos.row, pos.column);
}
} else { } else {
this.selection.moveTo(pos.row, pos.column); this.selection.moveTo(pos.row, pos.column);
} }

View file

@ -76,11 +76,14 @@ exports.$detectIndentation = function(lines, fallback) {
var first = {score: 0, length: 0}; var first = {score: 0, length: 0};
var spaceIndents = 0; var spaceIndents = 0;
for (var i = 1; i < 12; i++) { for (var i = 1; i < 12; i++) {
var score = getScore(i);
if (i == 1) { if (i == 1) {
spaceIndents = getScore(i); spaceIndents = score;
var score = stats.length && 1; score = stats[1] ? 0.9 : 0.8;
if (!stats.length)
score = 0
} else } else
var score = getScore(i) / spaceIndents; score /= spaceIndents;
if (changes[i]) if (changes[i])
score += changes[i] / changesTotal; score += changes[i] / changesTotal;

View file

@ -426,7 +426,7 @@ module.exports = {
var column = util.getRightNthChar(editor, cursor, param, count || 1); var column = util.getRightNthChar(editor, cursor, param, count || 1);
if (isRepeat && column == 0 && !(count > 1)) if (isRepeat && column == 0 && !(count > 1))
var column = util.getRightNthChar(editor, cursor, param, 2); column = util.getRightNthChar(editor, cursor, param, 2);
if (typeof column === "number") { if (typeof column === "number") {
cursor.column += column + (isSel ? 1 : 0); cursor.column += column + (isSel ? 1 : 0);
@ -444,8 +444,8 @@ module.exports = {
var cursor = editor.getCursorPosition(); var cursor = editor.getCursorPosition();
var column = util.getLeftNthChar(editor, cursor, param, count || 1); var column = util.getLeftNthChar(editor, cursor, param, count || 1);
if (isRepeat && column == 0 && !(count > 1)) if (isRepeat && column === 0 && !(count > 1))
var column = util.getLeftNthChar(editor, cursor, param, 2); column = util.getLeftNthChar(editor, cursor, param, 2);
if (typeof column === "number") { if (typeof column === "number") {
cursor.column -= column; cursor.column -= column;
@ -558,7 +558,7 @@ module.exports = {
content += "\n"; content += "\n";
if (content.length) { if (content.length) {
editor.navigateLineEnd() editor.navigateLineEnd();
editor.insert(content); editor.insert(content);
util.insertMode(editor); util.insertMode(editor);
} }
@ -575,7 +575,7 @@ module.exports = {
if (content.length) { if (content.length) {
if(row > 0) { if(row > 0) {
editor.navigateUp(); editor.navigateUp();
editor.navigateLineEnd() editor.navigateLineEnd();
editor.insert(content); editor.insert(content);
} else { } else {
editor.session.insert({row: 0, column: 0}, content); editor.session.insert({row: 0, column: 0}, content);

View file

@ -49,7 +49,7 @@ exports.createElement = function(tag, ns) {
}; };
exports.hasCssClass = function(el, name) { exports.hasCssClass = function(el, name) {
var classes = el.className.split(/\s+/g); var classes = (el.className || "").split(/\s+/g);
return classes.indexOf(name) !== -1; return classes.indexOf(name) !== -1;
}; };

View file

@ -720,7 +720,7 @@ var Editor = require("./editor").Editor;
* @param {Boolean} skip If `true`, removes the active selection range * @param {Boolean} skip If `true`, removes the active selection range
* @method Editor.selectMore * @method Editor.selectMore
**/ **/
this.selectMore = function(dir, skip) { this.selectMore = function(dir, skip, stopAtFirst) {
var session = this.session; var session = this.session;
var sel = session.multiSelect; var sel = session.multiSelect;
@ -729,8 +729,8 @@ var Editor = require("./editor").Editor;
range = session.getWordRange(range.start.row, range.start.column); range = session.getWordRange(range.start.row, range.start.column);
range.cursor = dir == -1 ? range.start : range.end; range.cursor = dir == -1 ? range.start : range.end;
this.multiSelect.addRange(range); this.multiSelect.addRange(range);
// todo add option for sublime like behavior if (stopAtFirst)
// return; return;
} }
var needle = session.getTextRange(range); var needle = session.getTextRange(range);

View file

@ -37,7 +37,6 @@ var oop = require("./lib/oop");
/** /**
* @class PlaceHolder * @class PlaceHolder
* *
*
**/ **/
/** /**
@ -48,7 +47,6 @@ var oop = require("./lib/oop");
* - mainClass (String): * - mainClass (String):
* - othersClass (String): * - othersClass (String):
* *
*
* @constructor * @constructor
**/ **/
@ -94,6 +92,10 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
var session = this.session; var session = this.session;
var pos = this.$pos; var pos = this.$pos;
this.selectionBefore = session.selection.toJSON();
if (session.selection.inMultiSelectMode)
session.selection.toSingleRange();
this.pos = doc.createAnchor(pos.row, pos.column); this.pos = doc.createAnchor(pos.row, pos.column);
this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false); this.markerId = session.addMarker(new Range(pos.row, pos.column, pos.row, pos.column + this.length), this.mainClass, null, false);
this.pos.on("change", function(event) { this.pos.on("change", function(event) {
@ -218,9 +220,9 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
**/ **/
this.onCursorChange = function(event) { this.onCursorChange = function(event) {
if (this.$updating) return; if (this.$updating || !this.session) return;
var pos = this.session.selection.getCursor(); var pos = this.session.selection.getCursor();
if(pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) { if (pos.row === this.pos.row && pos.column >= this.pos.column && pos.column <= this.pos.column + this.length) {
this.showOtherMarkers(); this.showOtherMarkers();
this._emit("cursorEnter", event); this._emit("cursorEnter", event);
} else { } else {
@ -245,6 +247,7 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
this.others[i].detach(); this.others[i].detach();
} }
this.session.setUndoSelect(true); this.session.setUndoSelect(true);
this.session = null;
}; };
/** /**
@ -261,6 +264,8 @@ var PlaceHolder = function(session, length, pos, others, mainClass, othersClass)
for (var i = 0; i < undosRequired; i++) { for (var i = 0; i < undosRequired; i++) {
undoManager.undo(true); undoManager.undo(true);
} }
if (this.selectionBefore)
this.session.selection.fromJSON(this.selectionBefore);
}; };
}).call(PlaceHolder.prototype); }).call(PlaceHolder.prototype);

View file

@ -497,6 +497,10 @@ var SnippetManager = function() {
var snippetMap = this.snippetMap; var snippetMap = this.snippetMap;
var snippetNameMap = this.snippetNameMap; var snippetNameMap = this.snippetNameMap;
var self = this; var self = this;
if (!snippets)
snippets = [];
function wrapRegexp(src) { function wrapRegexp(src) {
if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src)) if (src && !/^\^?\(.*\)\$?$|^\\b$/.test(src))
src = "(?:" + src + ")"; src = "(?:" + src + ")";
@ -549,7 +553,7 @@ var SnippetManager = function() {
s.endTriggerRe = new RegExp(s.endTrigger, "", true); s.endTriggerRe = new RegExp(s.endTrigger, "", true);
} }
if (snippets.content) if (snippets && snippets.content)
addSnippet(snippets); addSnippet(snippets);
else if (Array.isArray(snippets)) else if (Array.isArray(snippets))
snippets.forEach(addSnippet); snippets.forEach(addSnippet);

View file

@ -915,6 +915,8 @@ var VirtualRenderer = function(container, theme) {
this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight); this.$updateCachedSize(true, this.$gutterWidth, w, desiredHeight);
// this.$loop.changes = 0; // this.$loop.changes = 0;
this.desiredHeight = desiredHeight; this.desiredHeight = desiredHeight;
this._signal("autosize");
} }
}; };