Add single-line addresses to command interpreter

This commit is contained in:
Corey Johnson & Nathan Sobo
2012-03-22 12:11:46 -06:00
parent 534c8b94d2
commit d5479a0b60
5 changed files with 39 additions and 20 deletions

View File

@@ -11,9 +11,15 @@ describe "CommandInterpreter", ->
interpreter = new CommandInterpreter()
describe "addresses", ->
it "selects the given lines", ->
interpreter.eval(editor, '4,7')
expect(editor.selection.getBufferRange()).toEqual [[3, 0], [6, 0]]
describe "a line address", ->
it "selects the specified line", ->
interpreter.eval(editor, '4')
expect(editor.selection.getBufferRange()).toEqual [[3, 0], [4, 0]]
describe "an address range with two line addresses", ->
it "selects the given lines", ->
interpreter.eval(editor, '4,7')
expect(editor.selection.getBufferRange()).toEqual [[3, 0], [7, 0]]
describe "substitution", ->
it "does nothing if there are no matches", ->
@@ -34,7 +40,7 @@ describe "CommandInterpreter", ->
describe "when prefixed with an address", ->
it "only makes substitutions within given lines", ->
interpreter.eval(editor, '4,7s/ /!/g')
interpreter.eval(editor, '4,6s/ /!/g')
expect(buffer.lineForRow(2)).toBe ' if (items.length <= 1) return items;'
expect(buffer.lineForRow(3)).toBe '!!!!var!pivot!=!items.shift(),!current,!left!=![],!right!=![];'
expect(buffer.lineForRow(4)).toBe '!!!!while(items.length!>!0)!{'

View File

@@ -0,0 +1,9 @@
Address = require 'command-interpreter/address'
Range = require 'range'
module.exports =
class AddressRange extends Address
constructor: (@startAddress, @endAddress) ->
getRange: ->
new Range(@startAddress.getRange().start, @endAddress.getRange().end)

View File

@@ -1,14 +1,4 @@
Range = require 'range'
module.exports =
class Address
startRow: null
endRow: null
constructor: (start, end) ->
@startRow = start - 1
@endRow = end - 1
execute: (editor) ->
range = new Range([@startRow, 0], [@endRow, 0])
editor.getSelection().setBufferRange(range)
editor.getSelection().setBufferRange(@getRange())

View File

@@ -0,0 +1,10 @@
Address = require 'command-interpreter/address'
Range = require 'range'
module.exports =
class LineAddress extends Address
constructor: (lineNumber) ->
@row = lineNumber - 1
getRange: ->
new Range([@row, 0], [@row + 1, 0])

View File

@@ -1,6 +1,7 @@
{
var Substitution = require('command-interpreter/substitution');
var Address = require('command-interpreter/address');
var LineAddress = require('command-interpreter/line-address');
var AddressRange = require('command-interpreter/address-range');
}
start
@@ -11,10 +12,13 @@ start
return operations;
}
address
= start:integer _ ',' _ end:integer {
return new Address(start, end)
}
address = addressRange / primitiveAddress
addressRange
= start:primitiveAddress _ ',' _ end:address { return new AddressRange(start, end) }
primitiveAddress
= lineNumber:integer { return new LineAddress(lineNumber) }
substitution
= "s" _ "/" find:pattern "/" replace:pattern "/" _ options:[g]* {