Parent

Methods

Prawn::Svg::Parser::Path

Constants

InvalidError

Raised if the SVG path cannot be parsed.

Public Instance Methods

parse(data) click to toggle source

Parses an SVG path and returns a Prawn-compatible call tree.

# File lib/prawn/svg/parser/path.rb, line 10
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

[Validate]

Generated with the Darkfish Rdoc Generator 2.