Module: Fontisan::Ufo::Compile::MathTable
- Defined in:
- lib/fontisan/ufo/compile/math.rb
Overview
Builds the OpenType MATH table for mathematical formula layout.
The MATH table provides constants and glyph info for rendering equations in math-aware environments (Word, LibreOffice, TeX).
Layout:
Header (10 bytes):
uint16 version (= 1)
Offset32 mathConstantsOffset
Offset32 mathGlyphInfoOffset
Offset32 mathVariantsOffset
MathConstants: 57 layout constants (int16 + bool each)
MathGlyphInfo: italic correction, top accent, extension
MathVariants: glyph assembly for stretched delimiters
Constant Summary collapse
- VERSION =
1- HEADER_SIZE =
10
Class Method Summary collapse
-
.build(constants: nil, glyph_info: nil, variants: nil) ⇒ String?
MATH table bytes, or nil if no data.
Class Method Details
.build(constants: nil, glyph_info: nil, variants: nil) ⇒ String?
Returns MATH table bytes, or nil if no data.
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
# File 'lib/fontisan/ufo/compile/math.rb', line 31 def self.build(constants: nil, glyph_info: nil, variants: nil) return nil unless constants || glyph_info || variants constants_bytes = constants ? build_constants(constants) : nil glyph_info_bytes = glyph_info ? build_glyph_info(glyph_info) : nil variants_bytes = variants ? build_variants(variants) : nil constants_off = constants_bytes ? HEADER_SIZE : 0 gi_off = glyph_info_bytes ? constants_off + (constants_bytes&.bytesize || 0) : 0 if gi_off.zero? && glyph_info_bytes gi_off = HEADER_SIZE + (constants_bytes&.bytesize || 0) end variants_off = variants_bytes ? gi_off + (glyph_info_bytes&.bytesize || 0) : 0 if variants_off.zero? && variants_bytes variants_off = HEADER_SIZE + (constants_bytes&.bytesize || 0) + (glyph_info_bytes&.bytesize || 0) end io = +"" io << [0x00010000, constants_off, gi_off, variants_off].pack("Nnnn") io << constants_bytes if constants_bytes io << glyph_info_bytes if glyph_info_bytes io << variants_bytes if variants_bytes io end |