A TrueType font file contains data, in table format, that comprises an outline font.
This page hosts a formal specification of TrueType Font File using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.
// Code generated by kaitai-struct-compiler from a .ksy source file. DO NOT EDIT.
import (
"github.com/kaitai-io/kaitai_struct_go_runtime/kaitai"
"io"
"golang.org/x/text/encoding/unicode"
"bytes"
)
/**
* A TrueType font file contains data, in table format, that comprises
* an outline font.
* @see <a href="https://web.archive.org/web/20160410081432/https://www.microsoft.com/typography/tt/ttf_spec/ttch02.doc">Source</a>
*/
type Ttf struct {
OffsetTable *Ttf_OffsetTable
DirectoryTable []*Ttf_DirTableEntry
_io *kaitai.Stream
_root *Ttf
_parent interface{}
}
func NewTtf() *Ttf {
return &Ttf{
}
}
func (this *Ttf) Read(io *kaitai.Stream, parent interface{}, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp1 := NewTtf_OffsetTable()
err = tmp1.Read(this._io, this, this._root)
if err != nil {
return err
}
this.OffsetTable = tmp1
for i := 0; i < int(this.OffsetTable.NumTables); i++ {
_ = i
tmp2 := NewTtf_DirTableEntry()
err = tmp2.Read(this._io, this, this._root)
if err != nil {
return err
}
this.DirectoryTable = append(this.DirectoryTable, tmp2)
}
return err
}
type Ttf_Post struct {
Format *Ttf_Fixed
ItalicAngle *Ttf_Fixed
UnderlinePosition int16
UnderlineThichness int16
IsFixedPitch uint32
MinMemType42 uint32
MaxMemType42 uint32
MinMemType1 uint32
MaxMemType1 uint32
Format20 *Ttf_Post_Format20
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Post() *Ttf_Post {
return &Ttf_Post{
}
}
func (this *Ttf_Post) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp3 := NewTtf_Fixed()
err = tmp3.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Format = tmp3
tmp4 := NewTtf_Fixed()
err = tmp4.Read(this._io, this, this._root)
if err != nil {
return err
}
this.ItalicAngle = tmp4
tmp5, err := this._io.ReadS2be()
if err != nil {
return err
}
this.UnderlinePosition = int16(tmp5)
tmp6, err := this._io.ReadS2be()
if err != nil {
return err
}
this.UnderlineThichness = int16(tmp6)
tmp7, err := this._io.ReadU4be()
if err != nil {
return err
}
this.IsFixedPitch = uint32(tmp7)
tmp8, err := this._io.ReadU4be()
if err != nil {
return err
}
this.MinMemType42 = uint32(tmp8)
tmp9, err := this._io.ReadU4be()
if err != nil {
return err
}
this.MaxMemType42 = uint32(tmp9)
tmp10, err := this._io.ReadU4be()
if err != nil {
return err
}
this.MinMemType1 = uint32(tmp10)
tmp11, err := this._io.ReadU4be()
if err != nil {
return err
}
this.MaxMemType1 = uint32(tmp11)
if ( ((this.Format.Major == 2) && (this.Format.Minor == 0)) ) {
tmp12 := NewTtf_Post_Format20()
err = tmp12.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Format20 = tmp12
}
return err
}
type Ttf_Post_Format20 struct {
NumberOfGlyphs uint16
GlyphNameIndex []uint16
GlyphNames []*Ttf_Post_Format20_PascalString
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Post
}
func NewTtf_Post_Format20() *Ttf_Post_Format20 {
return &Ttf_Post_Format20{
}
}
func (this *Ttf_Post_Format20) Read(io *kaitai.Stream, parent *Ttf_Post, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp13, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NumberOfGlyphs = uint16(tmp13)
for i := 0; i < int(this.NumberOfGlyphs); i++ {
_ = i
tmp14, err := this._io.ReadU2be()
if err != nil {
return err
}
this.GlyphNameIndex = append(this.GlyphNameIndex, tmp14)
}
for i := 1;; i++ {
tmp15 := NewTtf_Post_Format20_PascalString()
err = tmp15.Read(this._io, this, this._root)
if err != nil {
return err
}
_it := tmp15
this.GlyphNames = append(this.GlyphNames, _it)
tmp16, err := this._io.EOF()
if err != nil {
return err
}
if ((_it.Length == 0) || (tmp16)) {
break
}
}
return err
}
type Ttf_Post_Format20_PascalString struct {
Length uint8
Value string
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Post_Format20
}
func NewTtf_Post_Format20_PascalString() *Ttf_Post_Format20_PascalString {
return &Ttf_Post_Format20_PascalString{
}
}
func (this *Ttf_Post_Format20_PascalString) Read(io *kaitai.Stream, parent *Ttf_Post_Format20, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp17, err := this._io.ReadU1()
if err != nil {
return err
}
this.Length = tmp17
if (this.Length != 0) {
tmp18, err := this._io.ReadBytes(int(this.Length))
if err != nil {
return err
}
tmp18 = tmp18
this.Value = string(tmp18)
}
return err
}
/**
* Name table is meant to include human-readable string metadata
* that describes font: name of the font, its styles, copyright &
* trademark notices, vendor and designer info, etc.
*
* The table includes a list of "name records", each of which
* corresponds to a single metadata entry.
* @see <a href="https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6name.html">Source</a>
*/
type Ttf_Name_Platforms int
const (
Ttf_Name_Platforms__Unicode Ttf_Name_Platforms = 0
Ttf_Name_Platforms__Macintosh Ttf_Name_Platforms = 1
Ttf_Name_Platforms__Reserved2 Ttf_Name_Platforms = 2
Ttf_Name_Platforms__Microsoft Ttf_Name_Platforms = 3
)
type Ttf_Name_Names int
const (
Ttf_Name_Names__Copyright Ttf_Name_Names = 0
Ttf_Name_Names__FontFamily Ttf_Name_Names = 1
Ttf_Name_Names__FontSubfamily Ttf_Name_Names = 2
Ttf_Name_Names__UniqueSubfamilyId Ttf_Name_Names = 3
Ttf_Name_Names__FullFontName Ttf_Name_Names = 4
Ttf_Name_Names__NameTableVersion Ttf_Name_Names = 5
Ttf_Name_Names__PostscriptFontName Ttf_Name_Names = 6
Ttf_Name_Names__Trademark Ttf_Name_Names = 7
Ttf_Name_Names__Manufacturer Ttf_Name_Names = 8
Ttf_Name_Names__Designer Ttf_Name_Names = 9
Ttf_Name_Names__Description Ttf_Name_Names = 10
Ttf_Name_Names__UrlVendor Ttf_Name_Names = 11
Ttf_Name_Names__UrlDesigner Ttf_Name_Names = 12
Ttf_Name_Names__License Ttf_Name_Names = 13
Ttf_Name_Names__UrlLicense Ttf_Name_Names = 14
Ttf_Name_Names__Reserved15 Ttf_Name_Names = 15
Ttf_Name_Names__PreferredFamily Ttf_Name_Names = 16
Ttf_Name_Names__PreferredSubfamily Ttf_Name_Names = 17
Ttf_Name_Names__CompatibleFullName Ttf_Name_Names = 18
Ttf_Name_Names__SampleText Ttf_Name_Names = 19
)
type Ttf_Name struct {
FormatSelector uint16
NumNameRecords uint16
OfsStrings uint16
NameRecords []*Ttf_Name_NameRecord
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Name() *Ttf_Name {
return &Ttf_Name{
}
}
func (this *Ttf_Name) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp19, err := this._io.ReadU2be()
if err != nil {
return err
}
this.FormatSelector = uint16(tmp19)
tmp20, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NumNameRecords = uint16(tmp20)
tmp21, err := this._io.ReadU2be()
if err != nil {
return err
}
this.OfsStrings = uint16(tmp21)
for i := 0; i < int(this.NumNameRecords); i++ {
_ = i
tmp22 := NewTtf_Name_NameRecord()
err = tmp22.Read(this._io, this, this._root)
if err != nil {
return err
}
this.NameRecords = append(this.NameRecords, tmp22)
}
return err
}
type Ttf_Name_NameRecord struct {
PlatformId Ttf_Name_Platforms
EncodingId uint16
LanguageId uint16
NameId Ttf_Name_Names
LenStr uint16
OfsStr uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Name
_f_asciiValue bool
asciiValue string
_f_unicodeValue bool
unicodeValue string
}
func NewTtf_Name_NameRecord() *Ttf_Name_NameRecord {
return &Ttf_Name_NameRecord{
}
}
func (this *Ttf_Name_NameRecord) Read(io *kaitai.Stream, parent *Ttf_Name, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp23, err := this._io.ReadU2be()
if err != nil {
return err
}
this.PlatformId = Ttf_Name_Platforms(tmp23)
tmp24, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EncodingId = uint16(tmp24)
tmp25, err := this._io.ReadU2be()
if err != nil {
return err
}
this.LanguageId = uint16(tmp25)
tmp26, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NameId = Ttf_Name_Names(tmp26)
tmp27, err := this._io.ReadU2be()
if err != nil {
return err
}
this.LenStr = uint16(tmp27)
tmp28, err := this._io.ReadU2be()
if err != nil {
return err
}
this.OfsStr = uint16(tmp28)
return err
}
func (this *Ttf_Name_NameRecord) AsciiValue() (v string, err error) {
if (this._f_asciiValue) {
return this.asciiValue, nil
}
thisIo := this._parent._io
_pos, err := thisIo.Pos()
if err != nil {
return "", err
}
_, err = thisIo.Seek(int64((this._parent.OfsStrings + this.OfsStr)), io.SeekStart)
if err != nil {
return "", err
}
tmp29, err := thisIo.ReadBytes(int(this.LenStr))
if err != nil {
return "", err
}
tmp29 = tmp29
this.asciiValue = string(tmp29)
_, err = thisIo.Seek(_pos, io.SeekStart)
if err != nil {
return "", err
}
this._f_asciiValue = true
this._f_asciiValue = true
return this.asciiValue, nil
}
func (this *Ttf_Name_NameRecord) UnicodeValue() (v string, err error) {
if (this._f_unicodeValue) {
return this.unicodeValue, nil
}
thisIo := this._parent._io
_pos, err := thisIo.Pos()
if err != nil {
return "", err
}
_, err = thisIo.Seek(int64((this._parent.OfsStrings + this.OfsStr)), io.SeekStart)
if err != nil {
return "", err
}
tmp30, err := thisIo.ReadBytes(int(this.LenStr))
if err != nil {
return "", err
}
tmp30 = tmp30
tmp31, err := kaitai.BytesToStr(tmp30, unicode.UTF16(unicode.BigEndian, unicode.IgnoreBOM).NewDecoder())
if err != nil {
return "", err
}
this.unicodeValue = tmp31
_, err = thisIo.Seek(_pos, io.SeekStart)
if err != nil {
return "", err
}
this._f_unicodeValue = true
this._f_unicodeValue = true
return this.unicodeValue, nil
}
type Ttf_Head_Flags int
const (
Ttf_Head_Flags__BaselineAtY0 Ttf_Head_Flags = 1
Ttf_Head_Flags__LeftSidebearingAtX0 Ttf_Head_Flags = 2
Ttf_Head_Flags__FlagDependOnPointSize Ttf_Head_Flags = 4
Ttf_Head_Flags__FlagForcePpem Ttf_Head_Flags = 8
Ttf_Head_Flags__FlagMayAdvanceWidth Ttf_Head_Flags = 16
)
type Ttf_Head_FontDirectionHint int
const (
Ttf_Head_FontDirectionHint__FullyMixedDirectionalGlyphs Ttf_Head_FontDirectionHint = 0
Ttf_Head_FontDirectionHint__OnlyStronglyLeftToRight Ttf_Head_FontDirectionHint = 1
Ttf_Head_FontDirectionHint__StronglyLeftToRightAndNeutrals Ttf_Head_FontDirectionHint = 2
)
type Ttf_Head struct {
Version *Ttf_Fixed
FontRevision *Ttf_Fixed
ChecksumAdjustment uint32
MagicNumber []byte
Flags Ttf_Head_Flags
UnitsPerEm uint16
Created uint64
Modified uint64
XMin int16
YMin int16
XMax int16
YMax int16
MacStyle uint16
LowestRecPpem uint16
FontDirectionHint Ttf_Head_FontDirectionHint
IndexToLocFormat int16
GlyphDataFormat int16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Head() *Ttf_Head {
return &Ttf_Head{
}
}
func (this *Ttf_Head) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp32 := NewTtf_Fixed()
err = tmp32.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Version = tmp32
tmp33 := NewTtf_Fixed()
err = tmp33.Read(this._io, this, this._root)
if err != nil {
return err
}
this.FontRevision = tmp33
tmp34, err := this._io.ReadU4be()
if err != nil {
return err
}
this.ChecksumAdjustment = uint32(tmp34)
tmp35, err := this._io.ReadBytes(int(4))
if err != nil {
return err
}
tmp35 = tmp35
this.MagicNumber = tmp35
if !(bytes.Equal(this.MagicNumber, []uint8{95, 15, 60, 245})) {
return kaitai.NewValidationNotEqualError([]uint8{95, 15, 60, 245}, this.MagicNumber, this._io, "/types/head/seq/3")
}
tmp36, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Flags = Ttf_Head_Flags(tmp36)
tmp37, err := this._io.ReadU2be()
if err != nil {
return err
}
this.UnitsPerEm = uint16(tmp37)
tmp38, err := this._io.ReadU8be()
if err != nil {
return err
}
this.Created = uint64(tmp38)
tmp39, err := this._io.ReadU8be()
if err != nil {
return err
}
this.Modified = uint64(tmp39)
tmp40, err := this._io.ReadS2be()
if err != nil {
return err
}
this.XMin = int16(tmp40)
tmp41, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YMin = int16(tmp41)
tmp42, err := this._io.ReadS2be()
if err != nil {
return err
}
this.XMax = int16(tmp42)
tmp43, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YMax = int16(tmp43)
tmp44, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MacStyle = uint16(tmp44)
tmp45, err := this._io.ReadU2be()
if err != nil {
return err
}
this.LowestRecPpem = uint16(tmp45)
tmp46, err := this._io.ReadS2be()
if err != nil {
return err
}
this.FontDirectionHint = Ttf_Head_FontDirectionHint(tmp46)
tmp47, err := this._io.ReadS2be()
if err != nil {
return err
}
this.IndexToLocFormat = int16(tmp47)
tmp48, err := this._io.ReadS2be()
if err != nil {
return err
}
this.GlyphDataFormat = int16(tmp48)
return err
}
type Ttf_Prep struct {
Instructions []byte
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Prep() *Ttf_Prep {
return &Ttf_Prep{
}
}
func (this *Ttf_Prep) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp49, err := this._io.ReadBytesFull()
if err != nil {
return err
}
tmp49 = tmp49
this.Instructions = tmp49
return err
}
type Ttf_Hhea struct {
Version *Ttf_Fixed
Ascender int16
Descender int16
LineGap int16
AdvanceWidthMax uint16
MinLeftSideBearing int16
MinRightSideBearing int16
XMaxExtend int16
CaretSlopeRise int16
CaretSlopeRun int16
Reserved []byte
MetricDataFormat int16
NumberOfHmetrics uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Hhea() *Ttf_Hhea {
return &Ttf_Hhea{
}
}
func (this *Ttf_Hhea) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp50 := NewTtf_Fixed()
err = tmp50.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Version = tmp50
tmp51, err := this._io.ReadS2be()
if err != nil {
return err
}
this.Ascender = int16(tmp51)
tmp52, err := this._io.ReadS2be()
if err != nil {
return err
}
this.Descender = int16(tmp52)
tmp53, err := this._io.ReadS2be()
if err != nil {
return err
}
this.LineGap = int16(tmp53)
tmp54, err := this._io.ReadU2be()
if err != nil {
return err
}
this.AdvanceWidthMax = uint16(tmp54)
tmp55, err := this._io.ReadS2be()
if err != nil {
return err
}
this.MinLeftSideBearing = int16(tmp55)
tmp56, err := this._io.ReadS2be()
if err != nil {
return err
}
this.MinRightSideBearing = int16(tmp56)
tmp57, err := this._io.ReadS2be()
if err != nil {
return err
}
this.XMaxExtend = int16(tmp57)
tmp58, err := this._io.ReadS2be()
if err != nil {
return err
}
this.CaretSlopeRise = int16(tmp58)
tmp59, err := this._io.ReadS2be()
if err != nil {
return err
}
this.CaretSlopeRun = int16(tmp59)
tmp60, err := this._io.ReadBytes(int(10))
if err != nil {
return err
}
tmp60 = tmp60
this.Reserved = tmp60
if !(bytes.Equal(this.Reserved, []uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0})) {
return kaitai.NewValidationNotEqualError([]uint8{0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, this.Reserved, this._io, "/types/hhea/seq/10")
}
tmp61, err := this._io.ReadS2be()
if err != nil {
return err
}
this.MetricDataFormat = int16(tmp61)
tmp62, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NumberOfHmetrics = uint16(tmp62)
return err
}
/**
* Typographic ascent
*/
/**
* Typographic descent
*/
/**
* Typographic line gap. Negative LineGap values are treated as zero in Windows 3.1, System 6, and System 7.
*/
/**
* Maximum advance width value in `hmtx` table.
*/
/**
* Minimum left sidebearing value in `hmtx` table.
*/
/**
* Minimum right sidebearing value; calculated as Min(aw - lsb - (xMax - xMin)).
*/
/**
* Max(lsb + (xMax - xMin)).
*/
type Ttf_Fpgm struct {
Instructions []byte
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Fpgm() *Ttf_Fpgm {
return &Ttf_Fpgm{
}
}
func (this *Ttf_Fpgm) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp63, err := this._io.ReadBytesFull()
if err != nil {
return err
}
tmp63 = tmp63
this.Instructions = tmp63
return err
}
type Ttf_Kern struct {
Version uint16
SubtableCount uint16
Subtables []*Ttf_Kern_Subtable
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Kern() *Ttf_Kern {
return &Ttf_Kern{
}
}
func (this *Ttf_Kern) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp64, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Version = uint16(tmp64)
tmp65, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SubtableCount = uint16(tmp65)
for i := 0; i < int(this.SubtableCount); i++ {
_ = i
tmp66 := NewTtf_Kern_Subtable()
err = tmp66.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Subtables = append(this.Subtables, tmp66)
}
return err
}
type Ttf_Kern_Subtable struct {
Version uint16
Length uint16
Format uint8
Reserved uint64
IsOverride bool
IsCrossStream bool
IsMinimum bool
IsHorizontal bool
Format0 *Ttf_Kern_Subtable_Format0
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Kern
}
func NewTtf_Kern_Subtable() *Ttf_Kern_Subtable {
return &Ttf_Kern_Subtable{
}
}
func (this *Ttf_Kern_Subtable) Read(io *kaitai.Stream, parent *Ttf_Kern, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp67, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Version = uint16(tmp67)
tmp68, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Length = uint16(tmp68)
tmp69, err := this._io.ReadU1()
if err != nil {
return err
}
this.Format = tmp69
tmp70, err := this._io.ReadBitsIntBe(4)
if err != nil {
return err
}
this.Reserved = tmp70
tmp71, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.IsOverride = tmp71 != 0
tmp72, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.IsCrossStream = tmp72 != 0
tmp73, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.IsMinimum = tmp73 != 0
tmp74, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.IsHorizontal = tmp74 != 0
this._io.AlignToByte()
if (this.Format == 0) {
tmp75 := NewTtf_Kern_Subtable_Format0()
err = tmp75.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Format0 = tmp75
}
return err
}
type Ttf_Kern_Subtable_Format0 struct {
PairCount uint16
SearchRange uint16
EntrySelector uint16
RangeShift uint16
KerningPairs []*Ttf_Kern_Subtable_Format0_KerningPair
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Kern_Subtable
}
func NewTtf_Kern_Subtable_Format0() *Ttf_Kern_Subtable_Format0 {
return &Ttf_Kern_Subtable_Format0{
}
}
func (this *Ttf_Kern_Subtable_Format0) Read(io *kaitai.Stream, parent *Ttf_Kern_Subtable, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp76, err := this._io.ReadU2be()
if err != nil {
return err
}
this.PairCount = uint16(tmp76)
tmp77, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SearchRange = uint16(tmp77)
tmp78, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EntrySelector = uint16(tmp78)
tmp79, err := this._io.ReadU2be()
if err != nil {
return err
}
this.RangeShift = uint16(tmp79)
for i := 0; i < int(this.PairCount); i++ {
_ = i
tmp80 := NewTtf_Kern_Subtable_Format0_KerningPair()
err = tmp80.Read(this._io, this, this._root)
if err != nil {
return err
}
this.KerningPairs = append(this.KerningPairs, tmp80)
}
return err
}
type Ttf_Kern_Subtable_Format0_KerningPair struct {
Left uint16
Right uint16
Value int16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Kern_Subtable_Format0
}
func NewTtf_Kern_Subtable_Format0_KerningPair() *Ttf_Kern_Subtable_Format0_KerningPair {
return &Ttf_Kern_Subtable_Format0_KerningPair{
}
}
func (this *Ttf_Kern_Subtable_Format0_KerningPair) Read(io *kaitai.Stream, parent *Ttf_Kern_Subtable_Format0, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp81, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Left = uint16(tmp81)
tmp82, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Right = uint16(tmp82)
tmp83, err := this._io.ReadS2be()
if err != nil {
return err
}
this.Value = int16(tmp83)
return err
}
type Ttf_DirTableEntry struct {
Tag string
Checksum uint32
Offset uint32
Length uint32
_io *kaitai.Stream
_root *Ttf
_parent *Ttf
_raw_value []byte
_f_value bool
value interface{}
}
func NewTtf_DirTableEntry() *Ttf_DirTableEntry {
return &Ttf_DirTableEntry{
}
}
func (this *Ttf_DirTableEntry) Read(io *kaitai.Stream, parent *Ttf, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp84, err := this._io.ReadBytes(int(4))
if err != nil {
return err
}
tmp84 = tmp84
this.Tag = string(tmp84)
tmp85, err := this._io.ReadU4be()
if err != nil {
return err
}
this.Checksum = uint32(tmp85)
tmp86, err := this._io.ReadU4be()
if err != nil {
return err
}
this.Offset = uint32(tmp86)
tmp87, err := this._io.ReadU4be()
if err != nil {
return err
}
this.Length = uint32(tmp87)
return err
}
func (this *Ttf_DirTableEntry) Value() (v interface{}, err error) {
if (this._f_value) {
return this.value, nil
}
thisIo := this._root._io
_pos, err := thisIo.Pos()
if err != nil {
return nil, err
}
_, err = thisIo.Seek(int64(this.Offset), io.SeekStart)
if err != nil {
return nil, err
}
switch (this.Tag) {
case "head":
tmp88, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp88 = tmp88
this._raw_value = tmp88
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp89 := NewTtf_Head()
err = tmp89.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp89
case "cvt ":
tmp90, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp90 = tmp90
this._raw_value = tmp90
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp91 := NewTtf_Cvt()
err = tmp91.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp91
case "prep":
tmp92, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp92 = tmp92
this._raw_value = tmp92
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp93 := NewTtf_Prep()
err = tmp93.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp93
case "kern":
tmp94, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp94 = tmp94
this._raw_value = tmp94
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp95 := NewTtf_Kern()
err = tmp95.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp95
case "hhea":
tmp96, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp96 = tmp96
this._raw_value = tmp96
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp97 := NewTtf_Hhea()
err = tmp97.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp97
case "post":
tmp98, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp98 = tmp98
this._raw_value = tmp98
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp99 := NewTtf_Post()
err = tmp99.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp99
case "OS/2":
tmp100, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp100 = tmp100
this._raw_value = tmp100
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp101 := NewTtf_Os2()
err = tmp101.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp101
case "name":
tmp102, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp102 = tmp102
this._raw_value = tmp102
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp103 := NewTtf_Name()
err = tmp103.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp103
case "maxp":
tmp104, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp104 = tmp104
this._raw_value = tmp104
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp105 := NewTtf_Maxp()
err = tmp105.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp105
case "glyf":
tmp106, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp106 = tmp106
this._raw_value = tmp106
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp107 := NewTtf_Glyf()
err = tmp107.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp107
case "fpgm":
tmp108, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp108 = tmp108
this._raw_value = tmp108
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp109 := NewTtf_Fpgm()
err = tmp109.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp109
case "cmap":
tmp110, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp110 = tmp110
this._raw_value = tmp110
_io__raw_value := kaitai.NewStream(bytes.NewReader(this._raw_value))
tmp111 := NewTtf_Cmap()
err = tmp111.Read(_io__raw_value, this, this._root)
if err != nil {
return nil, err
}
this.value = tmp111
default:
tmp112, err := thisIo.ReadBytes(int(this.Length))
if err != nil {
return nil, err
}
tmp112 = tmp112
this._raw_value = tmp112
}
_, err = thisIo.Seek(_pos, io.SeekStart)
if err != nil {
return nil, err
}
this._f_value = true
this._f_value = true
return this.value, nil
}
/**
* The OS/2 table consists of a set of metrics that are required by Windows and OS/2.
*/
type Ttf_Os2_WeightClass int
const (
Ttf_Os2_WeightClass__Thin Ttf_Os2_WeightClass = 100
Ttf_Os2_WeightClass__ExtraLight Ttf_Os2_WeightClass = 200
Ttf_Os2_WeightClass__Light Ttf_Os2_WeightClass = 300
Ttf_Os2_WeightClass__Normal Ttf_Os2_WeightClass = 400
Ttf_Os2_WeightClass__Medium Ttf_Os2_WeightClass = 500
Ttf_Os2_WeightClass__SemiBold Ttf_Os2_WeightClass = 600
Ttf_Os2_WeightClass__Bold Ttf_Os2_WeightClass = 700
Ttf_Os2_WeightClass__ExtraBold Ttf_Os2_WeightClass = 800
Ttf_Os2_WeightClass__Black Ttf_Os2_WeightClass = 900
)
type Ttf_Os2_WidthClass int
const (
Ttf_Os2_WidthClass__UltraCondensed Ttf_Os2_WidthClass = 1
Ttf_Os2_WidthClass__ExtraCondensed Ttf_Os2_WidthClass = 2
Ttf_Os2_WidthClass__Condensed Ttf_Os2_WidthClass = 3
Ttf_Os2_WidthClass__SemiCondensed Ttf_Os2_WidthClass = 4
Ttf_Os2_WidthClass__Normal Ttf_Os2_WidthClass = 5
Ttf_Os2_WidthClass__SemiExpanded Ttf_Os2_WidthClass = 6
Ttf_Os2_WidthClass__Expanded Ttf_Os2_WidthClass = 7
Ttf_Os2_WidthClass__ExtraExpanded Ttf_Os2_WidthClass = 8
Ttf_Os2_WidthClass__UltraExpanded Ttf_Os2_WidthClass = 9
)
type Ttf_Os2_FsType int
const (
Ttf_Os2_FsType__RestrictedLicenseEmbedding Ttf_Os2_FsType = 2
Ttf_Os2_FsType__PreviewAndPrintEmbedding Ttf_Os2_FsType = 4
Ttf_Os2_FsType__EditableEmbedding Ttf_Os2_FsType = 8
)
type Ttf_Os2_FsSelection int
const (
Ttf_Os2_FsSelection__Italic Ttf_Os2_FsSelection = 1
Ttf_Os2_FsSelection__Underscore Ttf_Os2_FsSelection = 2
Ttf_Os2_FsSelection__Negative Ttf_Os2_FsSelection = 4
Ttf_Os2_FsSelection__Outlined Ttf_Os2_FsSelection = 8
Ttf_Os2_FsSelection__Strikeout Ttf_Os2_FsSelection = 16
Ttf_Os2_FsSelection__Bold Ttf_Os2_FsSelection = 32
Ttf_Os2_FsSelection__Regular Ttf_Os2_FsSelection = 64
)
type Ttf_Os2 struct {
Version uint16
XAvgCharWidth int16
WeightClass Ttf_Os2_WeightClass
WidthClass Ttf_Os2_WidthClass
FsType Ttf_Os2_FsType
YSubscriptXSize int16
YSubscriptYSize int16
YSubscriptXOffset int16
YSubscriptYOffset int16
YSuperscriptXSize int16
YSuperscriptYSize int16
YSuperscriptXOffset int16
YSuperscriptYOffset int16
YStrikeoutSize int16
YStrikeoutPosition int16
SFamilyClass int16
Panose *Ttf_Os2_Panose
UnicodeRange *Ttf_Os2_UnicodeRange
AchVendId string
Selection Ttf_Os2_FsSelection
FirstCharIndex uint16
LastCharIndex uint16
TypoAscender int16
TypoDescender int16
TypoLineGap int16
WinAscent uint16
WinDescent uint16
CodePageRange *Ttf_Os2_CodePageRange
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Os2() *Ttf_Os2 {
return &Ttf_Os2{
}
}
func (this *Ttf_Os2) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp113, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Version = uint16(tmp113)
tmp114, err := this._io.ReadS2be()
if err != nil {
return err
}
this.XAvgCharWidth = int16(tmp114)
tmp115, err := this._io.ReadU2be()
if err != nil {
return err
}
this.WeightClass = Ttf_Os2_WeightClass(tmp115)
tmp116, err := this._io.ReadU2be()
if err != nil {
return err
}
this.WidthClass = Ttf_Os2_WidthClass(tmp116)
tmp117, err := this._io.ReadS2be()
if err != nil {
return err
}
this.FsType = Ttf_Os2_FsType(tmp117)
tmp118, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSubscriptXSize = int16(tmp118)
tmp119, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSubscriptYSize = int16(tmp119)
tmp120, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSubscriptXOffset = int16(tmp120)
tmp121, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSubscriptYOffset = int16(tmp121)
tmp122, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSuperscriptXSize = int16(tmp122)
tmp123, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSuperscriptYSize = int16(tmp123)
tmp124, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSuperscriptXOffset = int16(tmp124)
tmp125, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YSuperscriptYOffset = int16(tmp125)
tmp126, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YStrikeoutSize = int16(tmp126)
tmp127, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YStrikeoutPosition = int16(tmp127)
tmp128, err := this._io.ReadS2be()
if err != nil {
return err
}
this.SFamilyClass = int16(tmp128)
tmp129 := NewTtf_Os2_Panose()
err = tmp129.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Panose = tmp129
tmp130 := NewTtf_Os2_UnicodeRange()
err = tmp130.Read(this._io, this, this._root)
if err != nil {
return err
}
this.UnicodeRange = tmp130
tmp131, err := this._io.ReadBytes(int(4))
if err != nil {
return err
}
tmp131 = tmp131
this.AchVendId = string(tmp131)
tmp132, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Selection = Ttf_Os2_FsSelection(tmp132)
tmp133, err := this._io.ReadU2be()
if err != nil {
return err
}
this.FirstCharIndex = uint16(tmp133)
tmp134, err := this._io.ReadU2be()
if err != nil {
return err
}
this.LastCharIndex = uint16(tmp134)
tmp135, err := this._io.ReadS2be()
if err != nil {
return err
}
this.TypoAscender = int16(tmp135)
tmp136, err := this._io.ReadS2be()
if err != nil {
return err
}
this.TypoDescender = int16(tmp136)
tmp137, err := this._io.ReadS2be()
if err != nil {
return err
}
this.TypoLineGap = int16(tmp137)
tmp138, err := this._io.ReadU2be()
if err != nil {
return err
}
this.WinAscent = uint16(tmp138)
tmp139, err := this._io.ReadU2be()
if err != nil {
return err
}
this.WinDescent = uint16(tmp139)
tmp140 := NewTtf_Os2_CodePageRange()
err = tmp140.Read(this._io, this, this._root)
if err != nil {
return err
}
this.CodePageRange = tmp140
return err
}
/**
* The version number for this OS/2 table.
*/
/**
* The Average Character Width parameter specifies the arithmetic average of the escapement (width) of all of the 26 lowercase letters a through z of the Latin alphabet and the space character. If any of the 26 lowercase letters are not present, this parameter should equal the weighted average of all glyphs in the font. For non-UGL (platform 3, encoding 0) fonts, use the unweighted average.
*/
/**
* Indicates the visual weight (degree of blackness or thickness of strokes) of the characters in the font.
*/
/**
* Indicates a relative change from the normal aspect ratio (width to height ratio) as specified by a font designer for the glyphs in a font.
*/
/**
* Indicates font embedding licensing rights for the font. Embeddable fonts may be stored in a document. When a document with embedded fonts is opened on a system that does not have the font installed (the remote system), the embedded font may be loaded for temporary (and in some cases, permanent) use on that system by an embedding-aware application. Embedding licensing rights are granted by the vendor of the font.
*/
/**
* The recommended horizontal size in font design units for subscripts for this font.
*/
/**
* The recommended vertical size in font design units for subscripts for this font.
*/
/**
* The recommended horizontal offset in font design untis for subscripts for this font.
*/
/**
* The recommended vertical offset in font design units from the baseline for subscripts for this font.
*/
/**
* The recommended horizontal size in font design units for superscripts for this font.
*/
/**
* The recommended vertical size in font design units for superscripts for this font.
*/
/**
* The recommended horizontal offset in font design units for superscripts for this font.
*/
/**
* The recommended vertical offset in font design units from the baseline for superscripts for this font.
*/
/**
* Width of the strikeout stroke in font design units.
*/
/**
* The position of the strikeout stroke relative to the baseline in font design units.
*/
/**
* This parameter is a classification of font-family design.
*/
/**
* The four character identifier for the vendor of the given type face.
*/
/**
* Contains information concerning the nature of the font patterns
*/
/**
* The minimum Unicode index (character code) in this font, according to the cmap subtable for platform ID 3 and encoding ID 0 or 1.
*/
/**
* The maximum Unicode index (character code) in this font, according to the cmap subtable for platform ID 3 and encoding ID 0 or 1.
*/
/**
* The typographic ascender for this font.
*/
/**
* The typographic descender for this font.
*/
/**
* The typographic line gap for this font.
*/
/**
* The ascender metric for Windows.
*/
/**
* The descender metric for Windows.
*/
/**
* This field is used to specify the code pages encompassed by the font file in the `cmap` subtable for platform 3, encoding ID 1 (Microsoft platform).
*/
type Ttf_Os2_Panose_Weight int
const (
Ttf_Os2_Panose_Weight__Any Ttf_Os2_Panose_Weight = 0
Ttf_Os2_Panose_Weight__NoFit Ttf_Os2_Panose_Weight = 1
Ttf_Os2_Panose_Weight__VeryLight Ttf_Os2_Panose_Weight = 2
Ttf_Os2_Panose_Weight__Light Ttf_Os2_Panose_Weight = 3
Ttf_Os2_Panose_Weight__Thin Ttf_Os2_Panose_Weight = 4
Ttf_Os2_Panose_Weight__Book Ttf_Os2_Panose_Weight = 5
Ttf_Os2_Panose_Weight__Medium Ttf_Os2_Panose_Weight = 6
Ttf_Os2_Panose_Weight__Demi Ttf_Os2_Panose_Weight = 7
Ttf_Os2_Panose_Weight__Bold Ttf_Os2_Panose_Weight = 8
Ttf_Os2_Panose_Weight__Heavy Ttf_Os2_Panose_Weight = 9
Ttf_Os2_Panose_Weight__Black Ttf_Os2_Panose_Weight = 10
Ttf_Os2_Panose_Weight__Nord Ttf_Os2_Panose_Weight = 11
)
type Ttf_Os2_Panose_Proportion int
const (
Ttf_Os2_Panose_Proportion__Any Ttf_Os2_Panose_Proportion = 0
Ttf_Os2_Panose_Proportion__NoFit Ttf_Os2_Panose_Proportion = 1
Ttf_Os2_Panose_Proportion__OldStyle Ttf_Os2_Panose_Proportion = 2
Ttf_Os2_Panose_Proportion__Modern Ttf_Os2_Panose_Proportion = 3
Ttf_Os2_Panose_Proportion__EvenWidth Ttf_Os2_Panose_Proportion = 4
Ttf_Os2_Panose_Proportion__Expanded Ttf_Os2_Panose_Proportion = 5
Ttf_Os2_Panose_Proportion__Condensed Ttf_Os2_Panose_Proportion = 6
Ttf_Os2_Panose_Proportion__VeryExpanded Ttf_Os2_Panose_Proportion = 7
Ttf_Os2_Panose_Proportion__VeryCondensed Ttf_Os2_Panose_Proportion = 8
Ttf_Os2_Panose_Proportion__Monospaced Ttf_Os2_Panose_Proportion = 9
)
type Ttf_Os2_Panose_FamilyKind int
const (
Ttf_Os2_Panose_FamilyKind__Any Ttf_Os2_Panose_FamilyKind = 0
Ttf_Os2_Panose_FamilyKind__NoFit Ttf_Os2_Panose_FamilyKind = 1
Ttf_Os2_Panose_FamilyKind__TextAndDisplay Ttf_Os2_Panose_FamilyKind = 2
Ttf_Os2_Panose_FamilyKind__Script Ttf_Os2_Panose_FamilyKind = 3
Ttf_Os2_Panose_FamilyKind__Decorative Ttf_Os2_Panose_FamilyKind = 4
Ttf_Os2_Panose_FamilyKind__Pictorial Ttf_Os2_Panose_FamilyKind = 5
)
type Ttf_Os2_Panose_LetterForm int
const (
Ttf_Os2_Panose_LetterForm__Any Ttf_Os2_Panose_LetterForm = 0
Ttf_Os2_Panose_LetterForm__NoFit Ttf_Os2_Panose_LetterForm = 1
Ttf_Os2_Panose_LetterForm__NormalContact Ttf_Os2_Panose_LetterForm = 2
Ttf_Os2_Panose_LetterForm__NormalWeighted Ttf_Os2_Panose_LetterForm = 3
Ttf_Os2_Panose_LetterForm__NormalBoxed Ttf_Os2_Panose_LetterForm = 4
Ttf_Os2_Panose_LetterForm__NormalFlattened Ttf_Os2_Panose_LetterForm = 5
Ttf_Os2_Panose_LetterForm__NormalRounded Ttf_Os2_Panose_LetterForm = 6
Ttf_Os2_Panose_LetterForm__NormalOffCenter Ttf_Os2_Panose_LetterForm = 7
Ttf_Os2_Panose_LetterForm__NormalSquare Ttf_Os2_Panose_LetterForm = 8
Ttf_Os2_Panose_LetterForm__ObliqueContact Ttf_Os2_Panose_LetterForm = 9
Ttf_Os2_Panose_LetterForm__ObliqueWeighted Ttf_Os2_Panose_LetterForm = 10
Ttf_Os2_Panose_LetterForm__ObliqueBoxed Ttf_Os2_Panose_LetterForm = 11
Ttf_Os2_Panose_LetterForm__ObliqueFlattened Ttf_Os2_Panose_LetterForm = 12
Ttf_Os2_Panose_LetterForm__ObliqueRounded Ttf_Os2_Panose_LetterForm = 13
Ttf_Os2_Panose_LetterForm__ObliqueOffCenter Ttf_Os2_Panose_LetterForm = 14
Ttf_Os2_Panose_LetterForm__ObliqueSquare Ttf_Os2_Panose_LetterForm = 15
)
type Ttf_Os2_Panose_SerifStyle int
const (
Ttf_Os2_Panose_SerifStyle__Any Ttf_Os2_Panose_SerifStyle = 0
Ttf_Os2_Panose_SerifStyle__NoFit Ttf_Os2_Panose_SerifStyle = 1
Ttf_Os2_Panose_SerifStyle__Cove Ttf_Os2_Panose_SerifStyle = 2
Ttf_Os2_Panose_SerifStyle__ObtuseCove Ttf_Os2_Panose_SerifStyle = 3
Ttf_Os2_Panose_SerifStyle__SquareCove Ttf_Os2_Panose_SerifStyle = 4
Ttf_Os2_Panose_SerifStyle__ObtuseSquareCove Ttf_Os2_Panose_SerifStyle = 5
Ttf_Os2_Panose_SerifStyle__Square Ttf_Os2_Panose_SerifStyle = 6
Ttf_Os2_Panose_SerifStyle__Thin Ttf_Os2_Panose_SerifStyle = 7
Ttf_Os2_Panose_SerifStyle__Bone Ttf_Os2_Panose_SerifStyle = 8
Ttf_Os2_Panose_SerifStyle__Exaggerated Ttf_Os2_Panose_SerifStyle = 9
Ttf_Os2_Panose_SerifStyle__Triangle Ttf_Os2_Panose_SerifStyle = 10
Ttf_Os2_Panose_SerifStyle__NormalSans Ttf_Os2_Panose_SerifStyle = 11
Ttf_Os2_Panose_SerifStyle__ObtuseSans Ttf_Os2_Panose_SerifStyle = 12
Ttf_Os2_Panose_SerifStyle__PerpSans Ttf_Os2_Panose_SerifStyle = 13
Ttf_Os2_Panose_SerifStyle__Flared Ttf_Os2_Panose_SerifStyle = 14
Ttf_Os2_Panose_SerifStyle__Rounded Ttf_Os2_Panose_SerifStyle = 15
)
type Ttf_Os2_Panose_XHeight int
const (
Ttf_Os2_Panose_XHeight__Any Ttf_Os2_Panose_XHeight = 0
Ttf_Os2_Panose_XHeight__NoFit Ttf_Os2_Panose_XHeight = 1
Ttf_Os2_Panose_XHeight__ConstantSmall Ttf_Os2_Panose_XHeight = 2
Ttf_Os2_Panose_XHeight__ConstantStandard Ttf_Os2_Panose_XHeight = 3
Ttf_Os2_Panose_XHeight__ConstantLarge Ttf_Os2_Panose_XHeight = 4
Ttf_Os2_Panose_XHeight__DuckingSmall Ttf_Os2_Panose_XHeight = 5
Ttf_Os2_Panose_XHeight__DuckingStandard Ttf_Os2_Panose_XHeight = 6
Ttf_Os2_Panose_XHeight__DuckingLarge Ttf_Os2_Panose_XHeight = 7
)
type Ttf_Os2_Panose_ArmStyle int
const (
Ttf_Os2_Panose_ArmStyle__Any Ttf_Os2_Panose_ArmStyle = 0
Ttf_Os2_Panose_ArmStyle__NoFit Ttf_Os2_Panose_ArmStyle = 1
Ttf_Os2_Panose_ArmStyle__StraightArmsHorizontal Ttf_Os2_Panose_ArmStyle = 2
Ttf_Os2_Panose_ArmStyle__StraightArmsWedge Ttf_Os2_Panose_ArmStyle = 3
Ttf_Os2_Panose_ArmStyle__StraightArmsVertical Ttf_Os2_Panose_ArmStyle = 4
Ttf_Os2_Panose_ArmStyle__StraightArmsSingleSerif Ttf_Os2_Panose_ArmStyle = 5
Ttf_Os2_Panose_ArmStyle__StraightArmsDoubleSerif Ttf_Os2_Panose_ArmStyle = 6
Ttf_Os2_Panose_ArmStyle__NonStraightArmsHorizontal Ttf_Os2_Panose_ArmStyle = 7
Ttf_Os2_Panose_ArmStyle__NonStraightArmsWedge Ttf_Os2_Panose_ArmStyle = 8
Ttf_Os2_Panose_ArmStyle__NonStraightArmsVertical Ttf_Os2_Panose_ArmStyle = 9
Ttf_Os2_Panose_ArmStyle__NonStraightArmsSingleSerif Ttf_Os2_Panose_ArmStyle = 10
Ttf_Os2_Panose_ArmStyle__NonStraightArmsDoubleSerif Ttf_Os2_Panose_ArmStyle = 11
)
type Ttf_Os2_Panose_StrokeVariation int
const (
Ttf_Os2_Panose_StrokeVariation__Any Ttf_Os2_Panose_StrokeVariation = 0
Ttf_Os2_Panose_StrokeVariation__NoFit Ttf_Os2_Panose_StrokeVariation = 1
Ttf_Os2_Panose_StrokeVariation__GradualDiagonal Ttf_Os2_Panose_StrokeVariation = 2
Ttf_Os2_Panose_StrokeVariation__GradualTransitional Ttf_Os2_Panose_StrokeVariation = 3
Ttf_Os2_Panose_StrokeVariation__GradualVertical Ttf_Os2_Panose_StrokeVariation = 4
Ttf_Os2_Panose_StrokeVariation__GradualHorizontal Ttf_Os2_Panose_StrokeVariation = 5
Ttf_Os2_Panose_StrokeVariation__RapidVertical Ttf_Os2_Panose_StrokeVariation = 6
Ttf_Os2_Panose_StrokeVariation__RapidHorizontal Ttf_Os2_Panose_StrokeVariation = 7
Ttf_Os2_Panose_StrokeVariation__InstantVertical Ttf_Os2_Panose_StrokeVariation = 8
)
type Ttf_Os2_Panose_Contrast int
const (
Ttf_Os2_Panose_Contrast__Any Ttf_Os2_Panose_Contrast = 0
Ttf_Os2_Panose_Contrast__NoFit Ttf_Os2_Panose_Contrast = 1
Ttf_Os2_Panose_Contrast__None Ttf_Os2_Panose_Contrast = 2
Ttf_Os2_Panose_Contrast__VeryLow Ttf_Os2_Panose_Contrast = 3
Ttf_Os2_Panose_Contrast__Low Ttf_Os2_Panose_Contrast = 4
Ttf_Os2_Panose_Contrast__MediumLow Ttf_Os2_Panose_Contrast = 5
Ttf_Os2_Panose_Contrast__Medium Ttf_Os2_Panose_Contrast = 6
Ttf_Os2_Panose_Contrast__MediumHigh Ttf_Os2_Panose_Contrast = 7
Ttf_Os2_Panose_Contrast__High Ttf_Os2_Panose_Contrast = 8
Ttf_Os2_Panose_Contrast__VeryHigh Ttf_Os2_Panose_Contrast = 9
)
type Ttf_Os2_Panose_Midline int
const (
Ttf_Os2_Panose_Midline__Any Ttf_Os2_Panose_Midline = 0
Ttf_Os2_Panose_Midline__NoFit Ttf_Os2_Panose_Midline = 1
Ttf_Os2_Panose_Midline__StandardTrimmed Ttf_Os2_Panose_Midline = 2
Ttf_Os2_Panose_Midline__StandardPointed Ttf_Os2_Panose_Midline = 3
Ttf_Os2_Panose_Midline__StandardSerifed Ttf_Os2_Panose_Midline = 4
Ttf_Os2_Panose_Midline__HighTrimmed Ttf_Os2_Panose_Midline = 5
Ttf_Os2_Panose_Midline__HighPointed Ttf_Os2_Panose_Midline = 6
Ttf_Os2_Panose_Midline__HighSerifed Ttf_Os2_Panose_Midline = 7
Ttf_Os2_Panose_Midline__ConstantTrimmed Ttf_Os2_Panose_Midline = 8
Ttf_Os2_Panose_Midline__ConstantPointed Ttf_Os2_Panose_Midline = 9
Ttf_Os2_Panose_Midline__ConstantSerifed Ttf_Os2_Panose_Midline = 10
Ttf_Os2_Panose_Midline__LowTrimmed Ttf_Os2_Panose_Midline = 11
Ttf_Os2_Panose_Midline__LowPointed Ttf_Os2_Panose_Midline = 12
Ttf_Os2_Panose_Midline__LowSerifed Ttf_Os2_Panose_Midline = 13
)
type Ttf_Os2_Panose struct {
FamilyType Ttf_Os2_Panose_FamilyKind
SerifStyle Ttf_Os2_Panose_SerifStyle
Weight Ttf_Os2_Panose_Weight
Proportion Ttf_Os2_Panose_Proportion
Contrast Ttf_Os2_Panose_Contrast
StrokeVariation Ttf_Os2_Panose_StrokeVariation
ArmStyle Ttf_Os2_Panose_ArmStyle
LetterForm Ttf_Os2_Panose_LetterForm
Midline Ttf_Os2_Panose_Midline
XHeight Ttf_Os2_Panose_XHeight
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Os2
}
func NewTtf_Os2_Panose() *Ttf_Os2_Panose {
return &Ttf_Os2_Panose{
}
}
func (this *Ttf_Os2_Panose) Read(io *kaitai.Stream, parent *Ttf_Os2, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp141, err := this._io.ReadU1()
if err != nil {
return err
}
this.FamilyType = Ttf_Os2_Panose_FamilyKind(tmp141)
tmp142, err := this._io.ReadU1()
if err != nil {
return err
}
this.SerifStyle = Ttf_Os2_Panose_SerifStyle(tmp142)
tmp143, err := this._io.ReadU1()
if err != nil {
return err
}
this.Weight = Ttf_Os2_Panose_Weight(tmp143)
tmp144, err := this._io.ReadU1()
if err != nil {
return err
}
this.Proportion = Ttf_Os2_Panose_Proportion(tmp144)
tmp145, err := this._io.ReadU1()
if err != nil {
return err
}
this.Contrast = Ttf_Os2_Panose_Contrast(tmp145)
tmp146, err := this._io.ReadU1()
if err != nil {
return err
}
this.StrokeVariation = Ttf_Os2_Panose_StrokeVariation(tmp146)
tmp147, err := this._io.ReadU1()
if err != nil {
return err
}
this.ArmStyle = Ttf_Os2_Panose_ArmStyle(tmp147)
tmp148, err := this._io.ReadU1()
if err != nil {
return err
}
this.LetterForm = Ttf_Os2_Panose_LetterForm(tmp148)
tmp149, err := this._io.ReadU1()
if err != nil {
return err
}
this.Midline = Ttf_Os2_Panose_Midline(tmp149)
tmp150, err := this._io.ReadU1()
if err != nil {
return err
}
this.XHeight = Ttf_Os2_Panose_XHeight(tmp150)
return err
}
type Ttf_Os2_UnicodeRange struct {
BasicLatin bool
Latin1Supplement bool
LatinExtendedA bool
LatinExtendedB bool
IpaExtensions bool
SpacingModifierLetters bool
CombiningDiacriticalMarks bool
BasicGreek bool
GreekSymbolsAndCoptic bool
Cyrillic bool
Armenian bool
BasicHebrew bool
HebrewExtended bool
BasicArabic bool
ArabicExtended bool
Devanagari bool
Bengali bool
Gurmukhi bool
Gujarati bool
Oriya bool
Tamil bool
Telugu bool
Kannada bool
Malayalam bool
Thai bool
Lao bool
BasicGeorgian bool
GeorgianExtended bool
HangulJamo bool
LatinExtendedAdditional bool
GreekExtended bool
GeneralPunctuation bool
SuperscriptsAndSubscripts bool
CurrencySymbols bool
CombiningDiacriticalMarksForSymbols bool
LetterlikeSymbols bool
NumberForms bool
Arrows bool
MathematicalOperators bool
MiscellaneousTechnical bool
ControlPictures bool
OpticalCharacterRecognition bool
EnclosedAlphanumerics bool
BoxDrawing bool
BlockElements bool
GeometricShapes bool
MiscellaneousSymbols bool
Dingbats bool
CjkSymbolsAndPunctuation bool
Hiragana bool
Katakana bool
Bopomofo bool
HangulCompatibilityJamo bool
CjkMiscellaneous bool
EnclosedCjkLettersAndMonths bool
CjkCompatibility bool
Hangul bool
ReservedForUnicodeSubranges1 bool
ReservedForUnicodeSubranges2 bool
CjkUnifiedIdeographs bool
PrivateUseArea bool
CjkCompatibilityIdeographs bool
AlphabeticPresentationForms bool
ArabicPresentationFormsA bool
CombiningHalfMarks bool
CjkCompatibilityForms bool
SmallFormVariants bool
ArabicPresentationFormsB bool
HalfwidthAndFullwidthForms bool
Specials bool
Reserved []byte
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Os2
}
func NewTtf_Os2_UnicodeRange() *Ttf_Os2_UnicodeRange {
return &Ttf_Os2_UnicodeRange{
}
}
func (this *Ttf_Os2_UnicodeRange) Read(io *kaitai.Stream, parent *Ttf_Os2, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp151, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BasicLatin = tmp151 != 0
tmp152, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Latin1Supplement = tmp152 != 0
tmp153, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.LatinExtendedA = tmp153 != 0
tmp154, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.LatinExtendedB = tmp154 != 0
tmp155, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.IpaExtensions = tmp155 != 0
tmp156, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.SpacingModifierLetters = tmp156 != 0
tmp157, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CombiningDiacriticalMarks = tmp157 != 0
tmp158, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BasicGreek = tmp158 != 0
tmp159, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.GreekSymbolsAndCoptic = tmp159 != 0
tmp160, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cyrillic = tmp160 != 0
tmp161, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Armenian = tmp161 != 0
tmp162, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BasicHebrew = tmp162 != 0
tmp163, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.HebrewExtended = tmp163 != 0
tmp164, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BasicArabic = tmp164 != 0
tmp165, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.ArabicExtended = tmp165 != 0
tmp166, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Devanagari = tmp166 != 0
tmp167, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Bengali = tmp167 != 0
tmp168, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Gurmukhi = tmp168 != 0
tmp169, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Gujarati = tmp169 != 0
tmp170, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Oriya = tmp170 != 0
tmp171, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Tamil = tmp171 != 0
tmp172, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Telugu = tmp172 != 0
tmp173, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Kannada = tmp173 != 0
tmp174, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Malayalam = tmp174 != 0
tmp175, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Thai = tmp175 != 0
tmp176, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Lao = tmp176 != 0
tmp177, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BasicGeorgian = tmp177 != 0
tmp178, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.GeorgianExtended = tmp178 != 0
tmp179, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.HangulJamo = tmp179 != 0
tmp180, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.LatinExtendedAdditional = tmp180 != 0
tmp181, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.GreekExtended = tmp181 != 0
tmp182, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.GeneralPunctuation = tmp182 != 0
tmp183, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.SuperscriptsAndSubscripts = tmp183 != 0
tmp184, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CurrencySymbols = tmp184 != 0
tmp185, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CombiningDiacriticalMarksForSymbols = tmp185 != 0
tmp186, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.LetterlikeSymbols = tmp186 != 0
tmp187, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.NumberForms = tmp187 != 0
tmp188, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Arrows = tmp188 != 0
tmp189, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.MathematicalOperators = tmp189 != 0
tmp190, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.MiscellaneousTechnical = tmp190 != 0
tmp191, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.ControlPictures = tmp191 != 0
tmp192, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.OpticalCharacterRecognition = tmp192 != 0
tmp193, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.EnclosedAlphanumerics = tmp193 != 0
tmp194, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BoxDrawing = tmp194 != 0
tmp195, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.BlockElements = tmp195 != 0
tmp196, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.GeometricShapes = tmp196 != 0
tmp197, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.MiscellaneousSymbols = tmp197 != 0
tmp198, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Dingbats = tmp198 != 0
tmp199, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CjkSymbolsAndPunctuation = tmp199 != 0
tmp200, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Hiragana = tmp200 != 0
tmp201, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Katakana = tmp201 != 0
tmp202, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Bopomofo = tmp202 != 0
tmp203, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.HangulCompatibilityJamo = tmp203 != 0
tmp204, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CjkMiscellaneous = tmp204 != 0
tmp205, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.EnclosedCjkLettersAndMonths = tmp205 != 0
tmp206, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CjkCompatibility = tmp206 != 0
tmp207, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Hangul = tmp207 != 0
tmp208, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.ReservedForUnicodeSubranges1 = tmp208 != 0
tmp209, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.ReservedForUnicodeSubranges2 = tmp209 != 0
tmp210, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CjkUnifiedIdeographs = tmp210 != 0
tmp211, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.PrivateUseArea = tmp211 != 0
tmp212, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CjkCompatibilityIdeographs = tmp212 != 0
tmp213, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.AlphabeticPresentationForms = tmp213 != 0
tmp214, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.ArabicPresentationFormsA = tmp214 != 0
tmp215, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CombiningHalfMarks = tmp215 != 0
tmp216, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.CjkCompatibilityForms = tmp216 != 0
tmp217, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.SmallFormVariants = tmp217 != 0
tmp218, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.ArabicPresentationFormsB = tmp218 != 0
tmp219, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.HalfwidthAndFullwidthForms = tmp219 != 0
tmp220, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Specials = tmp220 != 0
this._io.AlignToByte()
tmp221, err := this._io.ReadBytes(int(7))
if err != nil {
return err
}
tmp221 = tmp221
this.Reserved = tmp221
return err
}
type Ttf_Os2_CodePageRange struct {
SymbolCharacterSet bool
OemCharacterSet bool
MacintoshCharacterSet bool
ReservedForAlternateAnsiOem uint64
Cp1361KoreanJohab bool
Cp950ChineseTraditionalCharsTaiwanAndHongKong bool
Cp949KoreanWansung bool
Cp936ChineseSimplifiedCharsPrcAndSingapore bool
Cp932JisJapan bool
Cp874Thai bool
ReservedForAlternateAnsi uint64
Cp1257WindowsBaltic bool
Cp1256Arabic bool
Cp1255Hebrew bool
Cp1254Turkish bool
Cp1253Greek bool
Cp1251Cyrillic bool
Cp1250Latin2EasternEurope bool
Cp1252Latin1 bool
Cp437Us bool
Cp850WeLatin1 bool
Cp708ArabicAsmo708 bool
Cp737GreekFormer437G bool
Cp775MsDosBaltic bool
Cp852Latin2 bool
Cp855IbmCyrillicPrimarilyRussian bool
Cp857IbmTurkish bool
Cp860MsDosPortuguese bool
Cp861MsDosIcelandic bool
Cp862Hebrew bool
Cp863MsDosCanadianFrench bool
Cp864Arabic bool
Cp865MsDosNordic bool
Cp866MsDosRussian bool
Cp869IbmGreek bool
ReservedForOem uint64
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Os2
}
func NewTtf_Os2_CodePageRange() *Ttf_Os2_CodePageRange {
return &Ttf_Os2_CodePageRange{
}
}
func (this *Ttf_Os2_CodePageRange) Read(io *kaitai.Stream, parent *Ttf_Os2, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp222, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.SymbolCharacterSet = tmp222 != 0
tmp223, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.OemCharacterSet = tmp223 != 0
tmp224, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.MacintoshCharacterSet = tmp224 != 0
tmp225, err := this._io.ReadBitsIntBe(7)
if err != nil {
return err
}
this.ReservedForAlternateAnsiOem = tmp225
tmp226, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1361KoreanJohab = tmp226 != 0
tmp227, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp950ChineseTraditionalCharsTaiwanAndHongKong = tmp227 != 0
tmp228, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp949KoreanWansung = tmp228 != 0
tmp229, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp936ChineseSimplifiedCharsPrcAndSingapore = tmp229 != 0
tmp230, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp932JisJapan = tmp230 != 0
tmp231, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp874Thai = tmp231 != 0
tmp232, err := this._io.ReadBitsIntBe(8)
if err != nil {
return err
}
this.ReservedForAlternateAnsi = tmp232
tmp233, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1257WindowsBaltic = tmp233 != 0
tmp234, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1256Arabic = tmp234 != 0
tmp235, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1255Hebrew = tmp235 != 0
tmp236, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1254Turkish = tmp236 != 0
tmp237, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1253Greek = tmp237 != 0
tmp238, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1251Cyrillic = tmp238 != 0
tmp239, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1250Latin2EasternEurope = tmp239 != 0
tmp240, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp1252Latin1 = tmp240 != 0
tmp241, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp437Us = tmp241 != 0
tmp242, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp850WeLatin1 = tmp242 != 0
tmp243, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp708ArabicAsmo708 = tmp243 != 0
tmp244, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp737GreekFormer437G = tmp244 != 0
tmp245, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp775MsDosBaltic = tmp245 != 0
tmp246, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp852Latin2 = tmp246 != 0
tmp247, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp855IbmCyrillicPrimarilyRussian = tmp247 != 0
tmp248, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp857IbmTurkish = tmp248 != 0
tmp249, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp860MsDosPortuguese = tmp249 != 0
tmp250, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp861MsDosIcelandic = tmp250 != 0
tmp251, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp862Hebrew = tmp251 != 0
tmp252, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp863MsDosCanadianFrench = tmp252 != 0
tmp253, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp864Arabic = tmp253 != 0
tmp254, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp865MsDosNordic = tmp254 != 0
tmp255, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp866MsDosRussian = tmp255 != 0
tmp256, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Cp869IbmGreek = tmp256 != 0
tmp257, err := this._io.ReadBitsIntBe(16)
if err != nil {
return err
}
this.ReservedForOem = tmp257
return err
}
type Ttf_Fixed struct {
Major uint16
Minor uint16
_io *kaitai.Stream
_root *Ttf
_parent interface{}
}
func NewTtf_Fixed() *Ttf_Fixed {
return &Ttf_Fixed{
}
}
func (this *Ttf_Fixed) Read(io *kaitai.Stream, parent interface{}, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp258, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Major = uint16(tmp258)
tmp259, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Minor = uint16(tmp259)
return err
}
type Ttf_Glyf struct {
NumberOfContours int16
XMin int16
YMin int16
XMax int16
YMax int16
Value *Ttf_Glyf_SimpleGlyph
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Glyf() *Ttf_Glyf {
return &Ttf_Glyf{
}
}
func (this *Ttf_Glyf) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp260, err := this._io.ReadS2be()
if err != nil {
return err
}
this.NumberOfContours = int16(tmp260)
tmp261, err := this._io.ReadS2be()
if err != nil {
return err
}
this.XMin = int16(tmp261)
tmp262, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YMin = int16(tmp262)
tmp263, err := this._io.ReadS2be()
if err != nil {
return err
}
this.XMax = int16(tmp263)
tmp264, err := this._io.ReadS2be()
if err != nil {
return err
}
this.YMax = int16(tmp264)
if (this.NumberOfContours > 0) {
tmp265 := NewTtf_Glyf_SimpleGlyph()
err = tmp265.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Value = tmp265
}
return err
}
type Ttf_Glyf_SimpleGlyph struct {
EndPtsOfContours []uint16
InstructionLength uint16
Instructions []byte
Flags []*Ttf_Glyf_SimpleGlyph_Flag
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Glyf
_f_pointCount bool
pointCount int
}
func NewTtf_Glyf_SimpleGlyph() *Ttf_Glyf_SimpleGlyph {
return &Ttf_Glyf_SimpleGlyph{
}
}
func (this *Ttf_Glyf_SimpleGlyph) Read(io *kaitai.Stream, parent *Ttf_Glyf, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(this._parent.NumberOfContours); i++ {
_ = i
tmp266, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EndPtsOfContours = append(this.EndPtsOfContours, tmp266)
}
tmp267, err := this._io.ReadU2be()
if err != nil {
return err
}
this.InstructionLength = uint16(tmp267)
tmp268, err := this._io.ReadBytes(int(this.InstructionLength))
if err != nil {
return err
}
tmp268 = tmp268
this.Instructions = tmp268
tmp269, err := this.PointCount()
if err != nil {
return err
}
for i := 0; i < int(tmp269); i++ {
_ = i
tmp270 := NewTtf_Glyf_SimpleGlyph_Flag()
err = tmp270.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Flags = append(this.Flags, tmp270)
}
return err
}
func (this *Ttf_Glyf_SimpleGlyph) PointCount() (v int, err error) {
if (this._f_pointCount) {
return this.pointCount, nil
}
tmp271 := this.EndPtsOfContours[0]
for _, tmp272 := range this.EndPtsOfContours {
if tmp271 < tmp272 {
tmp271 = tmp272
}
}
this.pointCount = int((tmp271 + 1))
this._f_pointCount = true
return this.pointCount, nil
}
type Ttf_Glyf_SimpleGlyph_Flag struct {
Reserved uint64
YIsSame bool
XIsSame bool
Repeat bool
YShortVector bool
XShortVector bool
OnCurve bool
RepeatValue uint8
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Glyf_SimpleGlyph
}
func NewTtf_Glyf_SimpleGlyph_Flag() *Ttf_Glyf_SimpleGlyph_Flag {
return &Ttf_Glyf_SimpleGlyph_Flag{
}
}
func (this *Ttf_Glyf_SimpleGlyph_Flag) Read(io *kaitai.Stream, parent *Ttf_Glyf_SimpleGlyph, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp273, err := this._io.ReadBitsIntBe(2)
if err != nil {
return err
}
this.Reserved = tmp273
tmp274, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.YIsSame = tmp274 != 0
tmp275, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.XIsSame = tmp275 != 0
tmp276, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.Repeat = tmp276 != 0
tmp277, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.YShortVector = tmp277 != 0
tmp278, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.XShortVector = tmp278 != 0
tmp279, err := this._io.ReadBitsIntBe(1)
if err != nil {
return err
}
this.OnCurve = tmp279 != 0
this._io.AlignToByte()
if (this.Repeat) {
tmp280, err := this._io.ReadU1()
if err != nil {
return err
}
this.RepeatValue = tmp280
}
return err
}
/**
* cvt - Control Value Table This table contains a list of values that can be referenced by instructions. They can be used, among other things, to control characteristics for different glyphs.
*/
type Ttf_Cvt struct {
Fwords []int16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Cvt() *Ttf_Cvt {
return &Ttf_Cvt{
}
}
func (this *Ttf_Cvt) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 1;; i++ {
tmp281, err := this._io.EOF()
if err != nil {
return err
}
if tmp281 {
break
}
tmp282, err := this._io.ReadS2be()
if err != nil {
return err
}
this.Fwords = append(this.Fwords, tmp282)
}
return err
}
type Ttf_Maxp struct {
TableVersionNumber *Ttf_Fixed
NumGlyphs uint16
Version10Body *Ttf_MaxpVersion10Body
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
_f_isVersion10 bool
isVersion10 bool
}
func NewTtf_Maxp() *Ttf_Maxp {
return &Ttf_Maxp{
}
}
func (this *Ttf_Maxp) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp283 := NewTtf_Fixed()
err = tmp283.Read(this._io, this, this._root)
if err != nil {
return err
}
this.TableVersionNumber = tmp283
tmp284, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NumGlyphs = uint16(tmp284)
tmp285, err := this.IsVersion10()
if err != nil {
return err
}
if (tmp285) {
tmp286 := NewTtf_MaxpVersion10Body()
err = tmp286.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Version10Body = tmp286
}
return err
}
func (this *Ttf_Maxp) IsVersion10() (v bool, err error) {
if (this._f_isVersion10) {
return this.isVersion10, nil
}
this.isVersion10 = bool( ((this.TableVersionNumber.Major == 1) && (this.TableVersionNumber.Minor == 0)) )
this._f_isVersion10 = true
return this.isVersion10, nil
}
/**
* 0x00010000 for version 1.0.
*/
/**
* The number of glyphs in the font.
*/
type Ttf_MaxpVersion10Body struct {
MaxPoints uint16
MaxContours uint16
MaxCompositePoints uint16
MaxCompositeContours uint16
MaxZones uint16
MaxTwilightPoints uint16
MaxStorage uint16
MaxFunctionDefs uint16
MaxInstructionDefs uint16
MaxStackElements uint16
MaxSizeOfInstructions uint16
MaxComponentElements uint16
MaxComponentDepth uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Maxp
}
func NewTtf_MaxpVersion10Body() *Ttf_MaxpVersion10Body {
return &Ttf_MaxpVersion10Body{
}
}
func (this *Ttf_MaxpVersion10Body) Read(io *kaitai.Stream, parent *Ttf_Maxp, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp287, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxPoints = uint16(tmp287)
tmp288, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxContours = uint16(tmp288)
tmp289, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxCompositePoints = uint16(tmp289)
tmp290, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxCompositeContours = uint16(tmp290)
tmp291, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxZones = uint16(tmp291)
tmp292, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxTwilightPoints = uint16(tmp292)
tmp293, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxStorage = uint16(tmp293)
tmp294, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxFunctionDefs = uint16(tmp294)
tmp295, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxInstructionDefs = uint16(tmp295)
tmp296, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxStackElements = uint16(tmp296)
tmp297, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxSizeOfInstructions = uint16(tmp297)
tmp298, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxComponentElements = uint16(tmp298)
tmp299, err := this._io.ReadU2be()
if err != nil {
return err
}
this.MaxComponentDepth = uint16(tmp299)
return err
}
/**
* Maximum points in a non-composite glyph.
*/
/**
* Maximum contours in a non-composite glyph.
*/
/**
* Maximum points in a composite glyph.
*/
/**
* Maximum contours in a composite glyph.
*/
/**
* 1 if instructions do not use the twilight zone (Z0), or 2 if instructions do use Z0; should be set to 2 in most cases.
*/
/**
* Maximum points used in Z0.
*/
/**
* Number of Storage Area locations.
*/
/**
* Number of FDEFs.
*/
/**
* Number of IDEFs.
*/
/**
* Maximum stack depth.
*/
/**
* Maximum byte count for glyph instructions.
*/
/**
* Maximum number of components referenced at "top level" for any composite glyph.
*/
/**
* Maximum levels of recursion; 1 for simple components.
*/
type Ttf_OffsetTable struct {
SfntVersion *Ttf_Fixed
NumTables uint16
SearchRange uint16
EntrySelector uint16
RangeShift uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf
}
func NewTtf_OffsetTable() *Ttf_OffsetTable {
return &Ttf_OffsetTable{
}
}
func (this *Ttf_OffsetTable) Read(io *kaitai.Stream, parent *Ttf, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp300 := NewTtf_Fixed()
err = tmp300.Read(this._io, this, this._root)
if err != nil {
return err
}
this.SfntVersion = tmp300
tmp301, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NumTables = uint16(tmp301)
tmp302, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SearchRange = uint16(tmp302)
tmp303, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EntrySelector = uint16(tmp303)
tmp304, err := this._io.ReadU2be()
if err != nil {
return err
}
this.RangeShift = uint16(tmp304)
return err
}
/**
* cmap - Character To Glyph Index Mapping Table This table defines the mapping of character codes to the glyph index values used in the font.
*/
type Ttf_Cmap struct {
VersionNumber uint16
NumberOfEncodingTables uint16
Tables []*Ttf_Cmap_SubtableHeader
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_DirTableEntry
}
func NewTtf_Cmap() *Ttf_Cmap {
return &Ttf_Cmap{
}
}
func (this *Ttf_Cmap) Read(io *kaitai.Stream, parent *Ttf_DirTableEntry, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp305, err := this._io.ReadU2be()
if err != nil {
return err
}
this.VersionNumber = uint16(tmp305)
tmp306, err := this._io.ReadU2be()
if err != nil {
return err
}
this.NumberOfEncodingTables = uint16(tmp306)
for i := 0; i < int(this.NumberOfEncodingTables); i++ {
_ = i
tmp307 := NewTtf_Cmap_SubtableHeader()
err = tmp307.Read(this._io, this, this._root)
if err != nil {
return err
}
this.Tables = append(this.Tables, tmp307)
}
return err
}
type Ttf_Cmap_SubtableHeader struct {
PlatformId uint16
EncodingId uint16
SubtableOffset uint32
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Cmap
_f_table bool
table *Ttf_Cmap_Subtable
}
func NewTtf_Cmap_SubtableHeader() *Ttf_Cmap_SubtableHeader {
return &Ttf_Cmap_SubtableHeader{
}
}
func (this *Ttf_Cmap_SubtableHeader) Read(io *kaitai.Stream, parent *Ttf_Cmap, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp308, err := this._io.ReadU2be()
if err != nil {
return err
}
this.PlatformId = uint16(tmp308)
tmp309, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EncodingId = uint16(tmp309)
tmp310, err := this._io.ReadU4be()
if err != nil {
return err
}
this.SubtableOffset = uint32(tmp310)
return err
}
func (this *Ttf_Cmap_SubtableHeader) Table() (v *Ttf_Cmap_Subtable, err error) {
if (this._f_table) {
return this.table, nil
}
thisIo := this._parent._io
_pos, err := thisIo.Pos()
if err != nil {
return nil, err
}
_, err = thisIo.Seek(int64(this.SubtableOffset), io.SeekStart)
if err != nil {
return nil, err
}
tmp311 := NewTtf_Cmap_Subtable()
err = tmp311.Read(thisIo, this, this._root)
if err != nil {
return nil, err
}
this.table = tmp311
_, err = thisIo.Seek(_pos, io.SeekStart)
if err != nil {
return nil, err
}
this._f_table = true
this._f_table = true
return this.table, nil
}
type Ttf_Cmap_Subtable_SubtableFormat int
const (
Ttf_Cmap_Subtable_SubtableFormat__ByteEncodingTable Ttf_Cmap_Subtable_SubtableFormat = 0
Ttf_Cmap_Subtable_SubtableFormat__HighByteMappingThroughTable Ttf_Cmap_Subtable_SubtableFormat = 2
Ttf_Cmap_Subtable_SubtableFormat__SegmentMappingToDeltaValues Ttf_Cmap_Subtable_SubtableFormat = 4
Ttf_Cmap_Subtable_SubtableFormat__TrimmedTableMapping Ttf_Cmap_Subtable_SubtableFormat = 6
)
type Ttf_Cmap_Subtable struct {
Format Ttf_Cmap_Subtable_SubtableFormat
Length uint16
Version uint16
Value interface{}
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Cmap_SubtableHeader
_raw_Value []byte
}
func NewTtf_Cmap_Subtable() *Ttf_Cmap_Subtable {
return &Ttf_Cmap_Subtable{
}
}
func (this *Ttf_Cmap_Subtable) Read(io *kaitai.Stream, parent *Ttf_Cmap_SubtableHeader, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp312, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Format = Ttf_Cmap_Subtable_SubtableFormat(tmp312)
tmp313, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Length = uint16(tmp313)
tmp314, err := this._io.ReadU2be()
if err != nil {
return err
}
this.Version = uint16(tmp314)
switch (this.Format) {
case Ttf_Cmap_Subtable_SubtableFormat__ByteEncodingTable:
tmp315, err := this._io.ReadBytes(int((this.Length - 6)))
if err != nil {
return err
}
tmp315 = tmp315
this._raw_Value = tmp315
_io__raw_Value := kaitai.NewStream(bytes.NewReader(this._raw_Value))
tmp316 := NewTtf_Cmap_Subtable_ByteEncodingTable()
err = tmp316.Read(_io__raw_Value, this, this._root)
if err != nil {
return err
}
this.Value = tmp316
case Ttf_Cmap_Subtable_SubtableFormat__SegmentMappingToDeltaValues:
tmp317, err := this._io.ReadBytes(int((this.Length - 6)))
if err != nil {
return err
}
tmp317 = tmp317
this._raw_Value = tmp317
_io__raw_Value := kaitai.NewStream(bytes.NewReader(this._raw_Value))
tmp318 := NewTtf_Cmap_Subtable_SegmentMappingToDeltaValues()
err = tmp318.Read(_io__raw_Value, this, this._root)
if err != nil {
return err
}
this.Value = tmp318
case Ttf_Cmap_Subtable_SubtableFormat__HighByteMappingThroughTable:
tmp319, err := this._io.ReadBytes(int((this.Length - 6)))
if err != nil {
return err
}
tmp319 = tmp319
this._raw_Value = tmp319
_io__raw_Value := kaitai.NewStream(bytes.NewReader(this._raw_Value))
tmp320 := NewTtf_Cmap_Subtable_HighByteMappingThroughTable()
err = tmp320.Read(_io__raw_Value, this, this._root)
if err != nil {
return err
}
this.Value = tmp320
case Ttf_Cmap_Subtable_SubtableFormat__TrimmedTableMapping:
tmp321, err := this._io.ReadBytes(int((this.Length - 6)))
if err != nil {
return err
}
tmp321 = tmp321
this._raw_Value = tmp321
_io__raw_Value := kaitai.NewStream(bytes.NewReader(this._raw_Value))
tmp322 := NewTtf_Cmap_Subtable_TrimmedTableMapping()
err = tmp322.Read(_io__raw_Value, this, this._root)
if err != nil {
return err
}
this.Value = tmp322
default:
tmp323, err := this._io.ReadBytes(int((this.Length - 6)))
if err != nil {
return err
}
tmp323 = tmp323
this._raw_Value = tmp323
}
return err
}
type Ttf_Cmap_Subtable_ByteEncodingTable struct {
GlyphIdArray []byte
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Cmap_Subtable
}
func NewTtf_Cmap_Subtable_ByteEncodingTable() *Ttf_Cmap_Subtable_ByteEncodingTable {
return &Ttf_Cmap_Subtable_ByteEncodingTable{
}
}
func (this *Ttf_Cmap_Subtable_ByteEncodingTable) Read(io *kaitai.Stream, parent *Ttf_Cmap_Subtable, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp324, err := this._io.ReadBytes(int(256))
if err != nil {
return err
}
tmp324 = tmp324
this.GlyphIdArray = tmp324
return err
}
type Ttf_Cmap_Subtable_HighByteMappingThroughTable struct {
SubHeaderKeys []uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Cmap_Subtable
}
func NewTtf_Cmap_Subtable_HighByteMappingThroughTable() *Ttf_Cmap_Subtable_HighByteMappingThroughTable {
return &Ttf_Cmap_Subtable_HighByteMappingThroughTable{
}
}
func (this *Ttf_Cmap_Subtable_HighByteMappingThroughTable) Read(io *kaitai.Stream, parent *Ttf_Cmap_Subtable, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
for i := 0; i < int(256); i++ {
_ = i
tmp325, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SubHeaderKeys = append(this.SubHeaderKeys, tmp325)
}
return err
}
type Ttf_Cmap_Subtable_SegmentMappingToDeltaValues struct {
SegCountX2 uint16
SearchRange uint16
EntrySelector uint16
RangeShift uint16
EndCount []uint16
ReservedPad uint16
StartCount []uint16
IdDelta []uint16
IdRangeOffset []uint16
GlyphIdArray []uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Cmap_Subtable
_f_segCount bool
segCount int
}
func NewTtf_Cmap_Subtable_SegmentMappingToDeltaValues() *Ttf_Cmap_Subtable_SegmentMappingToDeltaValues {
return &Ttf_Cmap_Subtable_SegmentMappingToDeltaValues{
}
}
func (this *Ttf_Cmap_Subtable_SegmentMappingToDeltaValues) Read(io *kaitai.Stream, parent *Ttf_Cmap_Subtable, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp326, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SegCountX2 = uint16(tmp326)
tmp327, err := this._io.ReadU2be()
if err != nil {
return err
}
this.SearchRange = uint16(tmp327)
tmp328, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EntrySelector = uint16(tmp328)
tmp329, err := this._io.ReadU2be()
if err != nil {
return err
}
this.RangeShift = uint16(tmp329)
tmp330, err := this.SegCount()
if err != nil {
return err
}
for i := 0; i < int(tmp330); i++ {
_ = i
tmp331, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EndCount = append(this.EndCount, tmp331)
}
tmp332, err := this._io.ReadU2be()
if err != nil {
return err
}
this.ReservedPad = uint16(tmp332)
tmp333, err := this.SegCount()
if err != nil {
return err
}
for i := 0; i < int(tmp333); i++ {
_ = i
tmp334, err := this._io.ReadU2be()
if err != nil {
return err
}
this.StartCount = append(this.StartCount, tmp334)
}
tmp335, err := this.SegCount()
if err != nil {
return err
}
for i := 0; i < int(tmp335); i++ {
_ = i
tmp336, err := this._io.ReadU2be()
if err != nil {
return err
}
this.IdDelta = append(this.IdDelta, tmp336)
}
tmp337, err := this.SegCount()
if err != nil {
return err
}
for i := 0; i < int(tmp337); i++ {
_ = i
tmp338, err := this._io.ReadU2be()
if err != nil {
return err
}
this.IdRangeOffset = append(this.IdRangeOffset, tmp338)
}
for i := 1;; i++ {
tmp339, err := this._io.EOF()
if err != nil {
return err
}
if tmp339 {
break
}
tmp340, err := this._io.ReadU2be()
if err != nil {
return err
}
this.GlyphIdArray = append(this.GlyphIdArray, tmp340)
}
return err
}
func (this *Ttf_Cmap_Subtable_SegmentMappingToDeltaValues) SegCount() (v int, err error) {
if (this._f_segCount) {
return this.segCount, nil
}
this.segCount = int((this.SegCountX2 / 2))
this._f_segCount = true
return this.segCount, nil
}
type Ttf_Cmap_Subtable_TrimmedTableMapping struct {
FirstCode uint16
EntryCount uint16
GlyphIdArray []uint16
_io *kaitai.Stream
_root *Ttf
_parent *Ttf_Cmap_Subtable
}
func NewTtf_Cmap_Subtable_TrimmedTableMapping() *Ttf_Cmap_Subtable_TrimmedTableMapping {
return &Ttf_Cmap_Subtable_TrimmedTableMapping{
}
}
func (this *Ttf_Cmap_Subtable_TrimmedTableMapping) Read(io *kaitai.Stream, parent *Ttf_Cmap_Subtable, root *Ttf) (err error) {
this._io = io
this._parent = parent
this._root = root
tmp341, err := this._io.ReadU2be()
if err != nil {
return err
}
this.FirstCode = uint16(tmp341)
tmp342, err := this._io.ReadU2be()
if err != nil {
return err
}
this.EntryCount = uint16(tmp342)
for i := 0; i < int(this.EntryCount); i++ {
_ = i
tmp343, err := this._io.ReadU2be()
if err != nil {
return err
}
this.GlyphIdArray = append(this.GlyphIdArray, tmp343)
}
return err
}