def decode_partial(type, encoded, data, &proc)
return nil if encoded==nil
head =
case type
when :math
"m"
when :dmath
"d"
when :escape
"e"
when :user
"u"
else
return
end
encoded.gsub(/#{Regexp.escape(@params[:delimiter])}#{head}(\d+)#{Regexp.escape(@params[:delimiter])}/) do
i = $1.to_i
t, d, s =
case head
when "d"
[:dmath, data.dmath_list[i], data.dsrc_list[i]]
when "e"
[:escape, data.escape_list[i], data.esrc_list[i]]
when "m"
[:math, data.math_list[i], data.msrc_list[i]]
when "u"
[:user, data.user_list[i], data.usrc_list[i]]
end
if proc
proc.call(d, :type=>t, :index=>i, :src=>s) || "#{@params[:delimiter]}#{head}#{i}#{@params[:delimiter]}"
else
d
end
end
end