Class XMLWhiteSpaceHandler


  • public class XMLWhiteSpaceHandler
    extends java.lang.Object
    Class encapsulating the functionality for white-space-handling during refinement stage. The handleWhiteSpace() methods are called during FOTree-building and marker-cloning:
    • from FObjMixed.addChildNode()
    • from FObjMixed.endOfNode()
    • from FObjMixed.handleWhiteSpaceFor()

    Each time one of the variants is called, white-space is handled for all FOText or Character nodes that were added:
    • either prior to newChild (and after the previous non-text child node)
    • or, if newChild is null, after the previous non-text child

    The iteration always starts at firstTextNode, goes on until the last text-node is reached, and deals only with FOText or Character nodes.
    Note: if the method is called from an inline's endOfNode(), there is too little context to decide whether trailing white-space may be removed, so the pending inline is stored in a List, together with an iterator for which the next() method returns the first in the trailing sequence of white- space characters. This List is processed again at the end of the ancestor block.
    • Field Detail

      • inWhiteSpace

        private boolean inWhiteSpace
        True if we are in a run of white space
      • afterLinefeed

        private boolean afterLinefeed
        True if the last char was a linefeed
      • nonWhiteSpaceCount

        private int nonWhiteSpaceCount
        Counter, increased every time a non-white-space is encountered
      • linefeedTreatment

        private int linefeedTreatment
      • whiteSpaceTreatment

        private int whiteSpaceTreatment
      • whiteSpaceCollapse

        private int whiteSpaceCollapse
      • endOfBlock

        private boolean endOfBlock
      • nextChildIsBlockLevel

        private boolean nextChildIsBlockLevel
      • pendingInlines

        private java.util.List pendingInlines
      • nestedBlockStack

        private java.util.Stack nestedBlockStack
      • firstWhiteSpaceInSeq

        private CharIterator firstWhiteSpaceInSeq
    • Constructor Detail

      • XMLWhiteSpaceHandler

        public XMLWhiteSpaceHandler()
    • Method Detail

      • handleWhiteSpace

        public void handleWhiteSpace​(FObjMixed fo,
                                     FONode firstTextNode,
                                     FONode nextChild)
        Handle white-space for the fo that is passed in, starting at firstTextNode
        Parameters:
        fo - the FO for which to handle white-space
        firstTextNode - the node at which to start
        nextChild - the node that will be added to the list after firstTextNode
      • reset

        protected final void reset()
        Reset the handler, release all references
      • handleWhiteSpace

        public void handleWhiteSpace​(FObjMixed fo,
                                     FONode firstTextNode)
        Handle white-space for the fo that is passed in, starting at firstTextNode (when a nested FO is encountered)
        Parameters:
        fo - the FO for which to handle white-space
        firstTextNode - the node at which to start
      • handleWhiteSpace

        private void handleWhiteSpace()
      • addPendingInline

        private void addPendingInline()
      • handlePendingInlines

        private void handlePendingInlines()