You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-dev@xmlgraphics.apache.org by bu...@apache.org on 2010/02/16 19:49:47 UTC

DO NOT REPLY [Bug 48548] FOP doesn't support change bar generation

https://issues.apache.org/bugzilla/show_bug.cgi?id=48548

--- Comment #1 from Stephan Thesing <th...@gmx.de> 2010-02-16 18:49:44 UTC ---
Status update:
I have been working on the change bar implementation (on and off) and reached
a state where I see first results.

Summary of what has been implemented and how:
 - the change-bar-begin and change-bar-end element and attribute recognition
was added
 - the semantics of change bars is that every element between the
change-bar-begin and -end is "under the influence" of the change bar and every
area it
   produces should be decorated by a change bar with the form/placement given 
   with the change-bar-begin element 
   Thus, for every FO object, one has to keep track, which change bars (can be
    more than one) influence it.  I added that to FONode and as the vector of
    "active" change bars has to be kept globally added that to FOUserAgent.
   Thus, after .fo parsing, at each FObj we have the vector of change bars
    influencing the FObj.
 - For each area generated by an object ("influenced area")
    influenced by change bars, a change bar
    area has to added (for each such change bar). 
   I choose to implement the rendering of change bars in the Render (in 
    AbstractRenderer.java), as the placement of change bar areas is not
    decideable locally to each "influenced area" but rather relative to column
    start/end/left/right edges, which seemed easier to implement when the
    renderer iterates through all areas anyhow.
   Thus, the "influenced areas" only record the same vector of change bars that
    their generating layout manager (via the FObj associated to the 
     LayoutManager) had, when they are generated.
   I modified the code under oa.fop.layoutmgr.* to copy over the vector of 
    change bars to the Area, which was modified to have an additional vector 
    element.

 - In the AbstractRenderer, the code that produces output for Block or other 
   Areas was modified to draw the change bars, if any is attached to the area
    (i.e. the Area was an "influenced area").
   Also, the computation of the relevant places along columns, etc. is computed
    there.
   This last change needs information about the reference orientation and the
    writing mode, as change bar placement can depend on the binding edge being
    coincident with start or stop edge and on can be explicitly be placed on
    "left" and "right" edges.
   This amounts to quite some data to record at the ReferenceRegion and handled
    in the various constructors.

>From a memory footprint point of view, the additional effort needed by this
approach is a vector of change bars (the change bar objects itself are shared),
and one change bar object for each begin-change-bar element in the input.
In addition, a reference to this vector is attached at every Area (but the
vector itself is not copied).

A first implementation seems to work but has only been tested on "normal"
change bar placement (along the inner edge of a one-column layout).
No writing mode or orientation variations have been tried yet:-)


A diff with my set of changes will follow in another attachment to this PR
soon.

-- 
Configure bugmail: https://issues.apache.org/bugzilla/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.