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
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
42 43 44 45 46 47 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 42 def initialize(font, coordinates = {}) @font = font @coordinates = coordinates || {} validate_variable_font! end |
Instance Attribute Details
#coordinates ⇒ Hash<String, Float> (readonly)
Returns Design space coordinates.
35 36 37 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 35 def coordinates @coordinates end |
#font ⇒ TrueTypeFont, OpenTypeFont (readonly)
Returns Variable font.
32 33 34 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 32 def font @font end |
Instance Method Details
#default_coordinates ⇒ Hash<String, Float>
Get default coordinates for font
Returns all axes at their default values.
110 111 112 113 114 115 116 117 118 119 120 121 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 110 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.
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 63 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
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 88 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
126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/fontisan/variation/variable_svg_generator.rb', line 126 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 |