Peter B. West wrote:
Where does
repeated evaluation of the parse tree occur? Is there a parse tree object?
The necessary classes are somewhat distributed across the
packages. Some necessary classes are in fop.datatypes, the
common property superclasses are in fop.fo, with fop.fo.Property
being the top of the hierarchy, there's somethiing in fop.fo.expr
and the concrete implementations along with their makers (for
parsing) are of course generated.
The tree isn't build from classes deriving from a single class,
like the FO tree. Instead, the fop.fo.Property class is used for
both unevaluated and evaluated properties and for computing
functions, while length expressions are built from Length
subclasses (the only expressions of nontrivial complexity,
everything else which is not a shorthand or text-decoration is
either a single token or a function call). The relevant class
is LinearCombinationLength.
Unfortunately, I can't find the expression parser, but I recall
I've seen it.
The seemingly clever but ultimately misguided attempt to press
all property handling including shorthands, font-family lists
and text-decoration in a unified framework has lead to a number
of kludges which may make reengineering the whole stuff a bit
difficult.
Regards
J.Pietschmann