You are viewing a plain text version of this content. The canonical link for it is here.
Posted to fop-commits@xmlgraphics.apache.org by Apache Wiki <wi...@apache.org> on 2012/04/17 08:06:09 UTC

[Xmlgraphics-fop Wiki] Update of "Design/XslFo/Wrapper" by GlennAdams

Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Xmlgraphics-fop Wiki" for change notification.

The "Design/XslFo/Wrapper" page has been changed by GlennAdams:
http://wiki.apache.org/xmlgraphics-fop/Design/XslFo/Wrapper

Comment:
new hierarchy (and an instance) page to document design, design/xslfo, and design/xslfo/wrapper

New page:
= XslFo/Wrapper Design =

== Existing Design Review (circa FOP1.1dev) ==

=== Specification Compliance ===

 * erroneously generates a (zero size, leaf) block or inline area regardless of whether children generate a normal area, and regardless of whether `@id` is present or not;
 * `marker` children of `wrapper` are ignored, which prevents `retrieve-marker` from cloning content from these children
 * `page-number-citation` and `page-number-citation-last` that refer to wrapper's `@id` fail to resolve

=== org.apache.fop.layoutmgr.LayoutManagerMapping.WrapperLayoutManagerMaker ===

 * instantiates the LMs of `wrapper` and its children as sibling child LMs of the parent LM of the `wrapper` LM; as such, there is no parent/child relationship between the `wrapper` LM and the `wrapper`'s child LMs;

=== org.apache.fop.layoutmgr.inline.WrapperLayoutManager ===

 * subclasses `LeafNodeLayoutManager`, so cannot directly employ child LMs

=== Open Bugs ===

 * [[https://issues.apache.org/bugzilla/show_bug.cgi?id=47530|Bug 47530]] - `(%block;)+` context problems
 * [[https://issues.apache.org/bugzilla/show_bug.cgi?id=50724|Bug 50724]] - `marker`, `page-number-citation` don't work
 * [[https://issues.apache.org/bugzilla/show_bug.cgi?id=52526|Bug 52526]] - generates extraneous line

== Possible New Design ==

=== Goals ===

 * preserve parent/child LM relation for wrapper and its children;
 * ensure specification compliance with respect to generation of areas (or not); i.e., generate area iff no child LM returns a normal area and `@id` is specified;
 * when area is generated (per above), ensure that it is a block or inline area according to the permissible content of the nearest non-wrapper ancestor;
 * preserve `marker` semantics, where `retrieve-marker` references a `marker` child of `wrapper`;
 * preserve `page-number-citation{-last}` semantics, when referencing a wrapper or wrapper's descendant;
 * ensure that areas generated by children of wrapper are processed appropriately as block or inline content according to the semantics of the nearest non-wrapper LM;

=== Approach ===

 * employ two distinct Wrapper LMs depending on whether processing block or inline content:
  * `org.apache.fop.layoutmgr.BlockWrapperLayoutManager` - block content contexts
   * subclasses `BlockStackingLayoutManager`
  * `org.apache.fop.layoutmgr.inline.InlineWrapperLayoutManager` - inline content contexts
   * subclasses `InlineStackingLayoutManager`
  * `WrapperLayoutManagerMaker` makes determination of which to instantiate based on `Wrapper` ''node'' parameter

=== Considerations ===

==== On Using InlineLayoutManager instead of InlineStackingLayoutManager ====

If possible, it would be better to have `InlineWrapperLayoutManager` subclass `InlineLayoutManager` than `InlineStackingLayoutManager`, due to the more completely implemented semantics of the former. However, this is complicated by two issues:

 * `InlineLayoutManager` always generates an enclosing parent area, either an `InlineBlockParent` or `InlineParent` area. This is a problem for satisfying specification compliance since no area is supposed to be generated unless no child returns a normal area and `@id` is specified.
 * `InlineLayoutManager` currently requires its associated FObj to implement `InlineLevel` and not merely `FObjMixed`. [This is contrary to the code comments that says `FObjMixed` is sufficient.] The problem here is that `Wrapper` subclasses `FObjMixed` and not `InlineLevel`, and changing to the latter would become a problem when `Wrapper` is used in a block only context.

---------------------------------------------------------------------
To unsubscribe, e-mail: fop-commits-unsubscribe@xmlgraphics.apache.org
For additional commands, e-mail: fop-commits-help@xmlgraphics.apache.org