Assembly Alternatives Table (ASMB) defines the mechanism for complex justification, including Kashida. The principle is to associate assembly alternative lists to current glyphs. An assembly alternative list will have multiple glyph assemblies, being a glyph list with optional stretchable parts.
The table follows the structure of GSUB and GPOS. Listing lookups only.
subtableFormat: UInt16: Format identifier: format = 1coverage: Offset16 Coverage: Offset to Coverage table, from beginning of this subtable.category: UInt16: Category identifier.asmCount: UInt16: Quantity of entries inglueTransformArray.asmArray: Array glueCount (Offset16 AsmAltList): Array of assembly alternative lists.
subtableFormat: UInt16: Format identifier: format = 1coverage: Offset16 Coverage: Offset to Coverage table, from beginning of this subtable.inputCondition: Offset16 FilteringCondition: Offset to filtering condition at subject glyph. Could benullfor always-accept.backtrackGlyphCount: UInt16: Number of glyphs in the backtracking sequence.backtrackCoverageOffsets: Array backtrackGlyphCount (Offset16 Coverage): Array of offsets to coverage tables in backtracking sequence, in glyph sequence order.backtrackFilters: Array backtrackGlyphCount (Offset16 FilteringCondition): Array of offsets to filtering conditions in backtracking sequence, in glyph sequence order. Could be null.lookaheadGlyphCount: UInt16: Number of glyphs in lookahead sequence.lookaheadCoverageOffsets: Array lookaheadGlyphCount (Offset16 Coverage): Array of offsets to coverage tables in lookahead sequence, in glyph sequence order.lookaheadFilters: Array lookaheadGlyphCount (Offset16 FilteringCondition): Array of offsets to filtering conditions in lookahead sequence, in glyph sequence order. Could be null.category: UInt16: Category identifier.asmCount: UInt16: Quantity of entries inglueTransformArray.asmArray: Array glueCount (Offset16 AsmAltList): Array of assembly alternative lists. May benullfor cancelling glue application.
format: Uint16: Format identifier. Set to 1.catRangeCount: UInt16catRanges: Array catRangeCount FilteringCategoryRange
catMin: UInt16: Min category number. Inclusive.catMax: UInt16: Max category number. Inclusive.
alternativesCount: UInt16:Quantity of glue alternativesalternatives: Array alternativesCount GlyphAsmRun: Array of the alternative run.
glyphCount: UInt16: Quantity of glyphs in this alternative run.parts: Array glyphCount GlyphAssemblyPart: Array of glyphs in this alt run.
glyphID: GIDmarkHolderClass: UInt16: TODOstretchFactor: UInt8- When being zero, this glyph should not be stretched.
- When being positive, this glyph should be stretched. Larger value represents more proportion.
stretchElevation: ValueRecord:- Defines the elevation when repeating this glyph. Useful for cases like Kashida in Nastaliq.
- Mark handling