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



54
55
56
57
58
59
60
61
62
63
64
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 54

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:



41
42
43
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 41

def font
  @font
end

#strategyStrategies::BaseStrategy (readonly)

Returns Selected strategy.

Returns:



44
45
46
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 44

def strategy
  @strategy
end

Instance Method Details

#preserves_variation?Boolean

Check if resolution preserves variation data

Returns:

  • (Boolean)

    True if variation is preserved



79
80
81
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 79

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



72
73
74
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 72

def resolve
  @strategy.resolve(@font)
end

#strategy_nameSymbol

Get strategy name

Returns:

  • (Symbol)

    Strategy identifier



86
87
88
# File 'lib/fontisan/pipeline/variation_resolver.rb', line 86

def strategy_name
  @strategy.strategy_name
end