Package org.apache.fop.fo
Class FOText
- java.lang.Object
-
- org.apache.fop.fo.FONode
-
- org.apache.fop.fo.FOText
-
- All Implemented Interfaces:
java.lang.CharSequence
,java.lang.Cloneable
,TextFragment
public class FOText extends FONode implements java.lang.CharSequence, TextFragment
A text node (PCDATA) in the formatting object tree.
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description private static class
FOText.MapRange
private class
FOText.TextCharIterator
-
Nested classes/interfaces inherited from class org.apache.fop.fo.FONode
FONode.FONodeIterator, FONode.GatherContextInfoFunction
-
-
Field Summary
Fields Modifier and Type Field Description private Block
ancestorBlock
Points to the ancestor Block object.private Length
baselineShift
private int[]
bidiLevels
private java.nio.Buffer
charBuffer
theCharBuffer
containing the textprivate java.text.CharacterIterator
charIterator
private java.awt.Color
color
private CommonFont
commonFont
private CommonHyphenation
commonHyphenation
private java.lang.String
country
private static int
IS_WORD_CHAR_FALSE
private static int
IS_WORD_CHAR_MAYBE
private static int
IS_WORD_CHAR_TRUE
private KeepProperty
keepTogether
private java.lang.String
language
private Property
letterSpacing
private SpaceProperty
lineHeight
private FOText
nextFOTextThisBlock
Points to the next FOText object created within the current block.private FOText
prevFOTextThisBlock
Points to the previous FOText object created within the current block.private java.lang.String
script
private StructureTreeElement
structureTreeElement
private CommonTextDecoration
textDecoration
Holds the text decoration values.private int
textTransform
private int
whiteSpaceCollapse
private int
whiteSpaceTreatment
private Property
wordSpacing
private int
wrapOption
-
Fields inherited from class org.apache.fop.fo.FONode
FO_URI, FOX_URI, locator, log, nodeChangeBarList, parent, siblings, startOfNodeChangeBarList
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description int
bidiLevelAt(int position)
Obtain bidirectional level of character at specified position, which must be a non-negative integer less than the length of this FO.void
bind(PropertyList pList)
Bind the givenPropertyList
to this node Does nothing by default.protected void
characters(char[] data, int start, int length, PropertyList list, org.xml.sax.Locator locator)
Adds characters.char
charAt(int position)
Obtain character at specified index within this fragment's sub-sequence, where index 0 corresponds to beginning index in overal text source, and subSequenceIndex must be less than ending index - beginning index.CharIterator
charIterator()
Return aCharIterator
over all characters in this nodeFONode
clone(FONode parent, boolean removeChildren)
Performs a shallow cloning operation, sets the clone's parent, and optionally cleans the list of child nodesprotected java.util.Stack<DelimitedTextRange>
collectDelimitedTextRanges(java.util.Stack<DelimitedTextRange> ranges, DelimitedTextRange currentRange)
Collect the sequence of delimited text ranges, where each new range is pushed onto RANGES, where default implementation collects ranges of child nodes.protected void
createBlockPointers(Block ancestorBlock)
This method is run as part of the ancestor Block's flushText(), to create xref pointers to the previous FOText objects within the same Blockvoid
endOfNode()
Primarily used for making final content model validation checks and/or informing theFOEventHandler
that the end of this FO has been reached.void
finalizeNode()
Finalize this node.protected java.lang.String
gatherContextInfo()
Gathers context information for the getContextInfo() method.Length
getBaseLineShift()
int
getBeginIndex()
Obtain beginning index (inclusive) of sub-sequence of fragment in overall text source.int
getBidiLevel()
Obtain associated bidi level (if known) or -1 if not.int[]
getBidiLevels()
Obtain bidirectional level of each character represented by this FOText.int[]
getBidiLevels(int start, int end)
Obtain bidirectional level of each character over interval [start,end).private java.nio.CharBuffer
getCharBuffer()
java.lang.CharSequence
getCharSequence()
Return the array of characters for this instance.java.awt.Color
getColor()
CommonFont
getCommonFont()
CommonHyphenation
getCommonHyphenation()
java.lang.String
getCountry()
int
getEndIndex()
Obtain ending index (exclusive) of sub-sequence of fragment in overall text source.java.text.CharacterIterator
getIterator()
Obtain reference to underlying iterator.KeepProperty
getKeepTogether()
java.lang.String
getLanguage()
Obtain associated language (if designated) or "none" if not.Property
getLetterSpacing()
SpaceProperty
getLineHeight()
java.lang.String
getLocalName()
Returns the local name (i.e.java.lang.String
getNormalNamespacePrefix()
Returns the normally used namespace prefix for this nodeprivate char
getRelativeCharInBlock(int i, int offset)
Finds a character within the current Block that is relative in location to a character in the current FOText.java.lang.String
getScript()
Obtain associated script (if designated) or "auto" if not.StructureTreeElement
getStructureTreeElement()
Returns the structure tree element associated to this object.CommonTextDecoration
getTextDecoration()
int
getWhitespaceTreatment()
Property
getWordSpacing()
int
getWrapOption()
boolean
isDelimitedTextRangeBoundary(int boundary)
Determine if node has a delimited text range boundary.private boolean
isStartOfWord(int i)
Determines whether a particular location in an FOText object's text is the start of a new "word".private static int
isWordChar(char inputChar)
Determines whether the input char should be considered part of a "word".int
length()
void
resetBuffer()
Resets the backingjava.nio.CharBuffer
void
setBidiLevel(int level, int start, int end)
Set bidirectional level over interval [start,end).void
setStructureTreeElement(StructureTreeElement structureTreeElement)
Sets the structure tree element.java.lang.CharSequence
subSequence(int start, int end)
private void
textTransform()
This method is run as part of endOfNode(), to handle the text-transform property for accumulated FOTextjava.lang.String
toString()
boolean
willCreateArea()
Check if this text node will create an area.-
Methods inherited from class org.apache.fop.fo.FONode
addCharacters, addChildNode, attachSiblings, canHaveMarkers, clone, collectDelimitedTextRanges, createPropertyList, decorateWithContextInfo, errorText, getBuilderContext, getChangeBarList, getChildNodes, getChildNodes, getContentHandlerFactory, getContextInfo, getContextInfoAlt, getExtensionAttachment, getFOEventHandler, getFOValidationEventProducer, getLocator, getLocatorString, getLogger, getName, getName, getNameId, getNamespaceURI, getNodePrefix, getNodeString, getParent, getRoot, getUserAgent, inMarker, invalidChildError, invalidChildError, invalidPropertyValueError, isBidiRangeBlockItem, isChangeBarElement, missingChildElementError, missingChildElementError, missingPropertyError, nodesOutOfOrderError, nodesOutOfOrderError, notSupportedChildError, processNode, removeChild, setLocator, startOfNode, tooManyNodesError, tooManyNodesError, tooManyNodesError, validateChildNode, validateChildNode, warningText
-
-
-
-
Field Detail
-
charBuffer
private java.nio.Buffer charBuffer
theCharBuffer
containing the text
-
charIterator
private java.text.CharacterIterator charIterator
-
commonFont
private CommonFont commonFont
-
commonHyphenation
private CommonHyphenation commonHyphenation
-
color
private java.awt.Color color
-
keepTogether
private KeepProperty keepTogether
-
letterSpacing
private Property letterSpacing
-
lineHeight
private SpaceProperty lineHeight
-
whiteSpaceTreatment
private int whiteSpaceTreatment
-
whiteSpaceCollapse
private int whiteSpaceCollapse
-
textTransform
private int textTransform
-
wordSpacing
private Property wordSpacing
-
wrapOption
private int wrapOption
-
baselineShift
private Length baselineShift
-
country
private java.lang.String country
-
language
private java.lang.String language
-
script
private java.lang.String script
-
prevFOTextThisBlock
private FOText prevFOTextThisBlock
Points to the previous FOText object created within the current block. If this is "null", this is the first such object.
-
nextFOTextThisBlock
private FOText nextFOTextThisBlock
Points to the next FOText object created within the current block. If this is "null", this is the last such object.
-
ancestorBlock
private Block ancestorBlock
Points to the ancestor Block object. This is used to keep track of which FOText nodes are descendants of the same block.
-
textDecoration
private CommonTextDecoration textDecoration
Holds the text decoration values. May be null
-
structureTreeElement
private StructureTreeElement structureTreeElement
-
bidiLevels
private int[] bidiLevels
-
IS_WORD_CHAR_FALSE
private static final int IS_WORD_CHAR_FALSE
- See Also:
- Constant Field Values
-
IS_WORD_CHAR_TRUE
private static final int IS_WORD_CHAR_TRUE
- See Also:
- Constant Field Values
-
IS_WORD_CHAR_MAYBE
private static final int IS_WORD_CHAR_MAYBE
- See Also:
- Constant Field Values
-
-
Constructor Detail
-
FOText
public FOText(FONode parent)
Creates a new FO text node.- Parameters:
parent
- FONode that is the parent of this object
-
-
Method Detail
-
characters
protected void characters(char[] data, int start, int length, PropertyList list, org.xml.sax.Locator locator) throws FOPException
Adds characters. Does nothing by default. To be overridden in subclasses that allow#PCDATA
content.- Overrides:
characters
in classFONode
- Parameters:
data
- array of characters containing text to be addedstart
- starting array element to addlength
- number of elements to addlist
- currently applicable PropertyListlocator
- location in the XSL-FO source file.- Throws:
FOPException
- if there's a problem during processing
-
getCharBuffer
private java.nio.CharBuffer getCharBuffer()
-
getCharSequence
public java.lang.CharSequence getCharSequence()
Return the array of characters for this instance.- Returns:
- a char sequence containing the text
-
clone
public FONode clone(FONode parent, boolean removeChildren) throws FOPException
Performs a shallow cloning operation, sets the clone's parent, and optionally cleans the list of child nodes- Overrides:
clone
in classFONode
- Parameters:
parent
- the intended parent of the cloneremoveChildren
- if true, clean the list of child nodes- Returns:
- the cloned FO node
- Throws:
FOPException
- if there's a problem while cloning the node
-
bind
public void bind(PropertyList pList) throws FOPException
Bind the givenPropertyList
to this node Does nothing by default. Subclasses should override this method in case they want to use the properties available on thePropertyList
.- Overrides:
bind
in classFONode
- Parameters:
pList
- thePropertyList
- Throws:
FOPException
- if there was an error when processing thePropertyList
-
endOfNode
public void endOfNode() throws FOPException
Primarily used for making final content model validation checks and/or informing theFOEventHandler
that the end of this FO has been reached. The default implementation simply callsFONode.finalizeNode()
, without sending any event to theFOEventHandler
.Note: the recommended way to override this method in subclasses is
super.endOfNode(); // invoke finalizeNode()
getFOEventHandler().endXXX(); // send endOfNode() notification
- Overrides:
endOfNode
in classFONode
- Throws:
FOPException
- if there's a problem during processing
-
finalizeNode
public void finalizeNode()
Finalize this node. This method can be overridden by subclasses to perform finishing tasks (cleanup, validation checks, ...) without triggering endXXX() events in theFOEventHandler
. The method is called by the defaultFONode.endOfNode()
implementation.- Overrides:
finalizeNode
in classFONode
-
willCreateArea
public boolean willCreateArea()
Check if this text node will create an area. This means either there is non-whitespace or it is preserved whitespace. Maybe this just needs to check length > 0, since char iterators handle whitespace.- Returns:
- true if this will create an area in the output
-
charIterator
public CharIterator charIterator()
Description copied from class:FONode
Return aCharIterator
over all characters in this node- Overrides:
charIterator
in classFONode
- Returns:
- a new TextCharIterator
-
createBlockPointers
protected void createBlockPointers(Block ancestorBlock)
This method is run as part of the ancestor Block's flushText(), to create xref pointers to the previous FOText objects within the same Block- Parameters:
ancestorBlock
- the ancestor fo:block
-
textTransform
private void textTransform()
This method is run as part of endOfNode(), to handle the text-transform property for accumulated FOText
-
isStartOfWord
private boolean isStartOfWord(int i)
Determines whether a particular location in an FOText object's text is the start of a new "word". The use of "word" here is specifically for the text-transform property, but may be useful for other things as well, such as word-spacing. The definition of "word" is somewhat ambiguous and appears to be definable by the user agent.- Parameters:
i
- index into charBuffer- Returns:
- True if the character at this location is the start of a new word.
-
getRelativeCharInBlock
private char getRelativeCharInBlock(int i, int offset)
Finds a character within the current Block that is relative in location to a character in the current FOText. Treats all FOText objects within a block as one unit, allowing text in adjoining FOText objects to be returned if the parameters are outside of the current object.- Parameters:
i
- index into the CharBufferoffset
- signed integer with relative position within the block of the character to return. To return the character immediately preceding i, pass -1. To return the character immediately after i, pass 1.- Returns:
- the character in the offset position within the block; if the offset points to an area outside of the block.
-
isWordChar
private static int isWordChar(char inputChar)
Determines whether the input char should be considered part of a "word". This is used primarily to determine whether the character immediately following starts a new word, but may have other uses. We have not found a definition of "word" in the standard (1.0), so the logic used here is based on the programmer's best guess.- Parameters:
inputChar
- the character to be tested.- Returns:
- int IS_WORD_CHAR_TRUE, IS_WORD_CHAR_FALSE, or IS_WORD_CHAR_MAYBE, depending on whether the character should be considered part of a word or not.
-
getCommonFont
public CommonFont getCommonFont()
- Returns:
- the Common Font Properties.
-
getCommonHyphenation
public CommonHyphenation getCommonHyphenation()
- Returns:
- the Common Hyphenation Properties.
-
getColor
public java.awt.Color getColor()
- Returns:
- the "color" trait.
-
getKeepTogether
public KeepProperty getKeepTogether()
- Returns:
- the "keep-together" trait.
-
getLetterSpacing
public Property getLetterSpacing()
- Returns:
- the "letter-spacing" trait.
-
getLineHeight
public SpaceProperty getLineHeight()
- Returns:
- the "line-height" trait.
-
getWhitespaceTreatment
public int getWhitespaceTreatment()
- Returns:
- the "white-space-treatment" trait
-
getWordSpacing
public Property getWordSpacing()
- Returns:
- the "word-spacing" trait.
-
getWrapOption
public int getWrapOption()
- Returns:
- the "wrap-option" trait.
-
getTextDecoration
public CommonTextDecoration getTextDecoration()
- Returns:
- the "text-decoration" trait.
-
getBaseLineShift
public Length getBaseLineShift()
- Returns:
- the baseline-shift trait
-
getCountry
public java.lang.String getCountry()
- Returns:
- the country trait
-
getIterator
public java.text.CharacterIterator getIterator()
Description copied from interface:TextFragment
Obtain reference to underlying iterator.- Specified by:
getIterator
in interfaceTextFragment
-
getBeginIndex
public int getBeginIndex()
Description copied from interface:TextFragment
Obtain beginning index (inclusive) of sub-sequence of fragment in overall text source.- Specified by:
getBeginIndex
in interfaceTextFragment
-
getEndIndex
public int getEndIndex()
Description copied from interface:TextFragment
Obtain ending index (exclusive) of sub-sequence of fragment in overall text source.- Specified by:
getEndIndex
in interfaceTextFragment
-
getLanguage
public java.lang.String getLanguage()
Description copied from interface:TextFragment
Obtain associated language (if designated) or "none" if not.- Specified by:
getLanguage
in interfaceTextFragment
-
getScript
public java.lang.String getScript()
Description copied from interface:TextFragment
Obtain associated script (if designated) or "auto" if not.- Specified by:
getScript
in interfaceTextFragment
-
getBidiLevel
public int getBidiLevel()
Description copied from interface:TextFragment
Obtain associated bidi level (if known) or -1 if not.- Specified by:
getBidiLevel
in interfaceTextFragment
-
toString
public java.lang.String toString()
- Specified by:
toString
in interfacejava.lang.CharSequence
- Overrides:
toString
in classjava.lang.Object
-
getLocalName
public java.lang.String getLocalName()
Returns the local name (i.e. without namespace prefix) of the node- Specified by:
getLocalName
in classFONode
- Returns:
- the local name of this node
-
getNormalNamespacePrefix
public java.lang.String getNormalNamespacePrefix()
Returns the normally used namespace prefix for this node- Specified by:
getNormalNamespacePrefix
in classFONode
- Returns:
- the normally used namespace prefix for this kind of node (ex. "fo" for XSL-FO)
-
gatherContextInfo
protected java.lang.String gatherContextInfo()
Gathers context information for the getContextInfo() method.- Overrides:
gatherContextInfo
in classFONode
- Returns:
- the collected context information or null, if none is available
-
charAt
public char charAt(int position)
Obtain character at specified index within this fragment's sub-sequence, where index 0 corresponds to beginning index in overal text source, and subSequenceIndex must be less than ending index - beginning index.- Specified by:
charAt
in interfacejava.lang.CharSequence
- Specified by:
charAt
in interfaceTextFragment
-
subSequence
public java.lang.CharSequence subSequence(int start, int end)
- Specified by:
subSequence
in interfacejava.lang.CharSequence
- Specified by:
subSequence
in interfaceTextFragment
-
length
public int length()
- Specified by:
length
in interfacejava.lang.CharSequence
-
resetBuffer
public void resetBuffer()
Resets the backingjava.nio.CharBuffer
-
isDelimitedTextRangeBoundary
public boolean isDelimitedTextRangeBoundary(int boundary)
Description copied from class:FONode
Determine if node has a delimited text range boundary. N.B. that we report this to be true by default, while specific subclasses override this method to report false.- Overrides:
isDelimitedTextRangeBoundary
in classFONode
- Parameters:
boundary
- one of {EN_BEFORE, EN_AFTER, or EN_BOTH} enumeration constants- Returns:
- true if indicated boundary (or boundaries) constitute a delimited text range boundary.
-
setStructureTreeElement
public void setStructureTreeElement(StructureTreeElement structureTreeElement)
Description copied from class:FONode
Sets the structure tree element.- Overrides:
setStructureTreeElement
in classFONode
- Parameters:
structureTreeElement
- set.
-
getStructureTreeElement
public StructureTreeElement getStructureTreeElement()
Description copied from class:FONode
Returns the structure tree element associated to this object.- Overrides:
getStructureTreeElement
in classFONode
- Returns:
- the structure tree element
-
setBidiLevel
public void setBidiLevel(int level, int start, int end)
Set bidirectional level over interval [start,end).- Parameters:
level
- the resolved levelstart
- the starting index of intervalend
- the ending index of interval
-
getBidiLevels
public int[] getBidiLevels()
Obtain bidirectional level of each character represented by this FOText.- Returns:
- a (possibly empty) array of bidi levels or null in case no bidi levels have been assigned
-
getBidiLevels
public int[] getBidiLevels(int start, int end)
Obtain bidirectional level of each character over interval [start,end).- Parameters:
start
- the starting index of intervalend
- the ending index of interval- Returns:
- a (possibly empty) array of bidi levels or null in case no bidi levels have been assigned
-
bidiLevelAt
public int bidiLevelAt(int position) throws java.lang.IndexOutOfBoundsException
Obtain bidirectional level of character at specified position, which must be a non-negative integer less than the length of this FO.- Parameters:
position
- an offset position into FO's characters- Returns:
- a resolved bidi level or -1 if default
- Throws:
java.lang.IndexOutOfBoundsException
- if position is not non-negative integer or is greater than or equal to length
-
collectDelimitedTextRanges
protected java.util.Stack<DelimitedTextRange> collectDelimitedTextRanges(java.util.Stack<DelimitedTextRange> ranges, DelimitedTextRange currentRange)
Description copied from class:FONode
Collect the sequence of delimited text ranges, where each new range is pushed onto RANGES, where default implementation collects ranges of child nodes.- Overrides:
collectDelimitedTextRanges
in classFONode
- Parameters:
ranges
- a stack of delimited text rangescurrentRange
- the current range or null (if none)- Returns:
- the (possibly) updated stack of delimited text ranges
-
-