def execute(state)
digits = param(0, state, 2)
idigits = param(1, state, 1)
width = param(2, state, 0)
padchar = param(3, state, ?\s)
arg = state.next_arg
if arg.respond_to :to_int
sign = (arg >= 0 ? (at_mod? ? '+' : '') : '-')
str = sprintf("%0#{idigits + digits + 1}.#{digits}f", arg.abs)
if colon_mod?
str = sign + str.rjust(width, padchar.chr)
else
str = (sign + str).rjust(width, padchar.chr)
end
state.output str
elsif arg.respond_to? :to_i
state.push_back_arg
parameters = @params[2].nil? ? [] : [@params[2]]
Factory.build(?D, parameters, [], nil, @pos).execute(state)
else
arg_error 'argument is not a number or a number string'
end
end