class SVGPlot::Plot

Main Plot object

Constants

DEFAULTS

Public Class Methods

new(params = {}, output = nil, &block) click to toggle source
Calls superclass method
# File lib/svgplot/plot.rb, line 11
def initialize(params = {}, output = nil, &block)
  params = DEFAULTS.dup.merge params
  super(self, 'svg', params, &block)
  @output = output || ''
  write(@output) if block
end

Public Instance Methods

add_def(id, child, if_exists = :skip, &block) click to toggle source
# File lib/svgplot/plot.rb, line 18
def add_def(id, child, if_exists = :skip, &block)
  @defs ||= ChildTag.new(@img, 'defs')
  @defs_ids ||= {}
  old_id = check_conflicts(id, if_exists) if @defs_ids.key? id
  return old_id if old_id

  child.attributes[:id] = id
  @defs.append_child child
  @defs_ids[id] = child
  child.instance_exec block if block

  child
end
def_group(id, if_exists = :skip, &block) click to toggle source
# File lib/svgplot/plot.rb, line 32
def def_group(id, if_exists = :skip, &block)
  g = SVGPlot::SVGTagWithParent.new(@img, 'g', id: id)
  add_def(id, g, if_exists, &block)
end
write(output) click to toggle source
Calls superclass method
# File lib/svgplot/plot.rb, line 37
def write(output)
  fail("Illegal output: #{@output.inspect}") unless @output.respond_to? :<<
  output << header
  @children.unshift @defs if @defs
  super(output)
  @children.shift if @defs
end

Private Instance Methods

check_conflicts(id, if_exists) click to toggle source
# File lib/svgplot/plot.rb, line 47
def check_conflicts(id, if_exists)
  case if_exists
  when :fail
    fail("Definition '#{id}' already exists")
  when :skip
    return @defs_ids[id]
  else
    @defs.children.reject! { |x| x.attributes[:id] == id }
    nil
  end
end
header() click to toggle source
# File lib/svgplot/plot.rb, line 59
def header
  [
    %(<?xml version="1.0" standalone="no"?>\n),
    %(<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ),
    %("http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">)
  ].join
end