some folding fixes and cleanups

This commit is contained in:
Fabian Jakobs 2011-12-02 10:04:54 +01:00
commit e7ca90ffe0
3 changed files with 22 additions and 21 deletions

View file

@ -515,8 +515,7 @@ var EditSession = function(text, mode) {
this.tokenRe = mode.tokenRe; this.tokenRe = mode.tokenRe;
this.nonTokenRe = mode.nonTokenRe; this.nonTokenRe = mode.nonTokenRe;
if (mode.foldingRules) this.$setFolding(mode.foldingRules);
this.$setFolding(mode.foldingRules);
this._dispatchEvent("changeMode"); this._dispatchEvent("changeMode");
}; };
@ -641,7 +640,7 @@ var EditSession = function(text, mode) {
this.$fromUndo = true; this.$fromUndo = true;
var lastUndoRange = null; var lastUndoRange = null;
for (var i = deltas.length - 1; i != -1; i--) { for (var i = deltas.length - 1; i != -1; i--) {
delta = deltas[i]; var delta = deltas[i];
if (delta.group == "doc") { if (delta.group == "doc") {
this.doc.revertDeltas(delta.deltas); this.doc.revertDeltas(delta.deltas);
lastUndoRange = lastUndoRange =
@ -666,7 +665,7 @@ var EditSession = function(text, mode) {
this.$fromUndo = true; this.$fromUndo = true;
var lastUndoRange = null; var lastUndoRange = null;
for (var i = 0; i < deltas.length; i++) { for (var i = 0; i < deltas.length; i++) {
delta = deltas[i]; var delta = deltas[i];
if (delta.group == "doc") { if (delta.group == "doc") {
this.doc.applyDeltas(delta.deltas); this.doc.applyDeltas(delta.deltas);
lastUndoRange = lastUndoRange =
@ -908,7 +907,7 @@ var EditSession = function(text, mode) {
if (useWrapMode) { if (useWrapMode) {
var len = this.getLength(); var len = this.getLength();
this.$wrapData = []; this.$wrapData = [];
for (i = 0; i < len; i++) { for (var i = 0; i < len; i++) {
this.$wrapData.push([]); this.$wrapData.push([]);
} }
this.$updateWrapData(0, len - 1); this.$updateWrapData(0, len - 1);
@ -1070,7 +1069,6 @@ var EditSession = function(text, mode) {
} else { } else {
// Realign folds. E.g. if you add some new chars before a fold, the // Realign folds. E.g. if you add some new chars before a fold, the
// fold should "move" to the right. // fold should "move" to the right.
var column;
len = Math.abs(e.data.range.start.column - e.data.range.end.column); len = Math.abs(e.data.range.start.column - e.data.range.end.column);
if (action.indexOf("remove") != -1) { if (action.indexOf("remove") != -1) {
// Get all the folds in the change range and remove them. // Get all the folds in the change range and remove them.
@ -1158,7 +1156,6 @@ var EditSession = function(text, mode) {
return []; return [];
} }
var tabSize = this.getTabSize();
var splits = []; var splits = [];
var displayLength = tokens.length; var displayLength = tokens.length;
var lastSplit = 0, lastDocSplit = 0; var lastSplit = 0, lastDocSplit = 0;
@ -1414,7 +1411,6 @@ var EditSession = function(text, mode) {
var docRow = 0; var docRow = 0;
var docColumn = 0; var docColumn = 0;
var column; var column;
var foldLineRowLength;
var row = 0; var row = 0;
var rowLength = 0; var rowLength = 0;
@ -1514,8 +1510,6 @@ var EditSession = function(text, mode) {
docRow = pos.row; docRow = pos.row;
docColumn = pos.column; docColumn = pos.column;
var LL = this.$rowCache.length;
var wrapData; var wrapData;
// Special case in wrapMode if the doc is at the end of the document. // Special case in wrapMode if the doc is at the end of the document.
if (this.$useWrapMode) { if (this.$useWrapMode) {
@ -1531,7 +1525,6 @@ var EditSession = function(text, mode) {
} }
var screenRow = 0; var screenRow = 0;
var screenColumn = 0;
var foldStartRow = null; var foldStartRow = null;
var fold = null; var fold = null;

View file

@ -43,7 +43,6 @@ define(function(require, exports, module) {
require("./lib/fixoldbrowsers"); require("./lib/fixoldbrowsers");
var oop = require("./lib/oop"); var oop = require("./lib/oop");
var event = require("./lib/event");
var lang = require("./lib/lang"); var lang = require("./lib/lang");
var useragent = require("./lib/useragent"); var useragent = require("./lib/useragent");
var TextInput = require("./keyboard/textinput").TextInput; var TextInput = require("./keyboard/textinput").TextInput;
@ -296,9 +295,10 @@ var Editor = function(renderer, session) {
this.onDocumentChange = function(e) { this.onDocumentChange = function(e) {
var delta = e.data; var delta = e.data;
var range = delta.range; var range = delta.range;
var lastRow;
if (range.start.row == range.end.row && delta.action != "insertLines" && delta.action != "removeLines") if (range.start.row == range.end.row && delta.action != "insertLines" && delta.action != "removeLines")
var lastRow = range.end.row; lastRow = range.end.row;
else else
lastRow = Infinity; lastRow = Infinity;
this.renderer.updateLines(range.start.row, lastRow); this.renderer.updateLines(range.start.row, lastRow);
@ -445,7 +445,7 @@ var Editor = function(renderer, session) {
// remove selected text // remove selected text
if (!this.selection.isEmpty()) { if (!this.selection.isEmpty()) {
var cursor = this.session.remove(this.getSelectionRange()); cursor = this.session.remove(this.getSelectionRange());
this.clearSelection(); this.clearSelection();
} }
else if (this.session.getOverwrite()) { else if (this.session.getOverwrite()) {
@ -548,7 +548,7 @@ var Editor = function(renderer, session) {
}; };
this.getScrollSpeed = function() { this.getScrollSpeed = function() {
return this.$mouseHandler.getScrollSpeed() return this.$mouseHandler.getScrollSpeed();
}; };
this.$selectionStyle = "line"; this.$selectionStyle = "line";
@ -804,7 +804,7 @@ var Editor = function(renderer, session) {
this.removeLines = function() { this.removeLines = function() {
var rows = this.$getSelectedRows(); var rows = this.$getSelectedRows();
var range; var range;
if (rows.first == 0 || rows.last+1 < this.session.getLength()) if (rows.first === 0 || rows.last+1 < this.session.getLength())
range = new Range(rows.first, 0, rows.last+1, 0); range = new Range(rows.first, 0, rows.last+1, 0);
else else
range = new Range( range = new Range(
@ -862,7 +862,8 @@ var Editor = function(renderer, session) {
range.start.row += linesMoved; range.start.row += linesMoved;
range.end.row += linesMoved; range.end.row += linesMoved;
selection.setSelectionRange(range, reverse); selection.setSelectionRange(range, reverse);
} else { }
else {
selection.setSelectionAnchor(rows.last+linesMoved+1, 0); selection.setSelectionAnchor(rows.last+linesMoved+1, 0);
selection.$moveSelection(function() { selection.$moveSelection(function() {
selection.moveCursorTo(rows.first+linesMoved, 0); selection.moveCursorTo(rows.first+linesMoved, 0);
@ -1017,7 +1018,7 @@ var Editor = function(renderer, session) {
this.gotoLine = function(lineNumber, column) { this.gotoLine = function(lineNumber, column) {
this.selection.clearSelection(); this.selection.clearSelection();
this.session.unfold({row: lineNumber - 1, column: column || 0}) this.session.unfold({row: lineNumber - 1, column: column || 0});
this.$blockScrolling += 1; this.$blockScrolling += 1;
this.moveCursorTo(lineNumber-1, column || 0); this.moveCursorTo(lineNumber-1, column || 0);

View file

@ -50,10 +50,16 @@ var FoldMode = exports.FoldMode = function() {};
this.getFoldWidget = function(session, row) { this.getFoldWidget = function(session, row) {
if (this.foldingStartMarker) { if (this.foldingStartMarker) {
if (this.foldingStopMarker) if (this.foldingStopMarker) {
// rewrite getFoldWidget so the check is only performed once
FoldMode.prototype.getFoldWidget = this.$testBoth;
return this.$testBoth(session, row); return this.$testBoth(session, row);
else }
else {
// rewrite getFoldWidget so the check is only performed once
FoldMode.prototype.getFoldWidget = this.$testStart;
return this.$testStart(session, row); return this.$testStart(session, row);
}
} }
else else
return ""; return "";
@ -65,7 +71,8 @@ var FoldMode = exports.FoldMode = function() {};
this.indentationBlock = function(session, row) { this.indentationBlock = function(session, row) {
var re = /^\s*/; var re = /^\s*/;
var startRow = row, endRow = row; var startRow = row;
var endRow = row;
var line = session.getLine(row); var line = session.getLine(row);
var startColumn = line.length - 1; var startColumn = line.length - 1;
var startLevel = line.match(re)[0].length; var startLevel = line.match(re)[0].length;