public class TextPosnBase extends TextMarkupBase
Class TextPosnBase represents a position in a particular text stream.
Positions occur between items (typically characters) in the stream, as well as before the first item and after the last. A position has an index number; zero corresponds to the position at the start of the stream and values increment from there. Thus, the last position index is equal to the total number of items in the stream.
Technically there are actually two positions between each pair of items. Though they share the same index number, one comes before the other. These are referred to as a before position and an after position. When an insertion happens between the two characters, the before position does not advance while the after one does. The before and after distinction is largely an internal feature of AXTE.
A text position also has an affinity to one of the two surrounding items. Affinity is independent from the notion of before/after. For example a before position might have an affinity to the character that comes after. Affinity is used only in resolving ambiguous positions in bi-directional text. It is normally used only within AXTE. The default affinity is to the character that comes after the position.
With the addition of support for bidirectional text, the text position object now carries a directionality flag. The RTL (right to left) flag is true if the position object was populated in an operation that processed RTL text. This flag is normally not used by application-level software. Typically only AXTE uses it, to "remember" state for ambiguous positions.
An instance of this class points into an instance of a text stream, but that stream has no knowledge of the TextPosnBase objects looking at it. Modifying the text stream may cause some or all of those objects to become invalid. Typically one uses class TextPosnBase for short-term stream manipulation, and derived class TextPosition for longer-term access to the text stream.
This class supports a number of text unit movement operations, for example next word or previous character. The concepts of next and previous can be interpred in either a logical or a visual sense. Logical moves apply to the underlying text stream data. Any Next operation increases the position's stream index, while any Previous operation decreases it. For visual moves, Next implies to the right and Previous to the left. In right-to-left text, left is synonomous with decreasing index and right with increasing index. In right-to-left text, left corresoponds to increasing index and right corresponds to decreasing index. The caller choses logical or visual mode in the parameter list of movement operations. For visual moves to be effective, there must be a text display associated with the stream.
For more information, please see the extenral documentation.
Modifier and Type | Field and Description |
---|---|
static int |
AFFINITY_AFTER
Affinity enumeration.
|
static int |
AFFINITY_BEFORE |
static int |
POSN_AFTER
Position type enumeration.
|
static int |
POSN_BEFORE |
static int |
WORD_MODE_ALGORITHMIC |
static int |
WORD_MODE_LEGACY
Word positioning modes.
|
static int |
WORD_MODE_LOCALE_SENSITIVE |
Constructor and Description |
---|
TextPosnBase()
Default constructor.
|
TextPosnBase(TextPosnBase oSource)
Copy constructor.
|
TextPosnBase(TextStream poNewStream) |
TextPosnBase(TextStream poNewStream,
int nNewIndex) |
TextPosnBase(TextStream poNewStream,
int nNewIndex,
int eNewPosn)
Constructor with stream, index and optional position type.
|
Modifier and Type | Method and Description |
---|---|
int |
affinity()
Obtain the affinity of this position.
|
void |
affinity(int eAffinity)
Change the position type (before/after) of this position.
|
void |
associate(TextStream poNewStream) |
void |
associate(TextStream poNewStream,
int nNewIndex) |
void |
associate(TextStream poNewStream,
int nNewIndex,
int eNewPosn)
Overridable: Associate position with a new stream and index.
|
void |
attr(TextAttr oAttr)
Overridden: Insert attribute change.
|
TextAttr |
attribute()
Obtain the attributes in effect at this position.
|
void |
attribute(TextAttr oNewAttr) |
void |
attribute(TextAttr oNewAttr,
boolean bRaw)
Set attributes at this position.
|
TextAttr |
attributePtr()
Obtain a pointer to the attributes in effect at this position.
|
int |
charPosition()
Return the number of characters that precede this position.
|
TextPosnBase |
charPosition(int nIndex)
Create a position with the associated stream, given a character
index.
|
TextRange |
charRange(int lStart,
int lLength)
Create a range with the associated, given a character index and
length.
|
void |
copyFrom(TextPosnBase oSource)
Assignment operator.
|
void |
deleteAhead() |
void |
deleteAhead(int nDelete) |
void |
deleteAhead(int nDelete,
boolean bRaw)
Delete ahead from this position in the associated stream.
|
void |
deleteBack() |
void |
deleteBack(int nDelete) |
void |
deleteBack(int nDelete,
boolean bRaw)
Delete back from this position in the associated stream.
|
boolean |
down()
Move down one line.
|
boolean |
end() |
boolean |
end(boolean bVisual)
Move to the end of the line.
|
void |
enumerateMarkers(List<TextMarker> oMarkers,
boolean bPositionMarkers,
boolean bRangeMarkers)
Enumerate markers at this position.
|
boolean |
equals(Object object)
Equality comparison.
|
void |
field(TextField poField)
Overridden: Insert field.
|
void |
first() |
void |
first(boolean bVisual)
Move to the first position in the associated stream.
|
boolean |
gt(TextPosnBase oCompare)
Is this position greater than the given one?.
|
boolean |
gte(TextPosnBase oCompare)
Is this position greater than or equal to the given one?.
|
int |
hashCode() |
int |
index()
Return the index number of this position within its stream.
|
void |
index(int nNewIndex)
Change the position's index number.
|
void |
insert(char cInsert)
Insert a character at this position.
|
void |
insert(String sInsert)
Insert a string at this position.
|
TextEmbed |
insert(TextEmbed poEmbed)
Insert an embedded object at this position.
|
TextField |
insert(TextField poField)
Insert an embedded field at this position.
|
TextMarker |
insert(TextMarker poMarker)
Insert a position marker at the position represented by this position
object.
|
void |
insert(TextStream oInsert)
Insert rich text at this position.
|
void |
insertPara()
Insert a paragraph mark at this position.
|
boolean |
isAtStart() |
boolean |
isAtStart(boolean bCheckFirstLineOnly)
Determine whether the position is at the start of a line.
|
boolean |
isRTL()
Query whether the position was populated as a result of processing
RTL text.
|
void |
last() |
void |
last(boolean bVisual)
Move to the last position in the associated stream.
|
boolean |
legacyPositioning() |
boolean |
lt(TextPosnBase oCompare)
Is this position less than the given one?.
|
boolean |
lte(TextPosnBase oCompare)
Is this position less than or equal to the given one?.
|
void |
marker(TextMarker poMarker)
Append a position marker to the markup output.
|
void |
markerEnd(TextMarker poMarker)
End a range marker in the markup output.
|
TextMarker |
markerStart(TextMarker poMarker)
Start a range marker in the markup output.
|
int |
next() |
int |
next(boolean bTestOnly)
Move to the next position in the associated stream.
|
int |
next(int eNullFrameMode) |
int |
next(int eNullFrameMode,
boolean bTestOnly) |
TextAttr |
nextAttr() |
TextAttr |
nextAttr(boolean bTestOnly)
Obtain the next attribute change.
|
int |
nextChar() |
int |
nextChar(boolean bTestOnly)
Obtain the next character.
|
int[] |
nextData(boolean bTestOnly) |
TextEmbed |
nextEmbed() |
TextEmbed |
nextEmbed(boolean bTestOnly)
Obtain the next embedded object.
|
TextField |
nextField() |
TextField |
nextField(boolean bTestOnly)
Obtain the next embedded field object.
|
boolean |
nextLine()
Move to the start of the next line.
|
boolean |
nextPara()
Move to the start of the next paragraph.
|
boolean |
nextUserPosn() |
boolean |
nextUserPosn(boolean bVisual)
Advance one user position.
|
int |
nextUserPosnType() |
int |
nextUserPosnType(boolean bVisual)
Advance one user position; return item type.
|
int |
nextUserPosnType(int eNullFrameMode) |
int |
nextUserPosnType(int eNullFrameMode,
boolean bVisual) |
int[] |
nextUserPosnTypeData(boolean bVisual) |
boolean |
nextWord() |
boolean |
nextWord(boolean bVisual) |
boolean |
nextWord(boolean bVisual,
int eWordMode)
Position at the start of the next word.
|
boolean |
notEqual(TextPosnBase oCompare)
Inequality comparison.
|
void |
para()
Overridden: Insert a paragraph mark.
|
void |
paraEnd()
Move to the end of the current paragraph.
|
void |
paraStart()
Move to the start of the current paragraph.
|
int |
position()
Obtain the position type (before or after) of this position.
|
void |
position(int ePosition)
Change the position type (before/after) of this position.
|
int |
prev() |
int |
prev(boolean bTestOnly)
Move to the previous position in the associated stream.
|
int |
prev(int eNullFrameMode) |
int |
prev(int eNullFrameMode,
boolean bTestOnly) |
TextAttr |
prevAttr() |
TextAttr |
prevAttr(boolean bTestOnly)
Obtain the previous attribute change.
|
int |
prevChar() |
int |
prevChar(boolean bTestOnly)
Obtain previous next character.
|
int[] |
prevData(boolean bTestOnly) |
TextEmbed |
prevEmbed() |
TextEmbed |
prevEmbed(boolean bTestOnly)
Obtain previous next embedded object.
|
TextField |
prevField() |
TextField |
prevField(boolean bTestOnly)
Obtain previous next embedded field object.
|
boolean |
prevLine()
Move to the start of the current or previous line.
|
boolean |
prevPara()
Move to the start of the current or previous paragraph.
|
boolean |
prevUserPosn() |
boolean |
prevUserPosn(boolean bVisual)
Back up one user position.
|
int |
prevUserPosnType() |
int |
prevUserPosnType(boolean bVisual)
Back up one user position; return item type.
|
int |
prevUserPosnType(int eNullFrameMode) |
int |
prevUserPosnType(int eNullFrameMode,
boolean bVisual) |
int[] |
prevUserPosnTypeData(boolean bVisual) |
boolean |
prevWord() |
boolean |
prevWord(boolean bVisual) |
boolean |
prevWord(boolean bVisual,
int eWordMode)
Position at the start of the previous word.
|
void |
setKeyboard()
Establish the keyboard (left-to-right or right-to-left), based on
this position object.
|
void |
setRTL(boolean bRTL)
Change the position object's RTL flag.
|
boolean |
start() |
boolean |
start(boolean bVisual)
Move to the start of the line.
|
TextStream |
stream() |
void |
text(String sText)
Overridden: Insert text.
|
void |
tighten(boolean bSkipAhead)
Adjust the position around attribute changes.
|
boolean |
up()
Move up one line.
|
void |
wordEnd() |
void |
wordEnd(int eWordMode)
Move to the end of the current word.
|
void |
wordStart() |
void |
wordStart(int eWordMode)
Move to the start of the current word.
|
closeScopedBlock, issueFirstPara, openScopedBlock
public static final int POSN_AFTER
As mentioned in the class description, each position object can be designated as a before position or an after position. These enumeration values are used with methods that manipulate the position type.
public static final int POSN_BEFORE
public static final int AFFINITY_AFTER
As mentioned in the class description, each position object has an affinity to either the character that comes before in logical order or the one that comes after. The affinity is used to determine where to place the cursor when a direction change at the position causes the glyphs for the surrounding characters to be disjoint.
public static final int AFFINITY_BEFORE
public static final int WORD_MODE_LEGACY
AXTE was originally developed with a relatively simple sense of word boundaries. Essentially these occured only between space and non-space characters. With the advent of language-related features such as spelling and hyphenation, more sophisticated word analysis became necessary.
This enumeration has values that can be used in word-oriented methods of a number of AXTE classes to specify the type of word handling required.
public static final int WORD_MODE_ALGORITHMIC
public static final int WORD_MODE_LOCALE_SENSITIVE
public TextPosnBase()
The position is not initially associated with any stream.
public TextPosnBase(TextPosnBase oSource)
Copy all contents of the source position, including stream association, index and before/after state.
oSource
- Source position object to copy.public TextPosnBase(TextStream poNewStream, int nNewIndex, int eNewPosn)
Construct a position object associated with the given stream and optional position type. The position is placed at the specified index.
poNewStream
- Stream to associate with. NULL creates a
position object with no initial association.nNewIndex
- Index number for the position. Will be truncated if too
large.eNewPosn
- (optional) Position type to use for the object.
Default is POSN_AFTER.public TextPosnBase(TextStream poNewStream, int nNewIndex)
public TextPosnBase(TextStream poNewStream)
public void associate(TextStream poNewStream, int nNewIndex, int eNewPosn)
This method associates the position object with the specified stream, at the specified index position.
poNewStream
- Stream to associate with. NULL leaves the
position object unassociated (and untracked).nNewIndex
- Index of this position in the new stream. If the
value is too large, it is truncated.eNewPosn
- (optional) Position type to use for the object.
Default is POSN_AFTER.public void associate(TextStream poNewStream, int nNewIndex)
public void associate(TextStream poNewStream)
public int index()
public void index(int nNewIndex)
nNewIndex
- - New index within the associated stream. If the
value is too large, it is truncated.public int position()
public void position(int ePosition)
ePosition
- POSN_BEFORE changes to a before position;
POSN_AFTER changes to an after position.public int affinity()
public void affinity(int eAffinity)
eAffinity
- AFFINITY_BEFORE if this position is to associate
with the item before; AFFINITY_AFTER to associate with the one after.public boolean isRTL()
This method exists primarily for internal AXTE use and tends to have a meaningful value only in interactive applications.
public void setRTL(boolean bRTL)
This method exists primarily for internal AXTE use. The RTL flag tends to have a meaningful value only in interactive applications.
bRTL
- TRUE if the position was populated as a result of
processing RTL text; FALSE otherwise.public void enumerateMarkers(List<TextMarker> oMarkers, boolean bPositionMarkers, boolean bRangeMarkers)
oMarkers
- - Array to contain pointers to the enumerated
markers. Any previous contents are removed by the call. Even though
the returned array contains non-const pointers to markers, those
markers are owned by AXTE and must not be deleted by the client,
though the client can cache pointers to these markers provide that it
participates in the marker reference counting mechanism.bPositionMarkers
- - True (default) if all position markers at
this position are to be included in the array. False if position
markers are to be excluded.bRangeMarkers
- - True if all range markers that span this
position are to be included in the array. False (default) if range
markers are to be excluded. A range marker spans the position if it
starts before or at the position, and ends at or after the position.public void first(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public void first()
public void last(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public void last()
public int next(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, the position simply returns
the next item type and does not actually move. If FALSE (default),
the position does move.public int next(int eNullFrameMode)
public int next()
public int next(int eNullFrameMode, boolean bTestOnly)
public int[] nextData(boolean bTestOnly)
public int prev(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, the position simply returns
the previous item type and does not actually move. If FALSE
(default), the position does move.public int prev(int eNullFrameMode)
public int prev()
public int prev(int eNullFrameMode, boolean bTestOnly)
public int[] prevData(boolean bTestOnly)
public int nextChar(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
advanced so that it falls immediately after the character returned.public int nextChar()
public int prevChar(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
backed up so that it falls immediately before the character returned.public int prevChar()
public TextField nextField(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
advanced so that it falls immediately after the embedded field
object.public TextField nextField()
public TextField prevField(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
backed up so that it falls immediately before the embedded field
object.public TextField prevField()
public TextEmbed nextEmbed(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
advanced so that it falls immediately after the embedded object.public TextEmbed nextEmbed()
public TextEmbed prevEmbed(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
backed up so that it falls immediately before the embedded object.public TextEmbed prevEmbed()
public TextAttr nextAttr(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
advanced so that it falls immediately after the attribute object
returned.public TextAttr nextAttr()
public TextAttr prevAttr(boolean bTestOnly)
bTestOnly
- - (optional) If TRUE, this position remains
unchanged after the call. If FALSE (default), the position is
backed up so that it falls immediately before the attribute object
returned.public TextAttr prevAttr()
public boolean nextUserPosn(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public boolean nextUserPosn()
public boolean prevUserPosn(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public boolean prevUserPosn()
public int nextUserPosnType(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public int nextUserPosnType()
public int nextUserPosnType(int eNullFrameMode)
public int nextUserPosnType(int eNullFrameMode, boolean bVisual)
public int[] nextUserPosnTypeData(boolean bVisual)
public int prevUserPosnType(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public int prevUserPosnType()
public int prevUserPosnType(int eNullFrameMode)
public int prevUserPosnType(int eNullFrameMode, boolean bVisual)
public int[] prevUserPosnTypeData(boolean bVisual)
public boolean nextWord(boolean bVisual, int eWordMode)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.eWordMode
- - Word positioning mode (see the enumeration
described in class TextPosnBase
).public boolean nextWord(boolean bVisual)
public boolean nextWord()
public boolean prevWord(boolean bVisual, int eWordMode)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.eWordMode
- - Word positioning mode (see the enumeration
described in class TextPosnBase
).public boolean prevWord(boolean bVisual)
public boolean prevWord()
public boolean nextLine()
public boolean prevLine()
public boolean nextPara()
public boolean prevPara()
public void wordStart(int eWordMode)
eWordMode
- - Word positioning mode (see the enumeration
described in class TextPosnBase
).public void wordStart()
public void wordEnd(int eWordMode)
eWordMode
- - Word positioning mode (see the enumeration
described in class TextPosnBase
).public void wordEnd()
public void paraStart()
public void paraEnd()
public boolean up()
public boolean down()
public boolean start(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public boolean start()
public boolean end(boolean bVisual)
bVisual
- - TRUE for a visual move; FALSE (default) for a
logical move.public boolean end()
public boolean isAtStart(boolean bCheckFirstLineOnly)
bCheckFirstLineOnly
- - (optional) If TRUE, further restrict the
test to check for start of the first line only. If FALSE (default),
check for the start of any line.public boolean isAtStart()
public void tighten(boolean bSkipAhead)
bSkipAhead
- - If TRUE, advance the position over any
immediately subsequent attribute changes in the stream. If FALSE,
back up the position over any immediately previous attribute changes
in the stream.public int charPosition()
public TextPosnBase charPosition(int nIndex)
nIndex
- - Character position to search for.public TextRange charRange(int lStart, int lLength)
lStart
- - Character position to search for.lLength
- - Number of characters to include in the range.public void insert(char cInsert)
cInsert
- - Character to insert.public void insert(String sInsert)
sInsert
- - String to insert.public void insert(TextStream oInsert)
oInsert
- - Rich text stream to insert.public TextField insert(TextField poField)
poField
- - Field to insert.public TextEmbed insert(TextEmbed poEmbed)
poEmbed
- - Object to insert.public void insertPara()
public TextMarker insert(TextMarker poMarker)
poMarker
- - Pointer to marker to insert. Note that markers are
always cloned on insertion, so a copy actually gets inserted. The
caller continues to retain ownership of the instance referred to by
this parameter, and can delete it any time after the call.public void deleteAhead(int nDelete, boolean bRaw)
nDelete
- - (optional) Number of items to delete. Default
is 1.bRaw
- - (optional) TRUE for raw delete (see above); FALSE
(default) for normal delete.public void deleteAhead(int nDelete)
public void deleteAhead()
public void deleteBack(int nDelete, boolean bRaw)
nDelete
- - (optional) Number of items to delete. Default
is 1.bRaw
- - (optional) TRUE for raw delete (see above); FALSE
(default) for normal delete.public void deleteBack(int nDelete)
public void deleteBack()
public TextAttr attributePtr()
attributePtr
in class TextMarkupBase
public TextAttr attribute()
public void attribute(TextAttr oNewAttr, boolean bRaw)
oNewAttr
- - Attributes to insert.bRaw
- - (optional) Deprecated parameter is ignored.public final void attribute(TextAttr oNewAttr)
public void setKeyboard()
public void copyFrom(TextPosnBase oSource)
Copy the entire content of the source position object including stream association, index and before/after type.
oSource
- Source position object to copy.public boolean equals(Object object)
public boolean notEqual(TextPosnBase oCompare)
Two text positions are considered unequal if they are associated with the different streams, have the different index numbers or the different before/after position types. Note that the current implementation is rather crude in that it still compares index even when both streams are NULL.
oCompare
- Position to compare against.public boolean lt(TextPosnBase oCompare)
oCompare
- - Position to compare against.public boolean lte(TextPosnBase oCompare)
oCompare
- - Position to compare against.public boolean gt(TextPosnBase oCompare)
oCompare
- - Position to compare against.public boolean gte(TextPosnBase oCompare)
oCompare
- - Position to compare against.public void para()
para
in class TextMarkupBase
public void field(TextField poField)
field
in class TextMarkupBase
poField
- - Field to be inserted.public void text(String sText)
text
in class TextMarkupBase
sText
- - Text to be inserted.public void attr(TextAttr oAttr)
attr
in class TextMarkupBase
oAttr
- - Attribute change to insert.public boolean legacyPositioning()
legacyPositioning
in class TextMarkupBase
public void marker(TextMarker poMarker)
TextMarkupBase
marker
in class TextMarkupBase
poMarker
- - Pointer to marker to append. Note that markers are
always cloned on insertion, so a copy actually gets inserted. The
caller continues to retain ownership of the instance referred to by
this parameter, and can delete it any time after the call.public TextMarker markerStart(TextMarker poMarker)
TextMarkupBase
There must be a corresponding call to MarkerEnd() sometime later in the translation for the markup operation to be considered valid.
markerStart
in class TextMarkupBase
poMarker
- - Pointer to marker to append. Note that markers are
always cloned on insertion, so a copy actually gets inserted. The
caller continues to retain ownership of the instance referred to by
this parameter, and can delete it any time after the call.public void markerEnd(TextMarker poMarker)
TextMarkupBase
This must occur some time after a corresponding call to MarkerStart() earlier in the translation for the markup operation to be considered valid.
markerEnd
in class TextMarkupBase
poMarker
- - Pointer to the marker object returned by the
earlier call to MarkerStart(). The client must use the return value
of that earlier call, not the value passed into it. In making this
call, the client transfers ownership if its reference to AXTE and
must not subsequenty attempt to remove that reference on this marker.public TextStream stream()
Copyright © 2010 - 2020 Adobe. All Rights Reserved