Module: Fontisan::Converters::Woff2Encoder::Woff2FontMemoryLoader

Included in:
Fontisan::Converters::Woff2Encoder
Defined in:
lib/fontisan/converters/woff2_encoder.rb

Overview

Helper method to load WOFF2 from StringIO

This is added to Woff2Font to support in-memory validation

Class Method Summary collapse

Class Method Details

.from_file_io(io, path_for_report) ⇒ Object



169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
# File 'lib/fontisan/converters/woff2_encoder.rb', line 169

def self.from_file_io(io, path_for_report)
  io.rewind

  woff2 = Woff2Font.new
  woff2.io_source = Woff2Font::IOSource.new(path_for_report)

  # Read header
  woff2.header = Woff2::Woff2Header.read(io)

  # Validate signature
  unless woff2.header.signature == Woff2::Woff2Header::SIGNATURE
    raise InvalidFontError,
          "Invalid WOFF2 signature: expected 0x#{Woff2::Woff2Header::SIGNATURE.to_s(16)}, " \
          "got 0x#{woff2.header.signature.to_i.to_s(16)}"
  end

  # Read table directory
  woff2.table_entries = Woff2Font.read_table_directory_from_io(io,
                                                               woff2.header)

  # Decompress tables
  woff2.decompressed_tables = Woff2Font.decompress_tables(io, woff2.header,
                                                          woff2.table_entries)

  # Apply transformations
  Woff2Font.apply_transformations!(woff2.table_entries,
                                   woff2.decompressed_tables)

  woff2
end