Type | Name | Description |
FIXED | version | initially defined as 0x00020000 |
ULONG | numSizes | Number of bitmapSizeTables |
Type | Name | Description |
ULONG | indexSubTableArrayOffset | offset to index subtable from beginning of EBLC. |
ULONG | indexTablesSize | number of bytes in corresponding index subtables and array |
ULONG | numberOfIndexSubTables | an index subtable for each range or format change |
ULONG | colorRef | not used; set to 0. |
sbitLineMetrics | hori | line metrics for text rendered horizontally |
sbitLineMetrics | vert | line metrics for text rendered vertically |
USHORT | startGlyphIndex | lowest glyph index for this size |
USHORT | endGlyphIndex | highest glyph index for this size |
BYTE | ppemX | horizontal pixels per Em |
BYTE | ppemY | vertical pixels per Em |
BYTE | bitDepth | set to 1 for now |
CHAR | flags | vertical or horizontal (see bitmapFlags) |
Type | Name |
CHAR | ascender |
CHAR | descender |
BYTE | widthMax |
CHAR | caretSlopeNumerator |
CHAR | caretSlopeDenominator |
CHAR | caretOffset |
CHAR | minOriginSB |
CHAR | minAdvanceSB |
CHAR | maxBeforeBL |
CHAR | minAfterBL |
CHAR | pad1 |
CHAR | pad2 |
Type | Value | Description |
CHAR | 0x01 | Horizontal |
CHAR | 0x02 | Vertical |
Associated with the image data for every glyph in a strike is a set of glyph metrics. These glyph metrics describe bounding box height and width, as well as side bearing and advance width information. The glyph metrics can be found in one of two places. For ranges of glyphs (not necessarily the whole strike) whose metrics may be different for each glyph, the glyph metrics are stored along with the glyph image data in the 'EBDT' table. Details of how this is done is described in the 'EBDT' section of this document. For ranges of glyphs whose metrics are identical for every glyph, we save significant space by storing a single copy of the glyph metrics in the indexSubTable in the 'EBLC'.
There are also two different formats for glyph metrics: big glyph metrics and small glyph metrics. Big glyph metrics define metrics information for both horizontal and vertical layouts. This is important in fonts (such as Kanji) where both types of layout may be used. Small glyph metrics define metrics information for one layout direction only. Which direction applies, horizontal or vertical, is determined by the 'flags' field in the bitmapSizeTable.
Type | Name |
BYTE | height |
BYTE | width |
CHAR | horiBearingX |
CHAR | horiBearingY |
BYTE | horiAdvance |
CHAR | vertBearingX |
CHAR | vertBearingY |
BYTE | vertAdvance |
Type | Name |
BYTE | height |
BYTE | width |
CHAR | BearingX |
CHAR | BearingY |
BYTE | Advance |
The bitmapSizeTable for each strike contains the offset to an array of indexSubTableArray elements. Each element describes a glyph code range and an offset to the indexSubTable for that range. This allows a strike to contain multiple glyph code ranges and to be represented in multiple index formats if desirable.
Type | Name | Description |
USHORT | firstGlyphIndex | first glyph code of this range |
USHORT | lastGlyphIndex | last glyph code of this range (inclusive) |
ULONG | additionalOffsetToIndexSubtable | add to indexSubTableArrayOffset to get offset from beginning of 'EBLC' |
Type | Name | Description |
USHORT | indexFormat | format of this indexSubTable |
USHORT | imageFormat | format of 'EBDT' image data |
ULONG | imageDataOffset | offset to image data in 'EBDT' table |
Type | Name | Description |
indexSubHeader | header | header info |
ULONG | offsetArray[] | offsetArray[glyphIndex]+imageDataOffset=glyphData |
Type | Name | Description |
indexSubHeader | header | header info |
ULONG | imageSize | all the glyphs are of the same size |
bigGlyphMetrics | bigMetrics | all glyphs have the same metrics; glyph data may be compressed, byte-aligned, or bit-aligned |
Type | Name | Description |
indexSubHeader | header | header info |
USHORT | offsetArray[] | offsetArray[glyphIndex]+imageDataOffset=glyphData |
Type | Name | Description |
indexSubHeader | header | header info |
ULONG | numGlyphs | array length |
codeOffsetPair | glyphArray[] | one per glyph; sizeOfArray=lastGlyph-firstGlyph+1 |
Type | Name | Description |
USHORT | glyphCode | code of glyph present |
USHORT | offset | location in EBDT |
Type | Name | Description |
indexSubHeader | header | header info |
ULONG | imageSize | all glyphs have the same data size |
bigGlyphMetrics | bigMetrics | all glyphs have the same metrics |
ULONG | numGlyphs | array length |
USHORT | glyphCodeArray[] | one per glyph, sorted by glyph code; sizeOfArray=lastGlyph-firstGlyph+1+1 pad if needed. |