Class 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.
    • Field Detail

      • charBuffer

        private java.nio.CharBuffer charBuffer
        the CharBuffer containing the text
      • charIterator

        private java.text.CharacterIterator charIterator
      • color

        private java.awt.Color color
      • letterSpacing

        private Property letterSpacing
      • 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
      • bidiLevels

        private int[] bidiLevels
    • 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 class FONode
        Parameters:
        data - array of characters containing text to be added
        start - starting array element to add
        length - number of elements to add
        list - currently applicable PropertyList
        locator - location in the XSL-FO source file.
        Throws:
        FOPException - if there's a problem during processing
      • 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 class FONode
        Parameters:
        parent - the intended parent of the clone
        removeChildren - 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 given PropertyList to this node Does nothing by default. Subclasses should override this method in case they want to use the properties available on the PropertyList.
        Overrides:
        bind in class FONode
        Parameters:
        pList - the PropertyList
        Throws:
        FOPException - if there was an error when processing the PropertyList
      • endOfNode

        public void endOfNode()
                       throws FOPException
        Primarily used for making final content model validation checks and/or informing the FOEventHandler that the end of this FO has been reached. The default implementation simply calls FONode.finalizeNode(), without sending any event to the FOEventHandler.

        Note: the recommended way to override this method in subclasses is

        super.endOfNode(); // invoke finalizeNode()

        getFOEventHandler().endXXX(); // send endOfNode() notification

        Overrides:
        endOfNode in class FONode
        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 the FOEventHandler. The method is called by the default FONode.endOfNode() implementation.
        Overrides:
        finalizeNode in class FONode
      • 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
      • 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 CharBuffer
        offset - 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 interface TextFragment
      • 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 interface TextFragment
      • 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 interface TextFragment
      • getLanguage

        public java.lang.String getLanguage()
        Description copied from interface: TextFragment
        Obtain associated language (if designated) or "none" if not.
        Specified by:
        getLanguage in interface TextFragment
      • getScript

        public java.lang.String getScript()
        Description copied from interface: TextFragment
        Obtain associated script (if designated) or "auto" if not.
        Specified by:
        getScript in interface TextFragment
      • getBidiLevel

        public int getBidiLevel()
        Description copied from interface: TextFragment
        Obtain associated bidi level (if known) or -1 if not.
        Specified by:
        getBidiLevel in interface TextFragment
      • toString

        public java.lang.String toString()
        Specified by:
        toString in interface java.lang.CharSequence
        Overrides:
        toString in class java.lang.Object
      • getLocalName

        public java.lang.String getLocalName()
        Returns the local name (i.e. without namespace prefix) of the node
        Specified by:
        getLocalName in class FONode
        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 class FONode
        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 class FONode
        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 interface java.lang.CharSequence
        Specified by:
        charAt in interface TextFragment
      • subSequence

        public java.lang.CharSequence subSequence​(int start,
                                                  int end)
        Specified by:
        subSequence in interface java.lang.CharSequence
        Specified by:
        subSequence in interface TextFragment
      • length

        public int length()
        Specified by:
        length in interface java.lang.CharSequence
      • resetBuffer

        public void resetBuffer()
        Resets the backing java.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 class FONode
        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 class FONode
        Parameters:
        structureTreeElement - set.
      • setBidiLevel

        public void setBidiLevel​(int level,
                                 int start,
                                 int end)
        Set bidirectional level over interval [start,end).
        Parameters:
        level - the resolved level
        start - the starting index of interval
        end - 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 interval
        end - 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 class FONode
        Parameters:
        ranges - a stack of delimited text ranges
        currentRange - the current range or null (if none)
        Returns:
        the (possibly) updated stack of delimited text ranges