Date: 2005-02-20T12:08:27
Editor: SimonPepping
Wiki: XML Graphics - FOP Wiki
Page: FOPImplementationNotes
URL: http://wiki.apache.org/xmlgraphics-fop/FOPImplementationNotes
no comment
Change Log:
------------------------------------------------------------------------------
@@ -164,5 +164,78 @@
it implements the methods {{{setAreaTreeHandler}}} and {{{activateLayout}}},
cf. {{{AreaTreeHandler.endPageSequence}}}.
+== Markers ==
-8 January 2005, SimonPepping
+`LM.addAreas()` calls `LM.addMarkers(starting, isfirst, islast)`.
+`PageViewport` holds the marker maps `markersFirstStart`,
+`markersFirstAny`, `markersLastStart`, `markersLastEnd`, corresponding to
+the `retrieve-positions` `first-starting-within-page`,
+`first-including-carryover`, `last-starting-within-page`,
+`last-ending-within-page`. In addition `PageViewport` holds the marker map
+`LastAny`, from which a marker is retrieved when there is no marker with
+the requested position `last-*-within-page`. Here first and last refer
+to the position on the page, starting and ending refer to the traits
+`is-first` and `is-last` of the area to which the marker is associated.
+
+The LM obtains the values of `isfirst` and `islast` from the
+BP. `addMarkers` is called twice per `addAreas` call, once at the start
+with the value `starting = true`, before any child areas are returned,
+and once at the end with the value `starting = false`, after all child
+areas have been returned. When `starting == true`,
+`PageViewport.addMarkers` adds the markers to the maps `markers*Start`
+and `markers*Any`; when it is false, the markers are added to the maps
+`markers*End` and `markers*Any`.
+
+Retrieval of markers according to the spec:
+
+`first-starting-within-page`: first qualifying area in the containing
+page which `is-first` (`FirstStarting`); if `null`, then the first
+qualifying area in the containing page (`FirstAny`).
+
+`first-including-carryover`: first qualifying area in the containing
+page (`FirstAny`).
+
+`last-starting-within-page`: last qualifying area in the containing page
+which `is-first` (`LastStarting`); if `null`, then the last qualifying area
+in the containing page (`LastAny`).
+
+`last-ending-within-page`: last qualifying area in the containing page
+which `is-last` (`LastEnding`); if `null`, then the last qualifying area
+in the containing page (`LastAny`).
+
+If the containing page does not have a qualifying area, then the last
+qualifying area of the preceding page is used (`LastAny`), etc. until a
+qualifying area is found within the specified `retrieve-boundary`. (My
+own interpretation; the spec is not clear about preceding pages.)
+
+Scheme of the values of the parameters of an `LM.addMarkers` call, and
+of the addition of markers to the marker maps by
+`PageViewport.addMarkers`, for an area and a child area. Note that the
+start and end of an area always fall on a single page:
+
+{{{
++----------------------------------------+ First?Starting?
+| starting is-first is-last | First?Any
+| | LastStarting?
+| +-------------------------------+ | // LastAny
+| | | |
+| | starting is-first is-last | | First?Starting?
+| | | | First?Any
+| | | | LastStarting?
+| | | | // LastAny
+| | | |
+| | | |
+| | !starting is-first is-last | | LastEnding?
+| | | | LastAny
+| +-------------------------------+ |
+| |
+| !starting is-first is-last | LastEnding?
++----------------------------------------+ LastAny
+}}}
+
+`First?` means: Only add if this is the first marker of its class.
+`Starting?` and `Ending?` means: Only add if the area has the trait
+`is-first` or `is-last`.
+
+
+20 February 2005, SimonPepping
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]