Class: Fontisan::Pipeline::Strategies::NamedStrategy

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

Overview

Strategy for generating instances from named instances

This strategy creates a static font instance using coordinates from a named instance defined in the fvar table. It extracts the coordinates from the specified instance and delegates to InstanceStrategy for actual generation.

Named instances are predefined design space coordinates stored in the fvar table, typically representing common styles like "Bold", "Light", "Condensed", etc.

Examples:

Generate "Bold" instance

strategy = NamedStrategy.new(instance_index: 0)
tables = strategy.resolve(variable_font)

Use specific named instance

# Find instance by name first, then use index
fvar = font.table("fvar")
bold_index = fvar.instances.find_index { |i| i[:name] =~ /Bold/ }
strategy = NamedStrategy.new(instance_index: bold_index)
tables = strategy.resolve(variable_font)

Instance Attribute Summary collapse

Attributes inherited from BaseStrategy

#options

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ NamedStrategy

Initialize strategy with instance index

Parameters:

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

    Strategy options

Options Hash (options):

  • :instance_index (Integer)

    Index of named instance in fvar

Raises:

  • (ArgumentError)

    If instance_index not provided



36
37
38
39
40
41
42
43
# File 'lib/fontisan/pipeline/strategies/named_strategy.rb', line 36

def initialize(options = {})
  super
  @instance_index = options[:instance_index]

  if @instance_index.nil?
    raise ArgumentError, "instance_index is required for NamedStrategy"
  end
end

Instance Attribute Details

#instance_indexInteger (readonly)

Returns Named instance index.

Returns:

  • (Integer)

    Named instance index



29
30
31
# File 'lib/fontisan/pipeline/strategies/named_strategy.rb', line 29

def instance_index
  @instance_index
end

Instance Method Details

#preserves_variation?Boolean

Check if strategy preserves variation data

Returns:

  • (Boolean)

    Always false for this strategy



65
66
67
# File 'lib/fontisan/pipeline/strategies/named_strategy.rb', line 65

def preserves_variation?
  false
end

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

Resolve by using named instance coordinates

Extracts coordinates from the fvar table's named instance and delegates to InstanceStrategy for actual instance generation.

Parameters:

Returns:

  • (Hash<String, String>)

    Static font tables

Raises:

  • (ArgumentError)

    If instance index is invalid



53
54
55
56
57
58
59
60
# File 'lib/fontisan/pipeline/strategies/named_strategy.rb', line 53

def resolve(font)
  # Extract coordinates from named instance
  coordinates = extract_coordinates(font)

  # Use InstanceStrategy to generate instance
  instance_strategy = InstanceStrategy.new(coordinates: coordinates)
  instance_strategy.resolve(font)
end

#strategy_nameSymbol

Get strategy name

Returns:

  • (Symbol)

    :named



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

def strategy_name
  :named
end