Documentation
¶
Overview ¶
Package woff2 implements a WOFF2 font decoder.
The WOFF2 font packaging format is specified at https://www.w3.org/TR/WOFF2/.
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type CollectionDirectory ¶
type CollectionDirectory struct {
Header CollectionHeader
Entries []CollectionFontEntry
}
CollectionDirectory is an optional table containing the font fragment descriptions of font collection entries.
type CollectionFontEntry ¶
type CollectionFontEntry struct {
NumTables uint16 // The number of tables in this font.
Flavor uint32 // The "sfnt version" of the font.
TableIndices []uint16 // The indicies identifying an entry in the Table Directory for each table in this font.
}
CollectionFontEntry represents a CollectionFontEntry record.
type CollectionHeader ¶
CollectionHeader is a part of CollectionDirectory.
type ExtendedMetadata ¶
type ExtendedMetadata struct{}
ExtendedMetadata is an optional block of extended metadata, represented in XML format and compressed for storage in the WOFF2 file.
type File ¶
type File struct {
Header Header
TableDirectory TableDirectory
// CollectionDirectory is present only if the font is a collection,
// as reported by Header.IsCollection.
CollectionDirectory *CollectionDirectory
// FontData is the concatenation of data for each table in the font.
// During storage, it's compressed using Brotli.
FontData []byte
ExtendedMetadata *ExtendedMetadata
// PrivateData is an optional block of private data for the font designer,
// foundry, or vendor to use.
PrivateData []byte
}
File represents a parsed WOFF2 file.
func Parse ¶
Parse parses the WOFF2 data from r.
Example ¶
package main
import (
"fmt"
"log"
"dmitri.shuralyov.com/font/woff2"
"github.com/shurcooL/gofontwoff"
)
func main() {
f, err := gofontwoff.Assets.Open("/Go-Regular.woff2")
if err != nil {
log.Fatalln(err)
}
defer f.Close()
font, err := woff2.Parse(f)
if err != nil {
log.Fatalln(err)
}
Dump(font)
}
func Dump(f woff2.File) {
dumpHeader(f.Header)
fmt.Println()
dumpTableDirectory(f.TableDirectory)
fmt.Println()
fmt.Println("CollectionDirectory:", f.CollectionDirectory)
fmt.Println("CompressedFontData:", len(f.FontData), "bytes (uncompressed size)")
fmt.Println("ExtendedMetadata:", f.ExtendedMetadata)
fmt.Println("PrivateData:", f.PrivateData)
}
func dumpHeader(hdr woff2.Header) {
fmt.Printf("Signature: %#08x\n", hdr.Signature)
fmt.Printf("Flavor: %#08x\n", hdr.Flavor)
fmt.Printf("Length: %d\n", hdr.Length)
fmt.Printf("NumTables: %d\n", hdr.NumTables)
fmt.Printf("Reserved: %d\n", hdr.Reserved)
fmt.Printf("TotalSfntSize: %d\n", hdr.TotalSfntSize)
fmt.Printf("TotalCompressedSize: %d\n", hdr.TotalCompressedSize)
fmt.Printf("MajorVersion: %d\n", hdr.MajorVersion)
fmt.Printf("MinorVersion: %d\n", hdr.MinorVersion)
fmt.Printf("MetaOffset: %d\n", hdr.MetaOffset)
fmt.Printf("MetaLength: %d\n", hdr.MetaLength)
fmt.Printf("MetaOrigLength: %d\n", hdr.MetaOrigLength)
fmt.Printf("PrivOffset: %d\n", hdr.PrivOffset)
fmt.Printf("PrivLength: %d\n", hdr.PrivLength)
}
func dumpTableDirectory(td woff2.TableDirectory) {
fmt.Println("TableDirectory:", len(td), "entries")
for _, t := range td {
fmt.Printf("\t{")
fmt.Printf("Flags: %#02x, ", t.Flags)
if t.Tag != nil {
fmt.Printf("Tag: %v, ", *t.Tag)
} else {
fmt.Printf("Tag: <nil>, ")
}
fmt.Printf("OrigLength: %v, ", t.OrigLength)
if t.TransformLength != nil {
fmt.Printf("TransformLength: %v", *t.TransformLength)
} else {
fmt.Printf("TransformLength: <nil>")
}
fmt.Printf("}\n")
}
}
Output: Signature: 0x774f4632 Flavor: 0x00010000 Length: 46132 NumTables: 14 Reserved: 0 TotalSfntSize: 140308 TotalCompressedSize: 46040 MajorVersion: 1 MinorVersion: 0 MetaOffset: 0 MetaLength: 0 MetaOrigLength: 0 PrivOffset: 0 PrivLength: 0 TableDirectory: 14 entries {Flags: 0x06, Tag: <nil>, OrigLength: 96, TransformLength: <nil>} {Flags: 0x00, Tag: <nil>, OrigLength: 1318, TransformLength: <nil>} {Flags: 0x08, Tag: <nil>, OrigLength: 176, TransformLength: <nil>} {Flags: 0x09, Tag: <nil>, OrigLength: 3437, TransformLength: <nil>} {Flags: 0x11, Tag: <nil>, OrigLength: 8, TransformLength: <nil>} {Flags: 0x0a, Tag: <nil>, OrigLength: 118912, TransformLength: 105020} {Flags: 0x0b, Tag: <nil>, OrigLength: 1334, TransformLength: 0} {Flags: 0x01, Tag: <nil>, OrigLength: 54, TransformLength: <nil>} {Flags: 0x02, Tag: <nil>, OrigLength: 36, TransformLength: <nil>} {Flags: 0x03, Tag: <nil>, OrigLength: 2662, TransformLength: <nil>} {Flags: 0x04, Tag: <nil>, OrigLength: 32, TransformLength: <nil>} {Flags: 0x05, Tag: <nil>, OrigLength: 6967, TransformLength: <nil>} {Flags: 0x07, Tag: <nil>, OrigLength: 4838, TransformLength: <nil>} {Flags: 0x0c, Tag: <nil>, OrigLength: 188, TransformLength: <nil>} CollectionDirectory: <nil> CompressedFontData: 124832 bytes (uncompressed size) ExtendedMetadata: <nil> PrivateData: []
type Header ¶
type Header struct {
Signature uint32 // The identifying signature; must be 0x774F4632 ('wOF2').
Flavor uint32 // The "sfnt version" of the input font.
Length uint32 // Total size of the WOFF file.
NumTables uint16 // Number of entries in directory of font tables.
Reserved uint16 // Reserved; set to 0.
TotalSfntSize uint32 // Total size needed for the uncompressed font data, including the sfnt header, directory, and font tables (including padding).
TotalCompressedSize uint32 // Total length of the compressed data block.
MajorVersion uint16 // Major version of the WOFF file.
MinorVersion uint16 // Minor version of the WOFF file.
MetaOffset uint32 // Offset to metadata block, from beginning of WOFF file.
MetaLength uint32 // Length of compressed metadata block.
MetaOrigLength uint32 // Uncompressed size of metadata block.
PrivOffset uint32 // Offset to private data block, from beginning of WOFF file.
PrivLength uint32 // Length of private data block.
}
Header is the file header with basic font type and version, along with offsets to metadata and private data blocks.
func (Header) IsCollection ¶
IsCollection reports whether this is a font collection, i.e., if the value of Flavor field is set to the TrueType Collection flavor 'ttcf'.
type TableDirectory ¶
type TableDirectory []TableDirectoryEntry
TableDirectory is the directory of font tables, containing size and other info.
func (TableDirectory) Tables ¶
func (td TableDirectory) Tables() []Table
Tables returns the derived high-level information about the tables in the table directory.