Class XMLWhiteSpaceHandler
java.lang.Object
org.apache.fop.fo.XMLWhiteSpaceHandler
Class encapsulating the functionality for white-space-handling
during refinement stage.
The
Each time one of the variants is called, white-space is handled for all
The iteration always starts at
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.
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
newChildisnull, 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.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprivate classHelper class, used during white-space handling to look ahead, and see if the next character is a linefeed (or if there will be an equivalent effect during layout, i.e.private classHelper class to store unfinished inline nodes together with an iterator that starts at the first white-space character in the sequence of trailing white-space -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate booleanTrue if the last char was a linefeedprivate RecursiveCharIteratorprivate booleanprivate CharIteratorprivate booleanTrue if we are in a run of white spaceprivate intprivate Stackprivate booleanprivate intCounter, increased every time a non-white-space is encounteredprivate Listprivate intprivate int -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprivate voidprivate voidprivate voidvoidhandleWhiteSpace(FObjMixed fo, FONode firstTextNode) Handle white-space for the fo that is passed in, starting at firstTextNode (when a nested FO is encountered)voidhandleWhiteSpace(FObjMixed fo, FONode firstTextNode, FONode nextChild) Handle white-space for the fo that is passed in, starting at firstTextNodeprotected final voidreset()Reset the handler, release all references
-
Field Details
-
inWhiteSpace
private boolean inWhiteSpaceTrue if we are in a run of white space -
afterLinefeed
private boolean afterLinefeedTrue if the last char was a linefeed -
nonWhiteSpaceCount
private int nonWhiteSpaceCountCounter, 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 -
charIter
-
pendingInlines
-
nestedBlockStack
-
firstWhiteSpaceInSeq
-
-
Constructor Details
-
XMLWhiteSpaceHandler
public XMLWhiteSpaceHandler()
-
-
Method Details
-
handleWhiteSpace
Handle white-space for the fo that is passed in, starting at firstTextNode- Parameters:
fo- the FO for which to handle white-spacefirstTextNode- the node at which to startnextChild- the node that will be added to the list after firstTextNode
-
reset
protected final void reset()Reset the handler, release all references -
handleWhiteSpace
-
handleWhiteSpace
private void handleWhiteSpace() -
addPendingInline
private void addPendingInline() -
handlePendingInlines
private void handlePendingInlines()
-