Thanks Simon for your comments.

--- Simon Pepping <[EMAIL PROTECTED]> wrote:
> On Tue, Jul 13, 2004 at 12:16:22AM -0000,
> [EMAIL PROTECTED] wrote:
> > gmazza      2004/07/12 17:16:22
> >   Log:
> >   1.) Combined the AreaTree and FOTreeHandler into
> a new AreaTreeHandler
> >   object.  FOTreeHandler was primarily acting as
> an AreaTreeHandler,
> >   and AreaTree had a 1-to-1 relationship with it. 
> Comments most welcome.
> 
> This change seems to cross the border between FO
> tree and area tree. 
> 

Not really, FOTreeHandler already had an AreaTree
object as its child.  I incorporated the two, and am
now deeming *its* child, apps.AreaTreeModel, as the
abstraction of our area tree.  (Using SAX, we don't
really have an FOTree or an Area tree, just
abstractions.)

> AreaTree had no reference to the fo package (apart
> from a reference to
> fo.extensions). AreaTreeHandler extends a class in
> the fo package and
> refers to fo/PageSequence.
> 

Yes, it now receives messages from fo/PageSequence and
activates the AreaTreeModel when it receives them.  

> FOInputHandler implements a number of methods of the
> SAX
> contenthandler, which is between the fo file and the
> FO tree. 

Err--not at the time of invocation of startFOThis()
and endFOThat() within FOInputHandler--at that stage,
we're now at FOtree moving forward (-->MIF, or -->RTF,
or -->AreaTree.)  (The spec's model is "DOM", but
we're really running "SAX".)

> The area
> package now inherits these methods. 

Yes, like MIFHandler and RTFHandler, the other two
subclasses of FOInputHandler, and digesters of
FOTreeBuilder, AreaTreeHandler now inherits these
methods, because it handles SAXEvents (again, like
MIFHandler and RTFHandler).

The nomenclature was deliberate--while all three
actually were "FOTreeHandlers"--indeed, they all need
an FOTree--only a certain segment of render types need
an area tree, and for those, AreaTreeHandler's name is
nicely self-documenting.  

> AreaTreeHandler
> throws
> SAXExceptions. This is a parser based exception
> type.
> 

Indeed--needs them just as much as MIFHandler and
RTFHandler do.

> FOTreeHandler.endPageSequence is the FO tree's
> activation of a new
> episode of area tree building. 

No, it was an *Area Tree-needing render type (i.e.,
PDF, PS)* activation of a new episode of area tree
building.  We just called it "FOTreeHandler", but it
really served as an AreaTreeHandler. (Our
"FOTreeHandler", if anything, was actually
"FOTreeBuilder"!)

> Now the area tree
> activates itself,
> based on an event in the FO tree.
> 

I didn't see it that way, because my view of the
AreaTree is actually apps.AreaTreeModel, the child of
AreaTreeHandler.  But there is indeed more circularity
now (PageSequence used to interact with both
FOTreeHandler and AreaTree, now it interacts just with
AreaTreeHandler)--not necessarily a bad thing, and may
be one of the keys to solving XSL.

When AreaTreeHandler gets an indication from an
fo:page-sequence that it is finished, it activates
AreaTreeModel to start the generation of areas.  It is
very similar to what MIF and RTFHandler would do when
they get messages from the FOTree: act on the data. 
In addition to renaming it, I moved this out of the fo
package and into AreaTree package, because I thought
that the proper home of "AreaTreeHandler", just like a
RTF rendering package is the proper home of
RTFHandler, and the MIF one is of "MIFHandler".  It
just didn't belong in the fo-directory, because if we
used that logic all three should belong there.

Also, in merging the two I was able to remove a lot of
code that dealt with communication between the
two--moving out this administrative code dropped the
combined size by about a third (IIRC 500&265LOC
before, 465LOC after.) It does help in comprehension.

Take a second look at it--you may find it has a lot of
potential for our future work.  And we'll get input
from others.

Sorry for the long post.

Glen

Reply via email to