def substring(start, len)
start = start.round.to_f
if start.infinite? or start.nan? then
@value = ''
elsif len then
len = len.round.to_f
maxlen = start + len
len = maxlen - 1.0 if len >= maxlen
if start <= 1.0 then
start = 0
else
start = start.to_i - 1
end
if len.nan? or len < 1.0 then
@value = ''
elsif len.infinite? then
/\A[\W\w]{0,#{start}}/ =~ @value
@value = $'
else
/\A[\W\w]{0,#{start}}([\W\w]{0,#{len.to_i}})/ =~ @value
@value = $1
end
elsif start > 1.0 then
/\A[\W\w]{0,#{start.to_i-1}}/ =~ @value
@value = $'
end
raise "BUG" unless @value
self
end