def new_value (type, key)
dec = name.match(/^dec/)
if type == nil && m = PREFIX_REGEX.match(key)
type = (m[1][0, 1] == 'f' ? :field : :var)
key = m[2]
end
delta = lookup_val
ndelta = Ruote.narrow_to_number(delta || 1)
ndelta = -ndelta if dec && ndelta
value = type == :var ?
lookup_variable(key) :
Ruote.lookup(h.applied_workitem['fields'], key)
pos = attribute(:position) || attribute(:pos)
return ((value || 0) + ndelta) if ndelta && (not value.is_a?(Array))
pos ||= 'tail'
value ||= []
return (pos == 'tail' ? value + [ delta ] : [ delta ] + value) unless dec
to_v, to_f = determine_tos
to_v = 'd' if to_v.nil? && to_f.nil?
car, cdr = if delta != nil
(value.delete(delta) != nil ) ? [ delta, value ] : [ nil, value ]
elsif pos == 'tail'
[ value[-1], value[0..-2] ]
else
[ value[0], value[1..-1] ]
end
to_v ? set_v(to_v, car) : set_f(to_f, car)
cdr
end