mirror of
https://github.com/atom/atom.git
synced 2026-01-24 14:28:14 -05:00
Use TokenIterator for position translation
This commit is contained in:
@@ -9,8 +9,8 @@ class TokenIterator
|
||||
|
||||
reset: (@line) ->
|
||||
@index = null
|
||||
@bufferStart = 0
|
||||
@bufferEnd = 0
|
||||
@bufferStart = @line.startBufferColumn
|
||||
@bufferEnd = @bufferStart
|
||||
@screenStart = 0
|
||||
@screenEnd = 0
|
||||
@scopes = @line.openScopes.map (id) -> atom.grammars.scopeForId(id)
|
||||
|
||||
@@ -227,58 +227,30 @@ class TokenizedLine
|
||||
column
|
||||
|
||||
screenColumnForBufferColumn: (targetBufferColumn, options) ->
|
||||
bufferColumn = @startBufferColumn
|
||||
screenColumn = 0
|
||||
for tag, index in @tags
|
||||
if tag > 0
|
||||
switch @specialTokens[index]
|
||||
when HardTab
|
||||
bufferDelta = 1
|
||||
screenDelta = tag
|
||||
when SoftWrapIndent
|
||||
bufferDelta = 0
|
||||
screenDelta = tag
|
||||
else
|
||||
bufferDelta = screenDelta = tag
|
||||
|
||||
nextBufferColumn = bufferColumn + bufferDelta
|
||||
if nextBufferColumn > targetBufferColumn
|
||||
overshoot = targetBufferColumn - bufferColumn
|
||||
bufferColumn += overshoot
|
||||
screenColumn += Math.min(screenDelta, overshoot)
|
||||
break
|
||||
else
|
||||
bufferColumn = nextBufferColumn
|
||||
screenColumn += screenDelta
|
||||
|
||||
screenColumn
|
||||
iterator = TokenIterator.instance.reset(this)
|
||||
while iterator.next()
|
||||
tokenBufferStart = iterator.getBufferStart()
|
||||
tokenBufferEnd = iterator.getBufferEnd()
|
||||
if tokenBufferStart <= targetBufferColumn < tokenBufferEnd
|
||||
overshoot = targetBufferColumn - tokenBufferStart
|
||||
return Math.min(
|
||||
iterator.getScreenStart() + overshoot,
|
||||
iterator.getScreenEnd()
|
||||
)
|
||||
iterator.getScreenEnd()
|
||||
|
||||
bufferColumnForScreenColumn: (targetScreenColumn) ->
|
||||
bufferColumn = @startBufferColumn
|
||||
screenColumn = 0
|
||||
for tag, index in @tags
|
||||
if tag > 0
|
||||
switch @specialTokens[index]
|
||||
when HardTab
|
||||
bufferDelta = 1
|
||||
screenDelta = tag
|
||||
when SoftWrapIndent
|
||||
bufferDelta = 0
|
||||
screenDelta = tag
|
||||
else
|
||||
bufferDelta = screenDelta = tag
|
||||
|
||||
nextScreenColumn = screenColumn + screenDelta
|
||||
if nextScreenColumn > targetScreenColumn
|
||||
overshoot = targetScreenColumn - screenColumn
|
||||
screenColumn += overshoot
|
||||
bufferColumn += Math.min(bufferDelta, overshoot)
|
||||
break
|
||||
else
|
||||
screenColumn = nextScreenColumn
|
||||
bufferColumn += bufferDelta
|
||||
|
||||
bufferColumn
|
||||
iterator = TokenIterator.instance.reset(this)
|
||||
while iterator.next()
|
||||
tokenScreenStart = iterator.getScreenStart()
|
||||
tokenScreenEnd = iterator.getScreenEnd()
|
||||
if tokenScreenStart <= targetScreenColumn < tokenScreenEnd
|
||||
overshoot = targetScreenColumn - tokenScreenStart
|
||||
return Math.min(
|
||||
iterator.getBufferStart() + overshoot,
|
||||
iterator.getBufferEnd()
|
||||
)
|
||||
iterator.getBufferEnd()
|
||||
|
||||
getMaxScreenColumn: ->
|
||||
if @fold
|
||||
|
||||
Reference in New Issue
Block a user