1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
{Operator} = require './general-operators'
{Range} = require 'atom'
settings = require '../settings'
#
# It increases or decreases the next number on the line
#
class Increase extends Operator
step: 1
constructor: ->
super
@complete = true
@numberRegex = new RegExp(settings.numberRegex())
execute: (count=1) ->
@editor.transact =>
increased = false
for cursor in @editor.getCursors()
if @increaseNumber(count, cursor) then increased = true
atom.beep() unless increased
increaseNumber: (count, cursor) ->
# find position of current number, adapted from from SearchCurrentWord
cursorPosition = cursor.getBufferPosition()
numEnd = cursor.getEndOfCurrentWordBufferPosition(wordRegex: @numberRegex, allowNext: false)
if numEnd.column is cursorPosition.column
# either we don't have a current number, or it ends on cursor, i.e. precedes it, so look for the next one
numEnd = cursor.getEndOfCurrentWordBufferPosition(wordRegex: @numberRegex, allowNext: true)
return if numEnd.row isnt cursorPosition.row # don't look beyond the current line
return if numEnd.column is cursorPosition.column # no number after cursor
cursor.setBufferPosition numEnd
numStart = cursor.getBeginningOfCurrentWordBufferPosition(wordRegex: @numberRegex, allowPrevious: false)
range = new Range(numStart, numEnd)
# parse number, increase/decrease
number = parseInt(@editor.getTextInBufferRange(range), 10)
if isNaN(number)
cursor.setBufferPosition(cursorPosition)
return
number += @step*count
# replace current number with new
newValue = String(number)
@editor.setTextInBufferRange(range, newValue, normalizeLineEndings: false)
cursor.setBufferPosition(row: numStart.row, column: numStart.column-1+newValue.length)
return true
class Decrease extends Increase
step: -1
module.exports = {Increase, Decrease}
|