Class: Fontisan::Pipeline::Strategies::InstanceStrategy

Inherits:
BaseStrategy
  • Object
show all
Defined in:
lib/fontisan/pipeline/strategies/instance_strategy.rb

Overview

Strategy for generating static instances from variable fonts

This strategy creates a static font instance at specific design space coordinates by applying variation deltas and removing variation tables. It’s used for:

  • Variable TTF → Static TTF at specific weight

  • Variable OTF → Static OTF at specific coordinates

  • Variable → Static for any format conversion

The strategy uses the InstanceGenerator to:

  1. Apply variation deltas (gvar or CFF2 blend)

  2. Apply metrics variations (HVAR, VVAR, MVAR)

  3. Remove variation tables (fvar, gvar, CFF2, avar, etc.)

If no coordinates are provided, uses default coordinates (axis default values).

Examples:

Generate instance at specific weight

strategy = InstanceStrategy.new(coordinates: { "wght" => 700.0 })
tables = strategy.resolve(variable_font)
# tables has no variation tables

Generate instance at default coordinates

strategy = InstanceStrategy.new
tables = strategy.resolve(variable_font)

Instance Attribute Summary collapse

Attributes inherited from BaseStrategy

#options

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ InstanceStrategy

Initialize strategy with coordinates

Parameters:

  • options (Hash) (defaults to: {})

    Strategy options

Options Hash (options):

  • :coordinates (Hash<String, Float>)

    Design space coordinates (axis tag => value). If not provided, uses default coordinates.



43
44
45
46
# File 'lib/fontisan/pipeline/strategies/instance_strategy.rb', line 43

def initialize(options = {})
  super
  @coordinates = options[:coordinates] || {}
end

Instance Attribute Details

#coordinatesHash<String, Float> (readonly)

Returns Design space coordinates.

Returns:

  • (Hash<String, Float>)

    Design space coordinates



36
37
38
# File 'lib/fontisan/pipeline/strategies/instance_strategy.rb', line 36

def coordinates
  @coordinates
end

Instance Method Details

#preserves_variation?Boolean

Check if strategy preserves variation data

Returns:

  • (Boolean)

    Always false for this strategy



69
70
71
# File 'lib/fontisan/pipeline/strategies/instance_strategy.rb', line 69

def preserves_variation?
  false
end

#resolve(font) ⇒ Hash<String, String>

Resolve by generating static instance

Creates a static font instance at the specified coordinates using the InstanceGenerator. If coordinates are not provided, uses the default coordinates from the font’s axes.

Parameters:

Returns:

  • (Hash<String, String>)

    Static font tables

Raises:

  • (Variation::InvalidCoordinatesError)

    If coordinates out of range



57
58
59
60
61
62
63
64
# File 'lib/fontisan/pipeline/strategies/instance_strategy.rb', line 57

def resolve(font)
  # Validate coordinates if provided
  validate_coordinates(font) unless @coordinates.empty?

  # Use InstanceGenerator to create static instance
  generator = Variation::InstanceGenerator.new(font, @coordinates)
  generator.generate
end

#strategy_nameSymbol

Get strategy name

Returns:

  • (Symbol)

    :instance



76
77
78
# File 'lib/fontisan/pipeline/strategies/instance_strategy.rb', line 76

def strategy_name
  :instance
end