Module: Sevgi::Graphics::Document

Defined in:
lib/sevgi/graphics/document.rb,
lib/sevgi/graphics/document/base.rb,
lib/sevgi/graphics/document/html.rb,
lib/sevgi/graphics/document/default.rb,
lib/sevgi/graphics/document/minimal.rb,
lib/sevgi/graphics/document/inkscape.rb

Overview

SVG document profile factory.

Defined Under Namespace

Classes: Base, Default, HTML, Inkscape, Minimal, Proto

Constant Summary collapse

DEFAULTS =

Default render-time checks.

{lint: true, validate: true}.freeze

Class Method Summary collapse

Class Method Details

.call(document, canvas = Undefined, &block) ⇒ Sevgi::Graphics::Document::Proto

Builds a root SVG element from a document profile.

Parameters:

Returns:

Raises:

  • (Sevgi::ArgumentError)

    when the document profile is unknown



56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/sevgi/graphics/document.rb', line 56

def self.call(document, canvas = Undefined, **, &block)
  klass = case document
  when ::Class
    document if document <= Proto
  else
    Profile[document]
  end

  ArgumentError.("Unknown document profile: #{document}") unless klass

  klass.root(**klass.attributes, **canvas_attributes(canvas), **, &block)
end

.define(name = Undefined, preambles: Undefined, attributes: Undefined, overwrite: false) ⇒ Class

Defines or returns a document profile class.

Parameters:

  • name (Symbol, String, Sevgi::Undefined) (defaults to: Undefined)

    profile name, or Undefined for an anonymous profile

  • preambles (Array<String>, nil, Sevgi::Undefined) (defaults to: Undefined)

    document preamble lines

  • attributes (Hash, Sevgi::Undefined) (defaults to: Undefined)

    default root attributes

  • overwrite (Boolean) (defaults to: false)

    true to replace an existing profile

Returns:

  • (Class)

    document class

Raises:

  • (Sevgi::ArgumentError)

    when a named profile conflicts with an existing profile



89
90
91
92
93
94
95
96
97
98
99
# File 'lib/sevgi/graphics/document.rb', line 89

def self.define(name = Undefined, preambles: Undefined, attributes: Undefined, overwrite: false)
  return anonymous(attributes:, preambles:) if name == Undefined

  if (current = Profile[name])
    reject_conflict(name, current, attributes:, preambles:) unless overwrite
    return current unless overwrite
  end

  attributes, preambles = defaults(attributes:, preambles:)
  Class.new(Base) { document(name, preambles:, attributes:, overwrite:) }
end