Class: Emfsvg::Renderer

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

Overview

Top-level renderer: walks an Emf::Model::Metafile and emits an SVG string via SvgBuilder.

Matches the exact SVG structure of libemf2svg:

1. XML declaration
2. <svg version="1.1" ... width="W.0000" height="H.0000">
3. <g transform="translate(-RefX, -RefY)">  (header translate)
4. ... content with per-element point_cal coordinate transform ...
5. </g>  (close world transform if open)
6. </g>  (close header translate)
7. </svg>

Defined Under Namespace

Classes: PathTransform

Constant Summary collapse

MAX_OUTPUT_BYTES =
500 * 1024 * 1024

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(metafile, options) ⇒ Renderer

Returns a new instance of Renderer.



25
26
27
28
29
30
31
32
33
34
# File 'lib/emfsvg/renderer.rb', line 25

def initialize(metafile, options)
  @metafile = metafile
  @options = options
  @builder = SvgBuilder.new
  @dc = DeviceContext.new
  @object_table = ObjectTable.new
  @transform_stack = TransformStack.new
  BsdRand.reset
  compute_header_params
end

Class Method Details

.call(metafile, options) ⇒ Object



21
22
23
# File 'lib/emfsvg/renderer.rb', line 21

def self.call(metafile, options)
  new(metafile, options).call
end

Instance Method Details

#callObject

Raises:



36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/emfsvg/renderer.rb', line 36

def call
  emit_xml_declaration
  emit_svg_open do
    emit_header_translate_group do
      visit_records
    end
  end
  result = @builder.to_s
  raise RenderError, "SVG output exceeds #{MAX_OUTPUT_BYTES} bytes" if result.bytesize > MAX_OUTPUT_BYTES

  result
end