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



193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
# File 'lib/fontisan/converters/woff2_encoder.rb', line 193

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