Skip to content

ConversionOptions

Type-safe conversion configuration.

Overview

Fontisan::ConversionOptions provides a type-safe way to configure font conversions.

Class Methods

Get recommended options for a conversion type.

ruby
options = Fontisan::ConversionOptions.recommended(from: :ttf, to: :otf)
# => #<Fontisan::ConversionOptions ...>

# Access settings
options.opening   # => { convert_curves: true, ... }
options.generating # => { hinting_mode: "auto", ... }

Parameters:

NameTypeDescription
fromSymbolSource format
toSymbolTarget format

from_preset(name)

Load options from a named preset.

ruby
# Web optimization preset
options = Fontisan::ConversionOptions.from_preset(:web_optimized)

# Type 1 to modern
options = Fontisan::ConversionOptions.from_preset(:type1_to_modern)

Available Presets:

PresetFromTo
type1_to_modernType 1OTF
modern_to_type1OTFType 1
web_optimizedOTFWOFF2
legacy_webOTFWOFF
archive_to_modernTTCOTF

new(**kwargs)

Create custom options.

ruby
options = Fontisan::ConversionOptions.new(
  from: :ttf,
  to: :otf,
  opening: {
    convert_curves: true,
    autohint: true
  },
  generating: {
    hinting_mode: 'auto',
    optimize_tables: true
  }
)

Instance Attributes

opening

Opening options control source font processing.

OptionTypeDefault
decompose_compositesBooleanfalse
convert_curvesBooleantrue
scale_to_1000Booleanfalse
scale_from_1000Booleanfalse
autohintBooleanfalse
generate_unicodeBooleanfalse
store_custom_tablesBooleantrue
store_native_hintingBooleanfalse
interpret_otBooleanfalse
read_all_recordsBooleanfalse
preserve_encodingStringnil

generating

Generating options control output font writing.

OptionTypeDefaultApplies to
write_pfmBooleanfalseType 1 output
write_afmBooleanfalseType 1 output
write_infBooleanfalseType 1 output
select_encoding_automaticallyBooleanfalseType 1 output
hinting_modeString'preserve'All outline conversions
decompose_on_outputBooleanfalseAll outline conversions
write_custom_tablesBooleantrueAll
optimize_tablesBooleanfalseAll
zlib_levelInteger (0–9)6WOFF only
uncompressedBooleanfalseWOFF only
compression_thresholdInteger (bytes)100WOFF only
brotli_qualityInteger (0–11)11WOFF2 only
transform_tablesBooleanfalseWOFF2 only
metadata_xmlStringnilWOFF only
private_dataStringnilWOFF only
preserve_metadataBooleantrueAll

Compression knobs are declared by each strategy (WoffWriter, Woff2Encoder) via the ConversionStrategy DSL. FormatConverter.validate_options_for_target! rejects knobs that don't apply to the requested target format.

Examples

Basic Conversion

ruby
options = Fontisan::ConversionOptions.recommended(from: :ttf, to: :otf)
converter = Fontisan::Converters::OutlineConverter.new
result = converter.convert(font, options: options)

Web Optimization

ruby
options = Fontisan::ConversionOptions.from_preset(:web_optimized)
Fontisan::FontWriter.write(font, 'output.woff2', options: options)

Custom Options

ruby
options = Fontisan::ConversionOptions.new(
  from: :ttf,
  to: :woff2,
  opening: { autohint: true },
  generating: {
    hinting_mode: 'auto',
    optimize_tables: true,
    brotli_quality: 11,
    transform_tables: true
  }
)

WOFF with Max zlib (Legacy Browser Reach)

ruby
options = Fontisan::ConversionOptions.new(
  from: :ttf,
  to: :woff,
  generating: { zlib_level: 9, preserve_metadata: true }
)

Fontisan is a [Ribose](https://open.ribose.com/) project