Class: Fontisan::Pipeline::VariationResolver

Inherits:
Object
  • Object
show all
Defined in:
lib/fontisan/pipeline/variation_resolver.rb

Overview

Resolves variation data using strategy pattern

This class orchestrates variation resolution during font conversion by selecting and executing the appropriate strategy based on user intent. It follows the Strategy pattern to allow different approaches to handling variable font data.

Three strategies are available:

  • PreserveStrategy: Keep variation data intact (for compatible formats)

  • InstanceStrategy: Generate static instance at coordinates

  • NamedStrategy: Use named instance from fvar table

Strategy selection is explicit through the :strategy option. Each strategy has its own required and optional parameters.

Examples:

Preserve variation data

resolver = VariationResolver.new(font, strategy: :preserve)
tables = resolver.resolve

Generate instance at coordinates

resolver = VariationResolver.new(
  font,
  strategy: :instance,
  coordinates: { "wght" => 700.0 }
)
tables = resolver.resolve

Use named instance

resolver = VariationResolver.new(
  font,
  strategy: :named,
  instance_index: 0
)
tables = resolver.resolve

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(font, options = {}) ⇒ VariationResolver

Initialize resolver with font and strategy

Parameters:

Options Hash (options):

  • :strategy (Symbol)

    Strategy to use (:preserve, :instance, :named)

  • :coordinates (Hash)

    Design space coordinates (for :instance)

  • :instance_index (Integer)

    Named instance index (for :named)

Raises:

  • (ArgumentError)

    If strategy is missing or invalid



59
60
61
62
63
64
65
66
67
68
69
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 59

def initialize(font, options = {})
  @font = font

  strategy_type = options[:strategy]
  raise ArgumentError, "strategy is required" unless strategy_type

  @strategy = build_strategy(strategy_type, options)

  # Validate strategy-specific requirements
  validate_strategy_requirements(strategy_type, options)
end

Instance Attribute Details

#fontTrueTypeFont, OpenTypeFont (readonly)

Returns Font to process.

Returns:



46
47
48
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 46

def font
  @font
end

#strategyStrategies::BaseStrategy (readonly)

Returns Selected strategy.

Returns:



49
50
51
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 49

def strategy
  @strategy
end

Instance Method Details

#preserves_variation?Boolean

Check if resolution preserves variation data

Returns:

  • (Boolean)

    True if variation is preserved



84
85
86
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 84

def preserves_variation?
  @strategy.preserves_variation?
end

#resolveHash<String, String>

Resolve variation data

Delegates to the selected strategy to process the font and return the appropriate tables.

Returns:

  • (Hash<String, String>)

    Font tables after resolution



77
78
79
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 77

def resolve
  @strategy.resolve(@font)
end

#strategy_nameSymbol

Get strategy name

Returns:

  • (Symbol)

    Strategy identifier



91
92
93
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 91

def strategy_name
  @strategy.strategy_name
end