class Prefix complete: null composedObject: null isComplete: -> @complete isRecordable: -> @composedObject.isRecordable() # Public: Marks this as complete upon receiving an object to compose with. # # composedObject - The next motion or operator. # # Returns nothing. compose: (@composedObject) -> @complete = true # Public: Executes the composed operator or motion. # # Returns nothing. execute: -> @composedObject.execute?(@count) # Public: Selects using the composed motion. # # Returns an array of booleans representing whether each selections' success. select: -> @composedObject.select?(@count) # # Used to track the number of times either a motion or operator should # be repeated. # class Repeat extends Prefix count: null # count - The initial digit of the repeat sequence. constructor: (@count) -> @complete = false # Public: Adds an additional digit to this repeat sequence. # # digit - A single digit, 0-9. # # Returns nothing. addDigit: (digit) -> @count = @count * 10 + digit # # Used to track which register the following operator should operate on. # class Register extends Prefix name: null # name - The single character name of the desired register constructor: (@name) -> @complete = false # Public: Marks as complete and sets the operator's register if it accepts it. # # composedOperator - The operator this register pertains to. # # Returns nothing. compose: (composedObject) -> super(composedObject) composedObject.register = @name if composedObject.register? module.exports = { Repeat, Register}