Class: Fontisan::Converters::WoffWriter
- Inherits:
-
Object
- Object
- Fontisan::Converters::WoffWriter
- Includes:
- ConversionStrategy
- Defined in:
- lib/fontisan/converters/woff_writer.rb
Overview
WOFF font writer for creating WOFF files from TTF/OTF fonts
[‘WoffWriter`](lib/fontisan/converters/woff_writer.rb) handles conversion from TrueType/OpenType fonts to WOFF format using zlib compression. This implements the WOFF 1.0 specification for web font optimization.
**WOFF Format Features:**
-
Individual table compression with zlib
-
Optional metadata block (compressed XML)
-
Optional private data block
-
Proper header and table directory structure
-
Cross-platform compatibility
**Compression Strategy:**
-
Each table is compressed individually for optimal ratios
-
Tables smaller than compression threshold remain uncompressed
-
Metadata and private data are compressed when present
-
All data is properly aligned and padded
Constant Summary collapse
- WOFF_SIGNATURE =
WOFF signature constant
0x774F4646- WOFF_VERSION_MAJOR =
WOFF version 1.0
1- WOFF_VERSION_MINOR =
0- DEFAULT_COMPRESSION_LEVEL =
Default compression settings
6- DEFAULT_COMPRESSION_THRESHOLD =
bytes - don’t compress smaller tables
100
Instance Attribute Summary collapse
-
#compression_level ⇒ Object
Compression level (0-9, where 9 is maximum).
-
#compression_threshold ⇒ Object
Minimum table size to compress (bytes).
-
#metadata_xml ⇒ Object
Optional metadata XML.
-
#private_data ⇒ Object
Optional private data.
Instance Method Summary collapse
-
#convert(font, options = {}) ⇒ String
Convert font to WOFF format.
-
#initialize(options = {}) ⇒ WoffWriter
constructor
Initialize writer with compression options.
-
#supported_conversions ⇒ Array<Array<Symbol>>
Get supported conversions.
-
#write_font(font, metadata: nil, private_data: nil) ⇒ String
Write font data to WOFF format.
Methods included from ConversionStrategy
Constructor Details
#initialize(options = {}) ⇒ WoffWriter
Initialize writer with compression options
72 73 74 75 76 77 78 79 |
# File 'lib/fontisan/converters/woff_writer.rb', line 72 def initialize( = {}) @compression_level = [:compression_level] || DEFAULT_COMPRESSION_LEVEL @compression_threshold = [:compression_threshold] || DEFAULT_COMPRESSION_THRESHOLD @metadata_xml = [:metadata_xml] @private_data = [:private_data] validate_compression_level! end |
Instance Attribute Details
#compression_level ⇒ Object
Compression level (0-9, where 9 is maximum)
54 55 56 |
# File 'lib/fontisan/converters/woff_writer.rb', line 54 def compression_level @compression_level end |
#compression_threshold ⇒ Object
Minimum table size to compress (bytes)
57 58 59 |
# File 'lib/fontisan/converters/woff_writer.rb', line 57 def compression_threshold @compression_threshold end |
#metadata_xml ⇒ Object
Optional metadata XML
60 61 62 |
# File 'lib/fontisan/converters/woff_writer.rb', line 60 def @metadata_xml end |
#private_data ⇒ Object
Optional private data
63 64 65 |
# File 'lib/fontisan/converters/woff_writer.rb', line 63 def private_data @private_data end |
Instance Method Details
#convert(font, options = {}) ⇒ String
Convert font to WOFF format
87 88 89 90 91 92 93 94 95 |
# File 'lib/fontisan/converters/woff_writer.rb', line 87 def convert(font, = {}) validate_font(font) # Override instance options with per-conversion options = [:metadata_xml] || @metadata_xml private_data = [:private_data] || @private_data write_font(font, metadata: , private_data: private_data) end |
#supported_conversions ⇒ Array<Array<Symbol>>
Get supported conversions
100 101 102 103 104 105 |
# File 'lib/fontisan/converters/woff_writer.rb', line 100 def supported_conversions [ %i[ttf woff], %i[otf woff], ] end |
#write_font(font, metadata: nil, private_data: nil) ⇒ String
Write font data to WOFF format
113 114 115 116 117 118 119 120 121 122 |
# File 'lib/fontisan/converters/woff_writer.rb', line 113 def write_font(font, metadata: nil, private_data: nil) # Collect all table data from font tables_data = collect_tables_data(font) # Compress tables compressed_tables = compress_tables(tables_data) # Build WOFF file build_woff_file(compressed_tables, font, , private_data) end |