Class WordArea

  • All Implemented Interfaces:
    java.io.Serializable, java.lang.Cloneable

    public class WordArea
    extends InlineArea
    A string of characters without spaces
    See Also:
    Serialized Form
    • Field Detail

      • word

        protected java.lang.String word
        The text for this word area
      • letterAdjust

        protected int[] letterAdjust
        An array of width for adjusting the individual letters (optional)
      • levels

        protected int[] levels
        An array of resolved bidirectional levels corresponding to each character in word (optional)
      • gposAdjustments

        protected int[][] gposAdjustments
        An array of glyph positioning adjustments to apply to each glyph 'char' in word (optional)
      • reversed

        protected boolean reversed
        A flag indicating whether the content of word is reversed in relation to its original logical order.
      • nextIsSpace

        private boolean nextIsSpace
    • Constructor Detail

      • WordArea

        public WordArea​(int blockProgressionOffset,
                        int level,
                        java.lang.String word,
                        int[] letterAdjust,
                        int[] levels,
                        int[][] gposAdjustments,
                        boolean reversed,
                        boolean nextIsSpace)
        Create a word area
        Parameters:
        blockProgressionOffset - the offset for this area
        level - the bidirectional embedding level (or -1 if not defined) for word as a group
        word - the word string
        letterAdjust - the letter adjust array (may be null)
        levels - array of per-character (glyph) bidirectional levels, in case word area is heterogenously leveled
        gposAdjustments - array of general position adjustments or null if none apply
        reversed - true if word is known to be reversed at construction time
      • WordArea

        public WordArea​(int blockProgressionOffset,
                        int level,
                        java.lang.String word,
                        int[] letterAdjust,
                        int[] levels,
                        int[][] gposAdjustments,
                        boolean reversed)
      • WordArea

        public WordArea​(int blockProgressionOffset,
                        int level,
                        java.lang.String word,
                        int[] letterAdjust,
                        int[] levels,
                        int[][] gposAdjustments)
        Create a word area
        Parameters:
        blockProgressionOffset - the offset for this area
        level - the bidirectional embedding level (or -1 if not defined) for word as a group
        word - the word string
        letterAdjust - the letter adjust array (may be null)
        levels - array of per-character (glyph) bidirectional levels, in case word area is heterogenously leveled
        gposAdjustments - array of general position adjustments or null if none apply
    • Method Detail

      • getWord

        public java.lang.String getWord()
        Returns:
        Returns the word.
      • getLetterAdjustArray

        public int[] getLetterAdjustArray()
        Returns:
        the array of letter adjust widths
      • getBidiLevels

        public int[] getBidiLevels()
        Obtain per-character (glyph) bidi levels.
        Returns:
        a (possibly empty) array of levels or null (if none resolved)
      • getBidiLevels

        public int[] getBidiLevels​(int start,
                                   int end)

        Obtain per-character (glyph) bidi levels over a specified subsequence.

        If word has been reversed, then the subsequence is over the reversed word.

        Parameters:
        start - starting (inclusive) index of subsequence
        end - ending (exclusive) index of subsequence
        Returns:
        a (possibly null) array of per-character (glyph) levels over the specified sequence
      • bidiLevelAt

        public int bidiLevelAt​(int position)

        Obtain per-character (glyph) level at a specified index position.

        If word has been reversed, then the position is relative to the reversed word.

        Parameters:
        position - the index of the (possibly reversed) character from which to obtain the level
        Returns:
        a resolved bidirectional level or, if not specified, then -1
      • collectInlineRuns

        public java.util.List collectInlineRuns​(java.util.List runs)
        Description copied from class: InlineArea
        Collection bidi inline runs.
        Overrides:
        collectInlineRuns in class InlineArea
        Parameters:
        runs - current list of inline runs
        Returns:
        modified list of inline runs, having appended new run
      • getGlyphPositionAdjustments

        public int[][] getGlyphPositionAdjustments()
        Obtain per-character (glyph) position adjustments.
        Returns:
        a (possibly empty) array of adjustments, each having four elements, or null if no adjustments apply
      • glyphPositionAdjustmentsAt

        public int[] glyphPositionAdjustmentsAt​(int position)

        Obtain per-character (glyph) position adjustments at a specified index position.

        If word has been reversed, then the position is relative to the reversed word.

        Parameters:
        position - the index of the (possibly reversed) character from which to obtain the level
        Returns:
        an array of adjustments or null if none applies
      • reverse

        public void reverse​(boolean mirror)

        Reverse characters and corresponding per-character levels and glyph position adjustments.

        Parameters:
        mirror - if true, then perform mirroring if mirrorred characters
      • mirror

        public void mirror()

        Perform mirroring on mirrorable characters.

      • isReversed

        public boolean isReversed()

        Determined if word has been reversed (in relation to original logical order).

        If a word is reversed, then both its characters (glyphs) and corresponding per-character levels are in reverse order.

        Note: this information is used in order to process non-spacing marks during rendering as well as provide hints for caret direction.

        Returns:
        true if word is reversed
      • isNextIsSpace

        public boolean isNextIsSpace()
      • maybeAdjustLength

        private static int[] maybeAdjustLength​(int[] ia,
                                               int length)
      • maybeAdjustLength

        private static int[][] maybeAdjustLength​(int[][] im,
                                                 int length)
      • maybePopulateLevels

        private static int[] maybePopulateLevels​(int[] levels,
                                                 int level,
                                                 int count)
      • reverse

        private static void reverse​(int[] a)
      • reverse

        private static void reverse​(int[][] aa)