41 lines
972 B
CoffeeScript
41 lines
972 B
CoffeeScript
{Range} = require 'atom'
|
|
|
|
module.exports =
|
|
class RangeFinder
|
|
# Public
|
|
@rangesFor: (editor) ->
|
|
new RangeFinder(editor).ranges()
|
|
|
|
# Public
|
|
constructor: (@editor) ->
|
|
|
|
# Public
|
|
ranges: ->
|
|
selectionRanges = @selectionRanges()
|
|
if selectionRanges.length is 0
|
|
[@sortableRangeFrom(@sortableRangeForEntireBuffer())]
|
|
else
|
|
selectionRanges.map (selectionRange) =>
|
|
@sortableRangeFrom(selectionRange)
|
|
|
|
# Internal
|
|
selectionRanges: ->
|
|
@editor.getSelectedBufferRanges().filter (range) ->
|
|
not range.isEmpty()
|
|
|
|
# Internal
|
|
sortableRangeForEntireBuffer: ->
|
|
@editor.getBuffer().getRange()
|
|
|
|
# Internal
|
|
sortableRangeFrom: (selectionRange) ->
|
|
startRow = selectionRange.start.row
|
|
startCol = 0
|
|
endRow = if selectionRange.end.column == 0
|
|
selectionRange.end.row - 1
|
|
else
|
|
selectionRange.end.row
|
|
endCol = @editor.lineLengthForBufferRow(endRow)
|
|
|
|
new Range [startRow, startCol], [endRow, endCol]
|