Save state
This commit is contained in:
parent
18d12d5375
commit
b63b84292a
2 changed files with 89 additions and 8 deletions
|
|
@ -227,7 +227,7 @@ var Document = function(text) {
|
||||||
* [Given a range within the document, this function returns all the text within that range as a single string.]{: #Document.getTextRange.desc}
|
* [Given a range within the document, this function returns all the text within that range as a single string.]{: #Document.getTextRange.desc}
|
||||||
* @param {Range} range The range to work with
|
* @param {Range} range The range to work with
|
||||||
*
|
*
|
||||||
*
|
* @returns {String}
|
||||||
**/
|
**/
|
||||||
this.getTextRange = function(range) {
|
this.getTextRange = function(range) {
|
||||||
if (range.start.row == range.end.row) {
|
if (range.start.row == range.end.row) {
|
||||||
|
|
|
||||||
|
|
@ -780,15 +780,27 @@ var Editor = function(renderer, session) {
|
||||||
|
|
||||||
|
|
||||||
this.$processRow = function(cursor, rows) {
|
this.$processRow = function(cursor, rows) {
|
||||||
|
var edit = false;
|
||||||
|
var checkedRows = [];
|
||||||
|
|
||||||
for (var r = 0, rowCount = rows.length; r < rowCount; r++) {
|
for (var r = 0, rowCount = rows.length; r < rowCount; r++) {
|
||||||
var cellWidthObj = this.$findCellWidthsForBlock(cursor, rows[r]);
|
var row = rows[r];
|
||||||
cellWidthObj.cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);
|
|
||||||
console.log(cellWidthObj.cellWidths)
|
if (checkedRows.indexOf(row) > -1)
|
||||||
//for widths in cell_widths_by_row:
|
continue;
|
||||||
// checked_rows.add(row_index)
|
var cellWidthObj = this.$findCellWidthsForBlock(cursor, row);
|
||||||
// edit = adjust_row(view, edit, row_index, widths)
|
var cellWidths = this.$setBlockCellWidthsToMax(cellWidthObj.cellWidths);
|
||||||
// row_index += 1
|
var rowIndex = cellWidthObj.firstRow;
|
||||||
|
|
||||||
|
for (var w = 0, l = cellWidths.length; w < l; w++) {
|
||||||
|
var widths = cellWidths[w];
|
||||||
|
checkedRows.push(rowIndex);
|
||||||
|
edit = this.$adjustRow(edit, rowIndex, widths);
|
||||||
|
rowIndex++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return edit;
|
||||||
};
|
};
|
||||||
|
|
||||||
this.$findCellWidthsForBlock = function(cursor, row) {
|
this.$findCellWidthsForBlock = function(cursor, row) {
|
||||||
|
|
@ -913,6 +925,62 @@ var Editor = function(renderer, session) {
|
||||||
return rowTabs;
|
return rowTabs;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
this.$adjustRow = function(edit, row, widths) {
|
||||||
|
var rowTabs = this.$tabsForRow(row);
|
||||||
|
|
||||||
|
if (rowTabs.length == 0)
|
||||||
|
return edit;
|
||||||
|
|
||||||
|
var bias = 0, location = -1;
|
||||||
|
|
||||||
|
// this always only contains two elements, so we're safe in the loop below
|
||||||
|
var expandedSet = this.$izip(widths, rowTabs);
|
||||||
|
|
||||||
|
for (var i = 0, l = expandedSet.length; i < l; i++) {
|
||||||
|
var w = expandedSet[i][0], it = expandedSet[i][1];
|
||||||
|
location += 1 + w;
|
||||||
|
it += bias;
|
||||||
|
var difference = location - it;
|
||||||
|
|
||||||
|
if (difference == 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
var endTabPoint = this.textPoint(row, it);
|
||||||
|
//console.log("wot " + row + " " + " " + it + " " + endTabPoint);
|
||||||
|
var partialLine = this.session.getLine(endTabPoint)
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
end_tab_point = view.text_point(row, it)
|
||||||
|
partial_line = view.substr(view.line(end_tab_point))[0:it]
|
||||||
|
stripped_partial_line = partial_line.rstrip()
|
||||||
|
ispaces = len(partial_line) - len(stripped_partial_line)
|
||||||
|
if difference > 0:
|
||||||
|
if not edit:
|
||||||
|
edit = view.begin_edit()
|
||||||
|
#put the spaces after the tab and then delete the tab, so any insertion
|
||||||
|
#points behave as expected
|
||||||
|
view.insert(edit, end_tab_point+1, (' ' * difference) + "\t")
|
||||||
|
view.erase(edit, sublime.Region(end_tab_point, end_tab_point + 1))
|
||||||
|
bias += difference
|
||||||
|
if difference < 0 and ispaces >= -difference:
|
||||||
|
if not edit:
|
||||||
|
edit = view.begin_edit()
|
||||||
|
view.erase(edit, sublime.Region(end_tab_point, end_tab_point + difference))
|
||||||
|
bias += difference
|
||||||
|
*/
|
||||||
|
|
||||||
|
return edit;
|
||||||
|
};
|
||||||
|
|
||||||
|
this.textPoint = function(row, col) {
|
||||||
|
var selRange = new Range(0, 0, row, col);
|
||||||
|
|
||||||
|
var text = this.session.getTextRange(selRange);
|
||||||
|
|
||||||
|
return text.length;
|
||||||
|
};
|
||||||
|
|
||||||
// the is a (naive) Python port--but works for these purposes
|
// the is a (naive) Python port--but works for these purposes
|
||||||
this.$izip_longest = function(iterables) {
|
this.$izip_longest = function(iterables) {
|
||||||
var longest = iterables[0].length;
|
var longest = iterables[0].length;
|
||||||
|
|
@ -942,6 +1010,19 @@ var Editor = function(renderer, session) {
|
||||||
return expandedSet;
|
return expandedSet;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// an even more (naive) Python port
|
||||||
|
this.$izip = function(widths, tabs) {
|
||||||
|
// grab the shorter size
|
||||||
|
var size = widths.length >= tabs.length ? tabs.length : widths.length;
|
||||||
|
|
||||||
|
var expandedSet = [];
|
||||||
|
for (var i = 0; i < size; i++) {
|
||||||
|
var set = [ widths[i], tabs[i] ];
|
||||||
|
expandedSet.push(set);
|
||||||
|
}
|
||||||
|
return expandedSet;
|
||||||
|
};
|
||||||
|
|
||||||
this.onTextInput = function(text) {
|
this.onTextInput = function(text) {
|
||||||
this.keyBinding.onTextInput(text);
|
this.keyBinding.onTextInput(text);
|
||||||
};
|
};
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue