public final class Bidi extends Object
Use a Bidi object to get the information on the position reordering of a
bidirectional text, such as Arabic or Hebrew. The natural display ordering of
horizontal text in these languages is from right to left, while they order
numbers from left to right.
If the text contains multiple runs, the information of each run can be obtained from the run index. The level of any particular run indicates the direction of the text as well as the nesting level. Left-to-right runs have even levels while right-to-left runs have odd levels.
| Modifier and Type | Field and Description |
|---|---|
static int |
DIRECTION_DEFAULT_LEFT_TO_RIGHT
Constant that indicates the default base level.
|
static int |
DIRECTION_DEFAULT_RIGHT_TO_LEFT
Constant that indicates the default base level.
|
static int |
DIRECTION_LEFT_TO_RIGHT
Constant that specifies the default base level as 0 (left-to-right).
|
static int |
DIRECTION_RIGHT_TO_LEFT
Constant that specifies the default base level as 1 (right-to-left).
|
| Constructor and Description |
|---|
Bidi(AttributedCharacterIterator paragraph)
Creates a
Bidi object from the AttributedCharacterIterator of a paragraph text. |
Bidi(char[] text,
int textStart,
byte[] embeddings,
int embStart,
int paragraphLength,
int flags)
Creates a
Bidi object. |
Bidi(String paragraph,
int flags)
Creates a
Bidi object. |
| Modifier and Type | Method and Description |
|---|---|
boolean |
baseIsLeftToRight()
Returns whether the base level is from left to right.
|
Bidi |
createLineBidi(int lineStart,
int lineLimit)
Creates a new
Bidi object containing the information of one line
from this object. |
int |
getBaseLevel()
Returns the base level.
|
int |
getLength()
Returns the length of the text.
|
int |
getLevelAt(int offset)
Returns the level of the given character.
|
int |
getRunCount()
Returns the number of runs in the text, at least 1.
|
int |
getRunLevel(int run)
Returns the level of the given run.
|
int |
getRunLimit(int run)
Returns the limit offset of the given run.
|
int |
getRunStart(int run)
Returns the start offset of the given run.
|
boolean |
isLeftToRight()
Returns true if the text is from left to right, that is, both the base
direction and the text direction is from left to right.
|
boolean |
isMixed()
Returns true if the text direction is mixed.
|
boolean |
isRightToLeft()
Returns true if the text is from right to left, that is, both the base
direction and the text direction is from right to left.
|
static void |
reorderVisually(byte[] levels,
int levelStart,
Object[] objects,
int objectStart,
int count)
Reorders a range of objects according to their specified levels.
|
static boolean |
requiresBidi(char[] text,
int start,
int limit)
Indicates whether a range of characters of a text requires a
Bidi
object to display properly. |
String |
toString()
Returns a string containing a concise, human-readable description of this
object.
|
public static final int DIRECTION_DEFAULT_LEFT_TO_RIGHT
public static final int DIRECTION_DEFAULT_RIGHT_TO_LEFT
public static final int DIRECTION_LEFT_TO_RIGHT
public static final int DIRECTION_RIGHT_TO_LEFT
public Bidi(AttributedCharacterIterator paragraph)
Bidi object from the AttributedCharacterIterator of a paragraph text. The RUN_DIRECTION
attribute determines the base direction of the bidirectional text. If it
is not specified explicitly, the algorithm uses
DIRECTION_DEFAULT_LEFT_TO_RIGHT by default. The BIDI_EMBEDDING attribute
specifies the level of embedding for each character. Values between -1
and -62 denote overrides at the level's absolute value, values from 1 to
62 indicate embeddings, and the 0 value indicates the level is calculated
by the algorithm automatically. For the character with no BIDI_EMBEDDING
attribute or with a improper attribute value, such as a null
value, the algorithm treats its embedding level as 0. The NUMERIC_SHAPING
attribute specifies the instance of NumericShaper used to convert
European digits to other decimal digits before performing the bidi
algorithm.paragraph - the String containing the paragraph text to perform the
algorithm.IllegalArgumentException - if paragraph == nullTextAttribute.BIDI_EMBEDDING,
TextAttribute.NUMERIC_SHAPING,
TextAttribute.RUN_DIRECTIONpublic Bidi(char[] text,
int textStart,
byte[] embeddings,
int embStart,
int paragraphLength,
int flags)
Bidi object.text - the char array of the paragraph text that is processed.textStart - the index in text of the start of the paragraph.embeddings - the embedding level array of the paragraph text, specifying
the embedding level information for each character. Values
between -1 and -61 denote overrides at the level's absolute
value, values from 1 to 61 indicate embeddings, and the 0
value indicates the level is calculated by the algorithm
automatically.embStart - the index in embeddings of the start of the paragraph.paragraphLength - the length of the text to perform the algorithm.flags - indicates the base direction of the bidirectional text. It is
expected that this will be one of the direction constant
values defined in this class. An unknown value is treated as
DIRECTION_DEFAULT_LEFT_TO_RIGHT.IllegalArgumentException - if textStart, embStart, or paragraphLength is negative; if
text.length < textStart + paragraphLength or
embeddings.length < embStart + paragraphLength.DIRECTION_LEFT_TO_RIGHT,
DIRECTION_RIGHT_TO_LEFT,
DIRECTION_DEFAULT_RIGHT_TO_LEFT,
DIRECTION_DEFAULT_LEFT_TO_RIGHTpublic Bidi(String paragraph, int flags)
Bidi object.paragraph - the string containing the paragraph text to perform the
algorithm on.flags - indicates the base direction of the bidirectional text. It is
expected that this will be one of the direction constant
values defined in this class. An unknown value is treated as
DIRECTION_DEFAULT_LEFT_TO_RIGHT.DIRECTION_LEFT_TO_RIGHT,
DIRECTION_RIGHT_TO_LEFT,
DIRECTION_DEFAULT_RIGHT_TO_LEFT,
DIRECTION_DEFAULT_LEFT_TO_RIGHTpublic boolean baseIsLeftToRight()
public Bidi createLineBidi(int lineStart, int lineLimit)
Bidi object containing the information of one line
from this object.lineStart - the start offset of the line.lineLimit - the limit of the line.IllegalArgumentException - if lineStart < 0, lineLimit < 0, lineStart > lineLimit or if lineStart is greater
than the length of this object's paragraph text.public int getBaseLevel()
public int getLength()
public int getLevelAt(int offset)
public int getRunCount()
public int getRunLevel(int run)
public int getRunLimit(int run)
public int getRunStart(int run)
public boolean isLeftToRight()
public boolean isMixed()
public boolean isRightToLeft()
public static void reorderVisually(byte[] levels,
int levelStart,
Object[] objects,
int objectStart,
int count)
Bidi object. The range
of objects at index from objectStart to objectStart + count will be reordered according to the range of levels
at index from levelStart to levelStart + count.levels - the level array, which is already determined.levelStart - the start offset of the range of the levels.objects - the object array to reorder.objectStart - the start offset of the range of objects.count - the count of the range of objects to reorder.IllegalArgumentException - if count, levelStart or objectStart
is negative; if count > levels.length - levelStart or
if count > objects.length - objectStart.public static boolean requiresBidi(char[] text,
int start,
int limit)
Bidi
object to display properly.text - the char array of the text.start - the start offset of the range of characters.limit - the limit offset of the range of characters.true if the range of characters requires a Bidi
object; false otherwise.IllegalArgumentException - if start or limit is negative; start >
limit or limit is greater than the length of this
object's paragraph text.public String toString()
ObjectgetClass().getName() + '@' + Integer.toHexString(hashCode())
See Writing a useful
toString method
if you intend implementing your own toString method.