org.apache.fop.complexscripts.fonts

## Class GlyphPositioningSubtable

- java.lang.Object
- - org.apache.fop.complexscripts.fonts.GlyphSubtable
  - - org.apache.fop.complexscripts.fonts.GlyphPositioningSubtable

- All Implemented Interfaces:
    Comparable, GlyphPositioning

      public abstract class GlyphPositioningSubtable
      extends GlyphSubtable
      implements GlyphPositioning

  The `GlyphPositioningSubtable` implements an abstract base of a glyph subtable, providing a default implementation of the `GlyphPositioning` interface.

  This work was originally authored by Glenn Adams (gadams@apache.org).

- - ### Field Summary

    - ### Fields inherited from class org.apache.fop.complexscripts.fonts.GlyphSubtable

      `LF_IGNORE_BASE, LF_IGNORE_LIGATURE, LF_IGNORE_MARK, LF_INTERNAL_USE_REVERSE_SCAN, LF_MARK_ATTACHMENT_TYPE, LF_RESERVED, LF_RIGHT_TO_LEFT, LF_USE_MARK_FILTERING_SET`

  - ### Constructor Summary

    Constructors
    Modifier | Constructor and Description
    --- | ---
    `protected` | `GlyphPositioningSubtable(String id, int sequence, int flags, int format, GlyphCoverageTable coverage)` Instantiate a `GlyphPositioningSubtable`.

  - ### Method Summary

    All Methods Static Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `int` | `getTableType()`
    `String` | `getTypeName()`
    `boolean` | `isCompatible(GlyphSubtable subtable)` Determine if a glyph subtable is compatible with this glyph subtable.
    `boolean` | `position(GlyphPositioningState ps)` Perform glyph positioning at the current index, mutating the positioning state object as required.
    `static boolean` | `position(GlyphPositioningState ps, GlyphPositioningSubtable[] sta, int sequenceIndex)` Apply positioning using specified state and subtable array.
    `static boolean` | `position(GlyphSequence gs, String script, String language, String feature, int fontSize, GlyphPositioningSubtable[] sta, int[] widths, int[][] adjustments, ScriptContextTester sct)` Apply positioning.
    `boolean` | `usesReverseScan()`

    - ### Methods inherited from class org.apache.fop.complexscripts.fonts.GlyphSubtable

      `compareTo, equals, getClasses, getCoverage, getCoverageIndex, getCoverageSize, getEntries, getFlags, getFlags, getFormat, getGDEF, getLookupId, getSequence, getTable, getType, hashCode, resolveLookupReferences, setTable, usesReverseScan`

    - ### Methods inherited from class java.lang.Object

      `clone, finalize, getClass, notify, notifyAll, toString, wait, wait, wait`

- - ### Constructor Detail

    - #### GlyphPositioningSubtable

          protected GlyphPositioningSubtable(String id,
                                             int sequence,
                                             int flags,
                                             int format,
                                             GlyphCoverageTable coverage)

      Instantiate a `GlyphPositioningSubtable`.
      Parameters:
        `id` - subtable identifier
        `sequence` - subtable sequence
        `flags` - subtable flags
        `format` - subtable format
        `coverage` - subtable coverage table

  - ### Method Detail

    - #### getTableType

          public int getTableType()

      Specified by:
        `getTableType` in class `GlyphSubtable`
      Returns:
        this subtable's table type

    - #### getTypeName

          public String getTypeName()

      Specified by:
        `getTypeName` in class `GlyphSubtable`
      Returns:
        this subtable's type name

    - #### isCompatible

          public boolean isCompatible(GlyphSubtable subtable)

      Determine if a glyph subtable is compatible with this glyph subtable. Two glyph subtables are compatible if the both may appear in a single lookup table.
      Specified by:
        `isCompatible` in class `GlyphSubtable`
      Parameters:
        `subtable` - a glyph subtable to determine compatibility
      Returns:
        true if specified subtable is compatible with this glyph subtable, where by compatible is meant that they share the same lookup type

    - #### usesReverseScan

          public boolean usesReverseScan()

      Specified by:
        `usesReverseScan` in class `GlyphSubtable`
      Returns:
        true if subtable uses reverse scanning of glyph sequence, meaning from the last glyph in a glyph sequence to the first glyph

    - #### position

          public boolean position(GlyphPositioningState ps)

      Perform glyph positioning at the current index, mutating the positioning state object as required. Only the context associated with the current index is processed.
      Specified by:
        `position` in interface `GlyphPositioning`
      Parameters:
        `ps` - glyph positioning state object
      Returns:
        true if the glyph subtable applies, meaning that the current context matches the associated input context glyph coverage table; note that returning true does not mean any position adjustment occurred; it only means that no further glyph subtables for the current lookup table should be applied.

    - #### position

          public static final boolean position(GlyphPositioningState ps,
                                               GlyphPositioningSubtable[] sta,
                                               int sequenceIndex)

      Apply positioning using specified state and subtable array. For each position in input sequence, apply subtables in order until some subtable applies or none remain. If no subtable applied or no input was consumed for a given position, then apply default action (no adjustments and advance). If `sequenceIndex` is non-negative, then apply subtables only when current position matches `sequenceIndex` in relation to the starting position. Furthermore, upon successful application at `sequenceIndex`, then discontinue processing the remaining
      Parameters:
        `ps` - positioning state
        `sta` - array of subtables to apply
        `sequenceIndex` - if non negative, then apply subtables only at specified sequence index
      Returns:
        true if a non-zero adjustment occurred

    - #### position

          public static final boolean position(GlyphSequence gs,
                                               String script,
                                               String language,
                                               String feature,
                                               int fontSize,
                                               GlyphPositioningSubtable[] sta,
                                               int[] widths,
                                               int[][] adjustments,
                                               ScriptContextTester sct)

      Apply positioning.
      Parameters:
        `gs` - input glyph sequence
        `script` - tag
        `language` - tag
        `feature` - tag
        `fontSize` - the font size
        `sta` - subtable array
        `widths` - array
        `adjustments` - array (receives output adjustments)
        `sct` - script context tester
      Returns:
        true if a non-zero adjustment occurred

Copyright © 2025 Apache Software Foundation. All rights reserved.