Class: Emfsvg::Svg::Element

Inherits:
Object
  • Object
show all
Defined in:
lib/emfsvg/svg/element.rb

Overview

Base value object for an SVG element. Subclasses (Svg::Elements::*) carry typed semantic fields; the base provides a uniform interface for the translation layer's dispatch.

Element instances are immutable: built once from a Nokogiri node via the .from_node factory. The node is not retained.

Constant Summary collapse

ELEMENT_NAME =
"abstract"

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.registryObject (readonly)

Returns the value of attribute registry.



35
36
37
# File 'lib/emfsvg/svg/element.rb', line 35

def registry
  @registry
end

Class Method Details

.from_node(node) ⇒ Object



41
42
43
44
45
46
47
48
# File 'lib/emfsvg/svg/element.rb', line 41

def from_node(node)
  subclass = @registry[node.name]
  return subclass.from_node(node) if subclass

  OpenElement.new(name: node.name, children: node.element_children.map do |c|
    from_node(c)
  end)
end

.register(element_name, subclass) ⇒ Object



37
38
39
# File 'lib/emfsvg/svg/element.rb', line 37

def register(element_name, subclass)
  @registry[element_name] = subclass
end

Instance Method Details

#childrenObject



18
19
20
# File 'lib/emfsvg/svg/element.rb', line 18

def children
  []
end

#clip_pathObject

All elements expose clip_path (nil by default) so the SharedGdi module can treat every element uniformly. Subclasses with the attribute override via attr_reader.



25
26
27
# File 'lib/emfsvg/svg/element.rb', line 25

def clip_path
  nil
end

#element_nameObject



14
15
16
# File 'lib/emfsvg/svg/element.rb', line 14

def element_name
  self.class::ELEMENT_NAME
end