Class: Fontisan::TrueTypeCollection
- Inherits:
-
BaseCollection
- Object
- BinData::Record
- BaseCollection
- Fontisan::TrueTypeCollection
- Defined in:
- lib/fontisan/true_type_collection.rb
Overview
TrueType Collection domain object
Represents a complete TrueType Collection file. Inherits all shared functionality from BaseCollection and implements TTC-specific behavior.
Class Method Summary collapse
-
.collection_format ⇒ String
Get the collection format identifier.
-
.font_class ⇒ Class
Get the font class for TrueType collections.
Instance Method Summary collapse
-
#extract_fonts(io) ⇒ Array<TrueTypeFont>
Extract fonts as TrueTypeFont objects.
-
#font(index, io, mode: LoadingModes::FULL) ⇒ TrueTypeFont?
Get a single font from the collection.
-
#format ⇒ Symbol
High-level pipeline format identifier.
-
#list_fonts(io) ⇒ CollectionListInfo
List all fonts in the collection with basic metadata.
Methods inherited from BaseCollection
#collection?, #collection_info, #font_count, from_file, #outline_type, #table_names, #valid?, #variation_type, #version, #version_string
Methods included from Collection::SharedLogic
#calculate_table_sharing_for_fonts
Class Method Details
.collection_format ⇒ String
Get the collection format identifier
32 33 34 |
# File 'lib/fontisan/true_type_collection.rb', line 32 def self.collection_format "TTC" end |
.font_class ⇒ Class
Get the font class for TrueType collections
25 26 27 |
# File 'lib/fontisan/true_type_collection.rb', line 25 def self.font_class TrueTypeFont end |
Instance Method Details
#extract_fonts(io) ⇒ Array<TrueTypeFont>
Extract fonts as TrueTypeFont objects
Reads each font from the TTC file and returns them as TrueTypeFont objects. Uses the base class from_collection method.
57 58 59 60 61 |
# File 'lib/fontisan/true_type_collection.rb', line 57 def extract_fonts(io) font_offsets.map do |offset| TrueTypeFont.from_collection(io, offset) end end |
#font(index, io, mode: LoadingModes::FULL) ⇒ TrueTypeFont?
Get a single font from the collection
Uses the base class from_collection method.
44 45 46 47 48 |
# File 'lib/fontisan/true_type_collection.rb', line 44 def font(index, io, mode: LoadingModes::FULL) return nil if index >= num_fonts TrueTypeFont.from_collection(io, font_offsets[index], mode: mode) end |
#format ⇒ Symbol
High-level pipeline format identifier. Owned by the collection class so the conversion pipeline can dispatch without case statements (OCP).
20 |
# File 'lib/fontisan/true_type_collection.rb', line 20 def format = :ttc |
#list_fonts(io) ⇒ CollectionListInfo
List all fonts in the collection with basic metadata
Uses the base class from_collection method.
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/fontisan/true_type_collection.rb', line 69 def list_fonts(io) fonts = font_offsets.map.with_index do |offset, index| font = TrueTypeFont.from_collection(io, offset) # Extract basic font info name_table = font.table("name") post_table = font.table("post") family_name = name_table&.english_name(Tables::Name::FAMILY) || "Unknown" subfamily_name = name_table&.english_name(Tables::Name::SUBFAMILY) || "Regular" postscript_name = name_table&.english_name(Tables::Name::POSTSCRIPT_NAME) || "Unknown" # Determine font format sfnt = font.header.sfnt_version font_format = case sfnt when 0x00010000, 0x74727565 # 0x74727565 = 'true' "TrueType" when 0x4F54544F # 'OTTO' "OpenType" else "Unknown" end num_glyphs = post_table&.glyph_names&.length || 0 num_tables = font.table_names.length Models::CollectionFontSummary.new( index: index, family_name: family_name, subfamily_name: subfamily_name, postscript_name: postscript_name, font_format: font_format, num_glyphs: num_glyphs, num_tables: num_tables, ) end Models::CollectionListInfo.new( collection_path: nil, # Will be set by command num_fonts: num_fonts, fonts: fonts, ) end |