Class: Fontisan::Variation::VariableSvgGenerator
- Inherits:
-
Object
- Object
- Fontisan::Variation::VariableSvgGenerator
- Defined in:
- lib/fontisan/variation/variable_svg_generator.rb
Overview
Generates SVG fonts from variable fonts at specific coordinates
[‘VariableSvgGenerator`](lib/fontisan/variation/variable_svg_generator.rb) combines instance generation with SVG conversion to create static SVG fonts from variable fonts at any point in the design space.
Process:
-
Accept variable font + axis coordinates
-
Generate static instance using InstanceGenerator
-
Build temporary font from instance tables
-
Delegate to SvgGenerator for SVG creation
-
Return SVG with variation metadata
This enables generating SVG fonts at specific weights, widths, or other variation axes without creating intermediate font files.
Defined Under Namespace
Classes: InstanceFontWrapper
Instance Attribute Summary collapse
-
#coordinates ⇒ Hash<String, Float>
readonly
Design space coordinates.
-
#font ⇒ TrueTypeFont, OpenTypeFont
readonly
Variable font.
Instance Method Summary collapse
-
#default_coordinates ⇒ Hash<String, Float>
Get default coordinates for font.
-
#generate(options = {}) ⇒ Hash
Generate SVG font at specified coordinates.
-
#generate_named_instance(instance_index, options = {}) ⇒ Hash
Generate SVG for a named instance.
-
#initialize(font, coordinates = {}) ⇒ VariableSvgGenerator
constructor
Initialize generator.
-
#named_instances ⇒ Array<Hash>
Get list of named instances.
Constructor Details
#initialize(font, coordinates = {}) ⇒ VariableSvgGenerator
Initialize generator
45 46 47 48 49 50 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 45 def initialize(font, coordinates = {}) @font = font @coordinates = coordinates || {} validate_variable_font! end |
Instance Attribute Details
#coordinates ⇒ Hash<String, Float> (readonly)
Returns Design space coordinates.
38 39 40 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 38 def coordinates @coordinates end |
#font ⇒ TrueTypeFont, OpenTypeFont (readonly)
Returns Variable font.
35 36 37 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 35 def font @font end |
Instance Method Details
#default_coordinates ⇒ Hash<String, Float>
Get default coordinates for font
Returns all axes at their default values.
113 114 115 116 117 118 119 120 121 122 123 124 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 113 def default_coordinates return {} unless @font.has_table?("fvar") fvar = @font.table("fvar") return {} unless fvar coords = {} fvar.axes.each do |axis| coords[axis.axis_tag] = axis.default_value end coords end |
#generate(options = {}) ⇒ Hash
Generate SVG font at specified coordinates
Creates a static instance at the given coordinates and converts it to SVG format. Returns the same format as SvgGenerator for consistency.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 66 def generate( = {}) # Generate static instance tables instance_tables = generate_static_instance # Build temporary font from instance tables static_font = build_font_from_tables(instance_tables) # Generate SVG using standard generator svg_generator = Converters::SvgGenerator.new result = svg_generator.convert(static_font, ) # Add variation metadata to result result[:variation_metadata] = { coordinates: @coordinates, source_font: extract_font_name, } result end |
#generate_named_instance(instance_index, options = {}) ⇒ Hash
Generate SVG for a named instance
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 91 def generate_named_instance(instance_index, = {}) instance_generator = InstanceGenerator.new(@font) instance_tables = instance_generator.generate_named_instance(instance_index) static_font = build_font_from_tables(instance_tables) svg_generator = Converters::SvgGenerator.new result = svg_generator.convert(static_font, ) # Add instance metadata result[:variation_metadata] = { instance_index: instance_index, source_font: extract_font_name, } result end |
#named_instances ⇒ Array<Hash>
Get list of named instances
129 130 131 132 133 134 135 136 137 138 139 140 141 142 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 129 def named_instances return [] unless @font.has_table?("fvar") fvar = @font.table("fvar") return [] unless fvar fvar.instances.map.with_index do |instance, index| { index: index, name: instance[:subfamily_name_id], coordinates: build_instance_coordinates(instance, fvar.axes), } end end |