def parse(data)
cmd = values = nil
value = ""
@subpath_initial_point = @last_point = nil
@previous_control_point = @previous_quadratic_control_point = nil
@calls = []
data.each_char do |c|
if c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z'
values << value.to_f if value != ""
run_path_command(cmd, values) if cmd
cmd = c
values = []
value = ""
elsif c >= '0' && c <= '9' || c == '.' || (c == "-" && value == "")
unless cmd
raise InvalidError, "Numerical value specified before character command in SVG path data"
end
value << c
elsif c == ' ' || c == "\t" || c == "\r" || c == "\n" || c == ","
if value != ""
values << value.to_f
value = ""
end
elsif c == '-'
values << value.to_f
value = c
else
raise InvalidError, "Invalid character '#{c}' in SVG path data"
end
end
values << value.to_f if value != ""
run_path_command(cmd, values) if cmd
@calls
end