Class: Fontisan::Audit::Extractors::VariationDetail

Inherits:
Base
  • Object
show all
Defined in:
lib/fontisan/audit/extractors/variation_detail.rb

Overview

Variable-font detail: fvar axes + named instances + presence flags for every variation side-table (avar, cvar, HVAR, VVAR, MVAR, gvar).

Returned fields:

variation: Models::Audit::VariationDetail, or nil for non-variable
         faces and Type 1 fonts

A face is considered variable iff the fvar table is present. CFF2 outlines without fvar are not "variable" by this definition (they may carry variation data but no user-facing axes).

Instance Method Summary collapse

Instance Method Details

#extract(context) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/fontisan/audit/extractors/variation_detail.rb', line 17

def extract(context)
  font = context.font
  return { variation: nil } unless variable?(font)

  fvar = font.table(Constants::FVAR_TAG)
  return { variation: nil } unless fvar

  name_table = font.has_table?(Constants::NAME_TAG) ? font.table(Constants::NAME_TAG) : nil
  axis_tags = axis_tags_from(fvar)

  { variation: Models::Audit::VariationDetail.new(
    axes: build_axes(name_table, fvar),
    named_instances: build_instances(name_table, fvar, axis_tags),
    has_avar: font.has_table?(Constants::AVAR_TAG),
    has_cvar: font.has_table?(Constants::CVAR_TAG),
    has_hvar: font.has_table?(Constants::HVAR_TAG),
    has_vvar: font.has_table?(Constants::VVAR_TAG),
    has_mvar: font.has_table?(Constants::MVAR_TAG),
    has_gvar: font.has_table?(Constants::GVAR_TAG),
  ) }
end