#
# EditingLine.rb
#
# $Author: hiroya $
# $Date: 2000/11/23 01:53:10 $
# Copyright (C) 2000 Hiroya KUBO
#
=begin
A class represents an "EditingLine" in "CommandLineEditor".
this class has relation with "EditingContext"
The instance stores
(1) string value itself
(2) current cursor position in current line
(3) previous set-mark position in current line
=end
class EditingLine
def initialize
clear
end
def clear
@value = ""
@markPosition = nil
@cursorPosition = 0
end
def getCurrentWord
if(@cursorPosition==0)
return ""
end
p = @value.rindex(/\s/, @cursorPosition-1)
if(p != nil && p != -1)
return @value[p+1..@cursorPosition-1]
elsif(@cursorPosition == 0)
return ""
else
return @value[0..@cursorPosition-1]
end
end
def size
if(@value == nil)
return 0
end
return @value.size
end
def getValue
return @value
end
def setValue(value)
@value = value
@cursorPosition = 0
@markPosition = nil
end
def setMark(pos = @cursorPosition)
return @markPosition = pos
end
def getMark
return @markPosition
end
def getCursorPosition
return @cursorPosition
end
def setCursorPosition(p = size)
return @cursorPosition = p
end
def setCursorPositionToEnd
return setCursorPosition
end
def moveCursor(n)
if( 0 <= @cursorPosition+n && @cursorPosition+n <= size )
@cursorPosition += n
return true
else
return false
end
end
def delete(n = 1)
if(size == n )
@value = ""
@cursorPosition = 0
return true
elsif(size < n )
@value = ""
@cursorPosition = 0
return false
elsif(size >= n && @cursorPosition==size)
@value = @value[0..size-1-n]
@cursorPosition -= n
return true
elsif(@cursorPosition-n >= 0 )
@value =
@value[0..@cursorPosition-1-n]+
@value[@cursorPosition..size]
@cursorPosition -= n
return true
end
end
def kill_line
remove(getCursorPosition, size)
end
def toString
return @value[0..@cursorPosition-1]
end
def add(str)
if(str.instance_of?(String))
if(@value != nil)
@value = @value + str
else
@value = str
end
@cursorPosition += str.size
end
end
def insert(str)
if(size == @cursorPosition)
add(str)
elsif(@cursorPosition==0)
if(@value != nil)
@value = str + @value
else
@value = str
end
@cursorPosition += str.size
elsif(@value != nil)
@value =
@value[0..@cursorPosition-1] + str +
@value[@cursorPosition..size]
@cursorPosition += str.size
else
@value = str
@cursorPosition += (str.size)+1
end
end
def copy(s, e = size)
tmp = nil
if(s == 0 && e == size)
tmp = @value
elsif(s == 0 && e < size)
tmp = @value[0..e-1]
elsif(0 <= s && e <= size)
tmp = @value[s..e-1]
end
return tmp
end
def remove(s, e = size)
if(@value == nil)
return nil
end
if(s == 0 && e == size)
tmp = @value
@value = ""
elsif(s == 0 && e < size)
tmp = @value[0..e-1]
@value = @value[e..size-1]
elsif(e == size)
tmp = @value[s..e-1]
@value = @value[0..s-1]
elsif(0 < s && e <= size)
tmp = @value[s..e-1]
@value = @value[0..s-1] + @value[e..size-1]
else
tmp = nil
s = 0
end
@cursorPosition = s
return tmp
end
def end_of_line?
if(@value != nil)
return (@cursorPosition == @value.size)
else
return false
end
end
end
syntax highlighted by Code2HTML, v. 0.9.1