Package org.apache.batik.gvt.text
Class BidiAttributedCharacterIterator
- java.lang.Object
-
- org.apache.batik.gvt.text.BidiAttributedCharacterIterator
-
- All Implemented Interfaces:
java.lang.Cloneable
,java.text.AttributedCharacterIterator
,java.text.CharacterIterator
public class BidiAttributedCharacterIterator extends java.lang.Object implements java.text.AttributedCharacterIterator
An attributed character iterator that does the reordering of the characters for bidirectional text. It reorders the characters so they are in visual order. It also assigns a BIDI_LEVEL attribute to each character which can be used to split the reordered ACI into text runs based on direction. ie. characters in a text run will all have the same bidi level.- Version:
- $Id: BidiAttributedCharacterIterator.java 1831630 2018-05-15 12:56:55Z ssteiner $
-
-
Field Summary
Fields Modifier and Type Field Description private int
chunkStart
private static java.lang.Float
FLOAT_NAN
private java.awt.font.FontRenderContext
frc
private int[]
newCharOrder
private java.text.AttributedCharacterIterator
reorderedACI
-
Constructor Summary
Constructors Modifier Constructor Description BidiAttributedCharacterIterator(java.text.AttributedCharacterIterator aci, java.awt.font.FontRenderContext frc, int chunkStart)
Constructs a character iterator that represents the visual display order of characters within bidirectional text.protected
BidiAttributedCharacterIterator(java.text.AttributedCharacterIterator reorderedACI, java.awt.font.FontRenderContext frc, int chunkStart, int[] newCharOrder)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.Object
clone()
Creates a copy of this iterator.char
current()
Gets the character at the current position (as returned by getIndex()).private int[]
doBidiReorder(int[] charIndices, int[] charLevels, int numChars, int highestLevel)
Calculates the display order of the characters based on the specified character levels.char
first()
Sets the position to getBeginIndex() and returns the character at that position.java.util.Set
getAllAttributeKeys()
Get the keys of all attributes defined on the iterator's text range.java.lang.Object
getAttribute(java.text.AttributedCharacterIterator.Attribute attribute)
Get the value of the named attribute for the current character.java.util.Map
getAttributes()
Returns a map with the attributes defined on the current character.int
getBeginIndex()
Returns the start index of the text.int[]
getCharMap()
int
getEndIndex()
Returns the end index of the text.int
getIndex()
Returns the current index.int
getRunLimit()
Get the index of the first character following the run with respect to all attributes containing the current character.int
getRunLimit(java.text.AttributedCharacterIterator.Attribute attribute)
Get the index of the first character following the run with respect to the given attribute containing the current character.int
getRunLimit(java.util.Set attributes)
Get the index of the first character following the run with respect to the given attributes containing the current character.int
getRunStart()
Get the index of the first character of the run with respect to all attributes containing the current character.int
getRunStart(java.text.AttributedCharacterIterator.Attribute attribute)
Get the index of the first character of the run with respect to the given attribute containing the current character.int
getRunStart(java.util.Set attributes)
Get the index of the first character of the run with respect to the given attributes containing the current character.char
last()
Sets the position to getEndIndex()-1 (getEndIndex() if the text is empty) and returns the character at that position.static int
mirrorChar(int c)
char
next()
Increments the iterator's index by one and returns the character at the new index.char
previous()
Decrements the iterator's index by one and returns the character at the new index.char
setIndex(int position)
Sets the position to the specified position in the text and returns that character.
-
-
-
Constructor Detail
-
BidiAttributedCharacterIterator
protected BidiAttributedCharacterIterator(java.text.AttributedCharacterIterator reorderedACI, java.awt.font.FontRenderContext frc, int chunkStart, int[] newCharOrder)
-
BidiAttributedCharacterIterator
public BidiAttributedCharacterIterator(java.text.AttributedCharacterIterator aci, java.awt.font.FontRenderContext frc, int chunkStart)
Constructs a character iterator that represents the visual display order of characters within bidirectional text.- Parameters:
aci
- The character iterator containing the characters in logical order.frc
- The current font render context
-
-
Method Detail
-
getCharMap
public int[] getCharMap()
-
doBidiReorder
private int[] doBidiReorder(int[] charIndices, int[] charLevels, int numChars, int highestLevel)
Calculates the display order of the characters based on the specified character levels. This method is recursive.- Parameters:
charIndices
- An array contianing the original indices of each char.charLevels
- An array containing the current levels of each char.numChars
- The number of chars to reorder.- Returns:
- An array contianing the reordered character indices.
-
getAllAttributeKeys
public java.util.Set getAllAttributeKeys()
Get the keys of all attributes defined on the iterator's text range.- Specified by:
getAllAttributeKeys
in interfacejava.text.AttributedCharacterIterator
-
getAttribute
public java.lang.Object getAttribute(java.text.AttributedCharacterIterator.Attribute attribute)
Get the value of the named attribute for the current character.- Specified by:
getAttribute
in interfacejava.text.AttributedCharacterIterator
-
getAttributes
public java.util.Map getAttributes()
Returns a map with the attributes defined on the current character.- Specified by:
getAttributes
in interfacejava.text.AttributedCharacterIterator
-
getRunLimit
public int getRunLimit()
Get the index of the first character following the run with respect to all attributes containing the current character.- Specified by:
getRunLimit
in interfacejava.text.AttributedCharacterIterator
-
getRunLimit
public int getRunLimit(java.text.AttributedCharacterIterator.Attribute attribute)
Get the index of the first character following the run with respect to the given attribute containing the current character.- Specified by:
getRunLimit
in interfacejava.text.AttributedCharacterIterator
-
getRunLimit
public int getRunLimit(java.util.Set attributes)
Get the index of the first character following the run with respect to the given attributes containing the current character.- Specified by:
getRunLimit
in interfacejava.text.AttributedCharacterIterator
-
getRunStart
public int getRunStart()
Get the index of the first character of the run with respect to all attributes containing the current character.- Specified by:
getRunStart
in interfacejava.text.AttributedCharacterIterator
-
getRunStart
public int getRunStart(java.text.AttributedCharacterIterator.Attribute attribute)
Get the index of the first character of the run with respect to the given attribute containing the current character.- Specified by:
getRunStart
in interfacejava.text.AttributedCharacterIterator
- Parameters:
attribute
- The attribute for whose appearance the first offset is requested.
-
getRunStart
public int getRunStart(java.util.Set attributes)
Get the index of the first character of the run with respect to the given attributes containing the current character.- Specified by:
getRunStart
in interfacejava.text.AttributedCharacterIterator
- Parameters:
attributes
- the Set of attributes which begins at the returned index.
-
clone
public java.lang.Object clone()
Creates a copy of this iterator.- Specified by:
clone
in interfacejava.text.CharacterIterator
- Overrides:
clone
in classjava.lang.Object
-
current
public char current()
Gets the character at the current position (as returned by getIndex()).- Specified by:
current
in interfacejava.text.CharacterIterator
-
first
public char first()
Sets the position to getBeginIndex() and returns the character at that position.- Specified by:
first
in interfacejava.text.CharacterIterator
-
getBeginIndex
public int getBeginIndex()
Returns the start index of the text.- Specified by:
getBeginIndex
in interfacejava.text.CharacterIterator
-
getEndIndex
public int getEndIndex()
Returns the end index of the text.- Specified by:
getEndIndex
in interfacejava.text.CharacterIterator
-
getIndex
public int getIndex()
Returns the current index.- Specified by:
getIndex
in interfacejava.text.CharacterIterator
-
last
public char last()
Sets the position to getEndIndex()-1 (getEndIndex() if the text is empty) and returns the character at that position.- Specified by:
last
in interfacejava.text.CharacterIterator
-
next
public char next()
Increments the iterator's index by one and returns the character at the new index.- Specified by:
next
in interfacejava.text.CharacterIterator
-
previous
public char previous()
Decrements the iterator's index by one and returns the character at the new index.- Specified by:
previous
in interfacejava.text.CharacterIterator
-
setIndex
public char setIndex(int position)
Sets the position to the specified position in the text and returns that character.- Specified by:
setIndex
in interfacejava.text.CharacterIterator
-
mirrorChar
public static int mirrorChar(int c)
- Parameters:
c
- the character to 'mirror'- Returns:
- either the 'mirror'-character for c or c itself
-
-