diff --git a/src/app/old-line-map.coffee b/src/app/old-line-map.coffee deleted file mode 100644 index e0958bfac..000000000 --- a/src/app/old-line-map.coffee +++ /dev/null @@ -1,185 +0,0 @@ -_ = require 'underscore' -Point = require 'point' -Range = require 'range' - -module.exports = -class LineMap - constructor: -> - @lineFragments = [] - - insertAtBufferRow: (bufferRow, lineFragments) -> - @spliceAtBufferRow(bufferRow, 0, lineFragments) - - spliceAtBufferRow: (startRow, rowCount, lineFragments) -> - @spliceByDelta('bufferDelta', startRow, rowCount, lineFragments) - - spliceAtScreenRow: (startRow, rowCount, lineFragments) -> - @spliceByDelta('screenDelta', startRow, rowCount, lineFragments) - - replaceBufferRows: (start, end, lineFragments) -> - @spliceAtBufferRow(start, end - start + 1, lineFragments) - - replaceScreenRows: (start, end, lineFragments) -> - @spliceAtScreenRow(start, end - start + 1, lineFragments) - - lineForScreenRow: (row) -> - @linesForScreenRows(row, row)[0] - - linesForScreenRows: (startRow, endRow) -> - @linesByDelta('screenDelta', startRow, endRow) - - lineForBufferRow: (row) -> - @linesForBufferRows(row, row)[0] - - linesForBufferRows: (startRow, endRow) -> - @linesByDelta('bufferDelta', startRow, endRow) - - bufferRowsForScreenRows: (startRow, endRow=@lastScreenRow()) -> - bufferRows = [] - currentScreenRow = -1 - @traverseByDelta 'screenDelta', [startRow, 0], [endRow, 0], ({ screenDelta, bufferDelta }) -> - bufferRows.push(bufferDelta.row) if screenDelta.row > currentScreenRow - currentScreenRow = screenDelta.row - bufferRows - - bufferLineCount: -> - @lineCountByDelta('bufferDelta') - - screenLineCount: -> - @lineCountByDelta('screenDelta') - - lineCountByDelta: (deltaType) -> - @traverseByDelta(deltaType, new Point(Infinity, 0))[deltaType].row - - lastScreenRow: -> - @screenLineCount() - 1 - - maxScreenLineLength: -> - maxLength = 0 - @traverseByDelta 'screenDelta', [0, 0], [@lastScreenRow(), 0], ({lineFragment}) -> - length = lineFragment.text.length - maxLength = length if length > maxLength - maxLength - - screenPositionForBufferPosition: (bufferPosition, options) -> - @translatePosition('bufferDelta', 'screenDelta', bufferPosition, options) - - bufferPositionForScreenPosition: (screenPosition, options) -> - @translatePosition('screenDelta', 'bufferDelta', screenPosition, options) - - screenRangeForBufferRange: (bufferRange) -> - bufferRange = Range.fromObject(bufferRange) - start = @screenPositionForBufferPosition(bufferRange.start) - end = @screenPositionForBufferPosition(bufferRange.end) - new Range(start, end) - - bufferRangeForScreenRange: (screenRange) -> - start = @bufferPositionForScreenPosition(screenRange.start) - end = @bufferPositionForScreenPosition(screenRange.end) - new Range(start, end) - - clipScreenPosition: (screenPosition, options) -> - @clipPosition('screenDelta', screenPosition, options) - - clipPosition: (deltaType, position, options={}) -> - options.clipToBounds = true - @translatePosition(deltaType, deltaType, position, options) - - spliceByDelta: (deltaType, startRow, rowCount, lineFragments) -> - stopRow = startRow + rowCount - startIndex = undefined - stopIndex = 0 - - delta = new Point - for lineFragment, i in @lineFragments - startIndex ?= i if delta.row == startRow - break if delta.row == stopRow - delta = delta.add(lineFragment[deltaType]) - stopIndex++ - startIndex ?= i - - @lineFragments[startIndex...stopIndex] = lineFragments - - linesByDelta: (deltaType, startRow, endRow) -> - lines = [] - pendingFragment = null - @traverseByDelta deltaType, new Point(startRow, 0), new Point(endRow, Infinity), ({lineFragment}) -> - if pendingFragment - pendingFragment = pendingFragment.concat(lineFragment) - else - pendingFragment = lineFragment - if pendingFragment[deltaType].row > 0 - lines.push pendingFragment - pendingFragment = null - lines - - translatePosition: (sourceDeltaType, targetDeltaType, sourcePosition, options={}) -> - sourcePosition = Point.fromObject(sourcePosition) - wrapBeyondNewlines = options.wrapBeyondNewlines ? false - wrapAtSoftNewlines = options.wrapAtSoftNewlines ? false - skipAtomicTokens = options.skipAtomicTokens ? false - clipToBounds = options.clipToBounds ? false - - @clipToBounds(sourceDeltaType, sourcePosition) if clipToBounds - traversalResult = @traverseByDelta(sourceDeltaType, sourcePosition) - lastLineFragment = traversalResult.lastLineFragment - traversedAllFragments = traversalResult.traversedAllFragments - sourceDelta = traversalResult[sourceDeltaType] - targetDelta = traversalResult[targetDeltaType] - - maxSourceColumn = sourceDelta.column + lastLineFragment.textLength() - maxTargetColumn = targetDelta.column + lastLineFragment.textLength() - - if lastLineFragment.isSoftWrapped() and sourcePosition.column >= maxSourceColumn - if wrapAtSoftNewlines - targetDelta.row++ - targetDelta.column = 0 - else - targetDelta.column = maxTargetColumn - 1 - return @clipPosition(targetDeltaType, targetDelta) - else if sourcePosition.column > maxSourceColumn and wrapBeyondNewlines and not traversedAllFragments - targetDelta.row++ - targetDelta.column = 0 - else - additionalColumns = sourcePosition.column - sourceDelta.column - additionalColumns = lastLineFragment.translateColumn(sourceDeltaType, targetDeltaType, additionalColumns, { skipAtomicTokens }) - targetDelta.column += additionalColumns - - targetDelta - - clipToBounds: (deltaType, position) -> - if position.column < 0 - position.column = 0 - - if position.row < 0 - position.row = 0 - position.column = 0 - - maxSourceRow = @lineCountByDelta(deltaType) - 1 - if position.row > maxSourceRow - position.row = maxSourceRow - position.column = Infinity - - traverseByDelta: (deltaType, startPosition, endPosition=startPosition, iterator=null) -> - traversalDelta = new Point - screenDelta = new Point - bufferDelta = new Point - startPosition = Point.fromObject(startPosition) - endPosition = Point.fromObject(endPosition) - - for lineFragment, index in @lineFragments - iterator({ lineFragment, screenDelta, bufferDelta }) if traversalDelta.isGreaterThanOrEqual(startPosition) and iterator? - traversalDelta = traversalDelta.add(lineFragment[deltaType]) - break if traversalDelta.isGreaterThan(endPosition) - screenDelta = screenDelta.add(lineFragment.screenDelta) - bufferDelta = bufferDelta.add(lineFragment.bufferDelta) - - lastLineFragment = lineFragment - traversedAllFragments = (index == @lineFragments.length - 1) - { screenDelta, bufferDelta, lastLineFragment, traversedAllFragments } - - logLines: (start=0, end=@screenLineCount() - 1)-> - for row in [start..end] - line = @lineForScreenRow(row).text - console.log row, line, line.length - diff --git a/src/app/old-screen-line.coffee b/src/app/old-screen-line.coffee deleted file mode 100644 index 8009e7cd3..000000000 --- a/src/app/old-screen-line.coffee +++ /dev/null @@ -1,94 +0,0 @@ -_ = require 'underscore' -Point = require 'point' - -module.exports = -class ScreenLine - stack: null - text: null - tokens: null - screenDelta: null - bufferDelta: null - foldable: null - - constructor: (@tokens, @text, screenDelta, bufferDelta, extraFields) -> - @screenDelta = Point.fromObject(screenDelta) - @bufferDelta = Point.fromObject(bufferDelta) - _.extend(this, extraFields) - - copy: -> - new ScreenLine(@tokens, @text, @screenDelta, @bufferDelta, { @stack, @foldable }) - - splitAt: (column) -> - return [new ScreenLine([], '', [0, 0], [0, 0]), this] if column == 0 - - rightTokens = new Array(@tokens...) - leftTokens = [] - leftTextLength = 0 - while leftTextLength < column - if leftTextLength + rightTokens[0].value.length > column - rightTokens[0..0] = rightTokens[0].splitAt(column - leftTextLength) - nextToken = rightTokens.shift() - leftTextLength += nextToken.value.length - leftTokens.push nextToken - - leftText = _.pluck(leftTokens, 'value').join('') - rightText = _.pluck(rightTokens, 'value').join('') - - [leftScreenDelta, rightScreenDelta] = @screenDelta.splitAt(column) - [leftBufferDelta, rightBufferDelta] = @bufferDelta.splitAt(column) - - leftFragment = new ScreenLine(leftTokens, leftText, leftScreenDelta, leftBufferDelta, {@stack, @foldable}) - rightFragment = new ScreenLine(rightTokens, rightText, rightScreenDelta, rightBufferDelta, {@stack}) - [leftFragment, rightFragment] - - tokenAtBufferColumn: (bufferColumn) -> - delta = 0 - for token in @tokens - delta += token.bufferDelta - return token if delta >= bufferColumn - token - - concat: (other) -> - tokens = @tokens.concat(other.tokens) - text = @text + other.text - screenDelta = @screenDelta.add(other.screenDelta) - bufferDelta = @bufferDelta.add(other.bufferDelta) - new ScreenLine(tokens, text, screenDelta, bufferDelta, {stack: other.stack}) - - translateColumn: (sourceDeltaType, targetDeltaType, sourceColumn, options={}) -> - { skipAtomicTokens } = options - sourceColumn = Math.min(sourceColumn, @textLength()) - - isSourceColumnBeforeLastToken = false - tokenStartTargetColumn = 0 - tokenStartSourceColumn = 0 - - for token in @tokens - tokenEndSourceColumn = tokenStartSourceColumn + token[sourceDeltaType] - tokenEndTargetColumn = tokenStartTargetColumn + token[targetDeltaType] - break if tokenEndSourceColumn > sourceColumn - tokenStartTargetColumn = tokenEndTargetColumn - tokenStartSourceColumn = tokenEndSourceColumn - - sourceColumnIsInsideToken = tokenStartSourceColumn < sourceColumn < tokenEndSourceColumn - - if token?.isAtomic and sourceColumnIsInsideToken - if skipAtomicTokens - tokenEndTargetColumn - else - tokenStartTargetColumn - else - remainingColumns = sourceColumn - tokenStartSourceColumn - tokenStartTargetColumn + remainingColumns - - textLength: -> - if @fold - textLength = 0 - else - textLength = @text.length - - isSoftWrapped: -> - @screenDelta.row == 1 and @bufferDelta.row == 0 - - isEqual: (other) -> - _.isEqual(@tokens, other.tokens) and @screenDelta.isEqual(other.screenDelta) and @bufferDelta.isEqual(other.bufferDelta)