aboutsummaryrefslogtreecommitdiffstats
path: root/src/documentation/content/xdocs/DnI/foptrees.xml
diff options
context:
space:
mode:
Diffstat (limited to 'src/documentation/content/xdocs/DnI/foptrees.xml')
-rw-r--r--src/documentation/content/xdocs/DnI/foptrees.xml1065
1 files changed, 1065 insertions, 0 deletions
diff --git a/src/documentation/content/xdocs/DnI/foptrees.xml b/src/documentation/content/xdocs/DnI/foptrees.xml
new file mode 100644
index 000000000..46c70b11c
--- /dev/null
+++ b/src/documentation/content/xdocs/DnI/foptrees.xml
@@ -0,0 +1,1065 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!--
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ -->
+
+<!-- $Id$ -->
+
+<!--
+<!DOCTYPE chapter PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+ "docbookx.dtd">
+ -->
+
+ <chapter>
+ <title>The trees in FOP</title>
+
+ <section>
+ <title>Overview</title>
+
+ <orderedlist>
+ <listitem>
+ <simpara>The FO document. Each XML document and therefore
+also an FO document has a hierarchical structure that can be modeled
+as a tree.</simpara>
+ </listitem>
+
+ <listitem>
+ <simpara>The FO DOM tree. This tree has the same
+hierarchical structure as an FO document, and is often built from an
+XML document.</simpara>
+ </listitem>
+ </orderedlist>
+
+ <para>FOP can work from either an FO document or an FO DOM tree.
+FOP does not build a DOM tree from an FO document.</para>
+
+ <orderedlist continuation="continues">
+ <listitem>
+ <simpara>The FO tree. FOP builds this tree from either the FO document or
+the FO DOM tree. The FO nodes in this tree correspond to the
+elements in the FO document or the XML nodes in the FO DOM
+tree. Note, however, that they are different from DOM tree
+nodes.</simpara>
+ </listitem>
+ </orderedlist>
+
+ <para>When a sufficient part of the FO tree has been built (in
+current FOP the subtree of a PageSequence FO node), the layout process
+is started. This process builds three trees.</para>
+
+ <orderedlist continuation="continues">
+ <listitem>
+ <simpara>The LM tree. This tree corresponds closely to the FO
+tree because each FO node creates a layout manager. But there are
+deviations. For example, a BlockLayoutManager creates a
+LineLayoutManager for each consecutive sequence of child FO nodes that
+generate inline areas.</simpara>
+ </listitem>
+
+ <listitem>
+ <simpara>The BP tree. Each layout manager returns zero or more
+BreakPoss to its parent. These BreakPoss are connected to BreakPoss
+that the layout manager received from its child layout managers. This
+is not a real tree. There are many BP without a parent BP. They are
+connected to their siblings by their LM.</simpara>
+ </listitem>
+
+ <listitem>
+ <simpara>The Area tree. Using the information stored in the BP
+tree and in the LMs connected with the BPs, layout areas are
+constructed. These areas are placed within other areas, which is
+expressed in a tree hierarchy.</simpara>
+ </listitem>
+ </orderedlist>
+
+ </section>
+
+ <section>
+ <title>The tree of BreakPoss</title>
+
+ <para>Each LM contains a list of BPs belonging to and returned
+to it by the childLMs during the <literal>getNextBreakPoss</literal>
+stack. These are the BPs that end an area of the childLM. The BP
+contains an index <literal>position.iLeafPos</literal>, which connects
+it to the BP with that index in the list of BPs of its own LM (the
+childLM).</para>
+
+ <para>For example, BlockLM's list <literal>childBreaks</literal>
+contains the BPs that end a line (if the childLM is a LineLM).
+LineLM's list <literal>vecInlineBreaks</literal> contains the BPs that
+were returned to it as possible linebreaks by TextLM (if the childLM
+is a TextLM). TextLM's list <literal>vecAreaInfo</literal> contains
+<literal>AreaInfo</literal> objects. A BP in BlockLM's list
+<literal>childBreaks</literal> belongs e.g. to a LineLM. Its index
+<literal>position.iLeafPos</literal> points to the BP with that index
+in <literal>vecInlineBreaks</literal> in ListLM. That BP belongs e.g.
+to a TextLM, and its index <literal>position.iLeafPos</literal> points
+to the <literal>AreaInfo</literal> object with that index in
+<literal>vecAreaInfo</literal> in TextLM.</para>
+
+ <screen>
+ +-----------------+
+ LM | bp0 bp1 bp2 bp3 |
+ +-++--++--++--++--+
+ .......................:|..:| :| :|
+ : +----------+ | :| :|
+ : | +----------+ :| :+----------------------+
+ : | | ........:| :....... |
+ : | | : | : |
+ : +----------+---+--+ : +------+------+ : +--------------+------+
+ LM | bp0 bp1 bp2 bp3 | LM | bp0 bp1 bp2 | LM | bp0 bp1 bp2 bp3 bp4 |
+ +-----------------+ +-------------+ +---------------------+
+</screen>
+
+ <para>The BPs are held in a list by the LM shown in front of
+them. They are associated with one of the childLMs, which is shown by
+the dotted lines. Their member <literal>position.iLeafPos</literal>
+connects them with the BP in their LM's list with that index, as shown
+by the dashed lines.</para>
+
+ </section>
+
+
+ <section>
+ <title>Example of an FO and area tree</title>
+
+ <section>
+ <title>The FO file</title>
+
+ <literallayout><![CDATA[<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xmlns:svg="http://www.w3.org/2000/svg">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="simpleA4"
+ page-height="29.7cm" page-width="21cm"
+ margin-top="2cm"
+ margin-bottom="2cm" margin-left="2cm"
+ margin-right="2cm">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="simpleA4">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block font-size="16pt" font-weight="bold"
+ space-after="5mm">Test FO
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+</fo:root>]]></literallayout>
+
+ </section>
+
+ <section>
+ <title>The corresponding FO tree</title>
+
+ <para>In the listing below the notation has been shortened;
+<literal>.[n]</literal> denotes the nth child, for which the full
+notation is <literal>.children.elementData[n]</literal> . A number of
+static members are not shown.</para>
+
+ <para>The root:
+
+<screen>
+ root = "fo:root at line 2:44"
+
+ root = {
+ layoutMasterSet: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=1089)
+ pageSequences: instance of java.util.ArrayList(id=1102)
+ runningPageNumberCounter: 0
+ foTreeControl: instance of org.apache.fop.apps.Document(id=1103)
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1104)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1105)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1106)
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 2
+ org.apache.fop.fo.FObj.column: 44
+ org.apache.fop.fo.FONode.parent: null
+ org.apache.fop.fo.FONode.name: "fo:root"
+}
+</screen>
+</para>
+
+ <para>The root has no properties; the namespace nodes do not result in
+properties:
+
+<screen>
+ root.propertyList = "{}"
+</screen>
+</para>
+
+ <para>The root has two children:
+
+<screen>
+ root.children = "[
+ fo:layout-master-set at line 3:25
+ fo:page-sequence at line 12:49
+]"
+</screen>
+</para>
+
+ <para>The first child of root is the layout master set:
+
+<screen>
+ root.[0] = "fo:layout-master-set at line 3:25"
+
+ root.[0] = {
+ simplePageMasters: instance of java.util.HashMap(id=1111)
+ pageSequenceMasters: instance of java.util.HashMap(id=1112)
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1113)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1114)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1115)
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 3
+ org.apache.fop.fo.FObj.column: 25
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.Root(id=1088)
+ org.apache.fop.fo.FONode.name: "fo:layout-master-set"
+}
+
+ root.[0].propertyList = "{}"
+</screen>
+</para>
+
+ <para>The layout master set contains a simple page master:
+
+<screen>
+ root.[0].children = "[
+ fo:simple-page-master at line 8:28
+]"
+
+ root.[0].[0] = "fo:simple-page-master at line 8:28"
+
+ root.[0].[0] = {
+ regions: instance of java.util.HashMap(id=1120)
+ masterName: "simpleA4"
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1122)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1123)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: null
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 8
+ org.apache.fop.fo.FObj.column: 28
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=1089)
+ org.apache.fop.fo.FONode.name: "fo:simple-page-master"
+}
+</screen>
+</para>
+
+ <para>The properties of the simple page master:
+
+<screen>
+ root.[0].[0].propertyList = "{
+ master-name=org.apache.fop.fo.StringProperty@1958bf9
+ margin-top=org.apache.fop.fo.LengthProperty@118958e
+ margin-right=org.apache.fop.fo.LengthProperty@102b2b6
+ margin-bottom=org.apache.fop.fo.LengthProperty@22d166
+ margin-left=org.apache.fop.fo.LengthProperty@1e1962d
+ page-width=org.apache.fop.fo.LengthProperty@14a75bb
+ page-height=org.apache.fop.fo.LengthProperty@17779e3
+}"
+
+ root.[0].[0].propertyList.get("master-name") = {
+ str: "simpleA4"
+ org.apache.fop.fo.Property.specVal: null
+}
+
+ root.[0].[0].propertyList.get("page-height") = {
+ length: instance of org.apache.fop.datatypes.FixedLength(id=1329)
+ org.apache.fop.fo.Property.specVal: null
+}
+
+ root.[0].[0].propertyList.get("page-height").length = "841889mpt"
+</screen>
+</para>
+
+ <para>The simple page master has only one region, the body:
+
+<screen>
+ root.[0].[0].regions = "{body=fo:region-body at line 9:24}"
+</screen>
+</para>
+
+ <para>The region body:
+
+<screen>
+ root.[0].[0].regions.get("body") = "fo:region-body at line 9:24"
+
+ root.[0].[0].regions.get("body") = {
+ backgroundColor: null
+ org.apache.fop.fo.pagination.Region.layoutMaster: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1082)
+ org.apache.fop.fo.pagination.Region.regionName: "xsl-region-body"
+ org.apache.fop.fo.pagination.Region.overflow: 8
+ org.apache.fop.fo.pagination.Region.wm: 49
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1344)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1345)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: null
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 9
+ org.apache.fop.fo.FObj.column: 24
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1082)
+ org.apache.fop.fo.FONode.name: "fo:region-body"
+}
+
+ root.[0].[0].regions.get("body").propertyList = "{}"
+</screen>
+</para>
+
+ <para>The second child of root is the page sequence:
+
+<screen>
+ root.[1] = "fo:page-sequence at line 12:49"
+
+ root.[1] = {
+ root: instance of org.apache.fop.fo.pagination.Root(id=1088)
+ layoutMasterSet: instance of org.apache.fop.fo.pagination.LayoutMasterSet(id=1089)
+ flowMap: instance of java.util.HashMap(id=1090)
+ sequenceStarted: true
+ ipnValue: "auto"
+ currentPageNumber: 1
+ explicitFirstNumber: 0
+ firstPageNumber: 1
+ pageNumberGenerator: instance of org.apache.fop.fo.pagination.PageNumberGenerator(id=1074)
+ forcePageCount: 8
+ pageCount: 0
+ isForcing: false
+ pageNumberType: 1
+ thisIsFirstPage: true
+ simplePageMaster: instance of org.apache.fop.fo.pagination.SimplePageMaster(id=1082)
+ pageSequenceMaster: null
+ mainFlow: instance of org.apache.fop.fo.pagination.Flow(id=1092)
+ titleFO: null
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1096)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1097)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1098)
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 12
+ org.apache.fop.fo.FObj.column: 49
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.Root(id=1088)
+ org.apache.fop.fo.FONode.name: "fo:page-sequence"
+}
+</screen>
+</para>
+
+ <para>The page-sequence has one property, the reference to the page master:
+
+<screen>
+ root.[1].propertyList = "{
+ master-reference=org.apache.fop.fo.StringProperty@104e28b
+}"
+
+ root.[1].propertyList.get("master-reference") = {
+ str: "simpleA4"
+ org.apache.fop.fo.Property.specVal: null
+}
+</screen>
+</para>
+
+ <para>The page-sequence has one child, the flow:
+
+<screen>
+ root.[1].children = "[
+ fo:flow at line 13:42
+]"
+
+ root.[1].[0] = "fo:flow at line 13:42"
+
+ root.[1].[0] = {
+ pageSequence: instance of org.apache.fop.fo.pagination.PageSequence(id=1081)
+ markerSnapshot: null
+ flowName: "xsl-region-body"
+ contentWidth: 0
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1367)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1368)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1369)
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 13
+ org.apache.fop.fo.FObj.column: 42
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.PageSequence(id=1081)
+ org.apache.fop.fo.FONode.name: "fo:flow"
+}
+</screen>
+</para>
+
+ <para>The flow has one property, the flow name:
+
+<screen>
+ root.[1].[0].propertyList = "{
+ flow-name=org.apache.fop.fo.StringProperty@6458a6
+}"
+
+ root.[1].[0].propertyList.get("flow-name") = {
+ str: "xsl-region-body"
+ org.apache.fop.fo.Property.specVal: null
+}
+</screen>
+</para>
+
+ <para>The flow has one child, a block:
+
+<screen>
+ root.children.elementData[1].children.elementData[0].children = "[
+ fo:block at line 15:28
+]"
+
+ root.[1].[0].[0] = "fo:block at line 15:28"
+
+ root.[1].[0].[0] = {
+ align: 0
+ alignLast: 0
+ breakAfter: 0
+ lineHeight: 0
+ startIndent: 0
+ endIndent: 0
+ spaceBefore: 0
+ spaceAfter: 0
+ textIndent: 0
+ keepWithNext: 0
+ backgroundColor: null
+ blockWidows: 0
+ blockOrphans: 0
+ id: null
+ span: 59
+ wsTreatment: 41
+ lfTreatment: 98
+ bWScollapse: true
+ anythingLaidOut: false
+ firstInlineChild: null
+ org.apache.fop.fo.FObjMixed.textInfo: instance of org.apache.fop.fo.TextInfo(id=1377)
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: instance of org.apache.fop.fo.PropertyList(id=1378)
+ org.apache.fop.fo.FObj.propMgr: instance of org.apache.fop.fo.PropertyManager(id=1379)
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: instance of java.util.ArrayList(id=1380)
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 15
+ org.apache.fop.fo.FObj.column: 28
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.pagination.Flow(id=1092)
+ org.apache.fop.fo.FONode.name: "fo:block"
+}
+
+ root.[1].[0].[0].propertyList = "{
+ font-size=org.apache.fop.fo.LengthProperty@ae4646
+ font-weight=org.apache.fop.fo.StringProperty@187b287
+ space-after=org.apache.fop.fo.SpaceProperty@1d9e2c7
+}"
+</screen>
+</para>
+
+ <para>The block has two children:
+
+<screen>
+ root.[1].[0].[0].children = "[
+ fo:text at line 15:35
+ fo:text at line 16:7
+]"
+
+ root.[1].[0].[0].[0] = "fo:text at line 15:35"
+
+ root.[1].[0].[0].[0] = {
+ ca: instance of char[7] (id=1386)
+ start: 0
+ length: 7
+ textInfo: instance of org.apache.fop.fo.TextInfo(id=1377)
+ lastFOTextProcessed: instance of org.apache.fop.fo.FOText(id=1387)
+ prevFOTextThisBlock: null
+ nextFOTextThisBlock: instance of org.apache.fop.fo.FOText(id=1387)
+ ancestorBlock: instance of org.apache.fop.fo.flow.Block(id=1375)
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: null
+ org.apache.fop.fo.FObj.propMgr: null
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: null
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 15
+ org.apache.fop.fo.FObj.column: 35
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.flow.Block(id=1375)
+ org.apache.fop.fo.FONode.name: "fo:text"
+}
+</screen>
+</para>
+
+ <para>This text node contains the text "Test FO":
+
+<screen>
+ root.[1].[0].[0].[0].ca = {
+T, e, s, t, , F, O
+}
+
+ root.[1].[0].[0].[1] = "fo:text at line 16:7"
+
+ root.[1].[0].[0].[1] = {
+ ca: instance of char[1] (id=1390)
+ start: 0
+ length: 1
+ textInfo: instance of org.apache.fop.fo.TextInfo(id=1377)
+ lastFOTextProcessed: instance of org.apache.fop.fo.FOText(id=1387)
+ prevFOTextThisBlock: instance of org.apache.fop.fo.FOText(id=1384)
+ nextFOTextThisBlock: null
+ ancestorBlock: instance of org.apache.fop.fo.flow.Block(id=1375)
+ org.apache.fop.fo.FObj.propertyListTable: instance of org.apache.fop.fo.Property$Maker[248] (id=1094)
+ org.apache.fop.fo.FObj.propertyList: null
+ org.apache.fop.fo.FObj.propMgr: null
+ org.apache.fop.fo.FObj.id: null
+ org.apache.fop.fo.FObj.children: null
+ org.apache.fop.fo.FObj.markers: null
+ org.apache.fop.fo.FObj.systemId: "file:/path/to/fo-file"
+ org.apache.fop.fo.FObj.line: 16
+ org.apache.fop.fo.FObj.column: 7
+ org.apache.fop.fo.FONode.parent: instance of org.apache.fop.fo.flow.Block(id=1375)
+ org.apache.fop.fo.FONode.name: "fo:text"
+}
+</screen>
+</para>
+
+ <para>This text node contains the text "\n":
+
+<screen>
+ root.[1].[0].[0].[1].ca = {
+}
+</screen>
+</para>
+ </section>
+
+ <section>
+ <title>The corresponding area tree</title>
+
+ <para><itemizedlist>
+ <listitem>
+ <simpara>PageViewport has a Page page and a Rectangle2D
+viewArea (reference/viewport pair).</simpara>
+ </listitem>
+ <listitem>
+ <simpara>Page has five RegionViewports.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>RegionViewport has a RegionReference region and a
+Rectangle2D viewArea (reference/viewport pair).</simpara>
+ </listitem>
+ <listitem>
+ <simpara>BodyRegion has a MainReference mainReference, a
+BeforeFloat beforeFloat, and a Footnote footnote.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>MainReference has a list of Spans.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>Span has a list of Flows.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>Flow has a list of Blocks.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>Block has a list of Blocks or LineAreas.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>LineArea has a list of InlineAreas.</simpara>
+ </listitem>
+ <listitem>
+ <simpara>Text Area (subclass of InlineArea) has text.</simpara>
+ </listitem>
+ </itemizedlist></para>
+
+ <para>The structure of the area tree is as follows:
+
+<screen>
+PageViewport
+|
++-Page
+ |
+ +-RegionViewport
+ |
+ +-BodyRegion
+ |
+ +-MainReference
+ | |
+ | +-Span
+ | | |
+ | | +-Flow
+ | |
+ | +-Span
+ | | |
+ | | +-Flow
+ | | |
+ | | +-Block
+ | | | |
+ | | | +-LineArea
+ | | | |
+ | | | +-TextArea
+ | | |
+ | | +-Block
+ | |
+ | +-Span
+ | | |
+ | | +-Flow
+ | |
+ | +-Span
+ | | |
+ | | +-Flow
+ | |
+ | +-Span
+ | |
+ | +-Flow
+ |
+ +blocks
+ |
+ +CTM
+</screen>
+</para>
+
+ <para>In the listing below members of an
+<literal>arraylist</literal> are indicated by <literal>[n]</literal>,
+which stands for <literal>get(n)</literal>. If the
+<literal>arraylist</literal> is called <literal>children</literal>,
+the word <literal>children</literal> has been omitted, so that
+<literal>[n]</literal> then stands for
+<literal>children.get(n)</literal>.</para>
+
+ <para>Type: <literal>org.apache.fop.area.PageViewport</literal>:
+<screen>
+ curPage = "PageViewport: page=1"
+
+ curPage = {
+ page: instance of org.apache.fop.area.Page(id=1394)
+ viewArea: instance of java.awt.Rectangle(id=1395)
+ clip: false
+ pageNumber: "1"
+ idReferences: null
+ unresolved: null
+ pendingResolved: null
+ markerFirstStart: null
+ markerLastStart: null
+ markerFirstAny: null
+ markerLastEnd: null
+ markerLastAny: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Page</literal>:
+<screen>
+ curPage.page = {
+ regionBefore: null
+ regionStart: null
+ regionBody: instance of org.apache.fop.area.RegionViewport(id=1397)
+ regionEnd: null
+ regionAfter: null
+ unresolved: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.RegionViewport</literal>:
+<screen>
+ curPage.page.regionBody = {
+ region: instance of org.apache.fop.area.BodyRegion(id=1077)
+ viewArea: instance of java.awt.Rectangle(id=1399)
+ clip: false
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 0
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.BodyRegion</literal>:
+<screen>
+ curPage.page.regionBody.region = {
+ beforeFloat: null
+ mainReference: instance of org.apache.fop.area.MainReference(id=1401)
+ footnote: null
+ columnGap: 18000
+ columnCount: 1
+ refIPD: 0
+ org.apache.fop.area.RegionReference.regionClass: 2
+ org.apache.fop.area.RegionReference.ctm: instance of org.apache.fop.area.CTM(id=1402)
+ org.apache.fop.area.RegionReference.blocks: instance of java.util.ArrayList(id=1403)
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 0
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.MainReference</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference = {
+ spanAreas: instance of java.util.ArrayList(id=1405)
+ columnGap: 0
+ width: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 0
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>The main reference contains five span areas. Four are
+empty. Number 1 contains the text of this page.
+
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas = "[
+ org.apache.fop.area.Span@53c3f5
+ org.apache.fop.area.Span@101ac93
+ org.apache.fop.area.Span@125d61e
+ org.apache.fop.area.Span@155d3a3
+ org.apache.fop.area.Span@718242
+]"
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Span</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[0] = {
+ flowAreas: instance of java.util.ArrayList(id=1409)
+ height: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[0].flowAreas = "[
+ org.apache.fop.area.Flow@e33e18
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.Flow</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[0].flowAreas[0] = {
+ stacking: 2
+ width: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 0
+ org.apache.fop.area.BlockParent.height: 0
+ org.apache.fop.area.BlockParent.children: null
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Span</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1] = {
+ flowAreas: instance of java.util.ArrayList(id=1412)
+ height: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[0].flowAreas = "[
+ org.apache.fop.area.Flow@e33e18
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.Flow</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0] = {
+ stacking: 2
+ width: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 0
+ org.apache.fop.area.BlockParent.height: 0
+ org.apache.fop.area.BlockParent.children: instance of java.util.ArrayList(id=1416)
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].children = "[
+ org.apache.fop.area.Block@61f533
+ org.apache.fop.area.Block@12922f6
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.Block</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0] = {
+ stacking: 2
+ positioning: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 481891
+ org.apache.fop.area.BlockParent.height: 19200
+ org.apache.fop.area.BlockParent.children: instance of java.util.ArrayList(id=1419)
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].children = "[
+ org.apache.fop.area.LineArea@9f0d
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.LineArea</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0] = {
+ stacking: 0
+ startIndent: 0
+ length: 0
+ lineHeight: 19200
+ baseLine: 0
+ inlineAreas: instance of java.util.ArrayList(id=1422)
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 0
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0].inlineAreas = "[
+ org.apache.fop.area.inline.TextArea@21d23b
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.inline.TextArea</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0].inlineAreas[0] = {
+ text: "Test FO"
+ iTSadjust: 0
+ org.apache.fop.area.inline.InlineArea.height: 14800
+ org.apache.fop.area.inline.InlineArea.contentIPD: 59568
+ org.apache.fop.area.inline.InlineArea.verticalPosition: 13688
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 0
+ org.apache.fop.area.Area.props: instance of java.util.HashMap(id=1426)
+}
+</screen>
+</para>
+
+ <para>
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[0].[0].inlineAreas[0].props = "{
+ 4=16000
+ 3=F3
+ 7=#000000
+}"
+</screen>
+<variablelist>
+ <varlistentry>
+ <term>3</term>
+ <listitem>
+ <simpara><literal>org.apache.fop.area.Trait.FONT_NAME</literal></simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>4</term>
+ <listitem>
+ <simpara><literal>org.apache.fop.area.Trait.FONT_SIZE</literal></simpara>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>7</term>
+ <listitem>
+ <simpara><literal>org.apache.fop.area.Trait.COLOR</literal></simpara>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Block</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[1].flowAreas[0].[1] = {
+ stacking: 2
+ positioning: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 0
+ org.apache.fop.area.BlockParent.height: 14173
+ org.apache.fop.area.BlockParent.children: null
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 0
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Span</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[2] = {
+ flowAreas: instance of java.util.ArrayList(id=1429)
+ height: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[2].flowAreas = "[
+ org.apache.fop.area.Flow@c72243
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.Flow</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[2].flowAreas[0] = {
+ stacking: 2
+ width: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 0
+ org.apache.fop.area.BlockParent.height: 0
+ org.apache.fop.area.BlockParent.children: null
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Span</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[3] = {
+ flowAreas: instance of java.util.ArrayList(id=1433)
+ height: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[3].flowAreas = "[
+ org.apache.fop.area.Flow@dc9766
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.Flow</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[3].flowAreas[0] = {
+ stacking: 2
+ width: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 0
+ org.apache.fop.area.BlockParent.height: 0
+ org.apache.fop.area.BlockParent.children: null
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <para>Type: <literal>org.apache.fop.area.Span</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[4] = {
+ flowAreas: instance of java.util.ArrayList(id=1436)
+ height: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[4].flowAreas = "[
+ org.apache.fop.area.Flow@1ec58a
+]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.Flow</literal>:
+<screen>
+ curPage.page.regionBody.region.mainReference.spanAreas[4].flowAreas[0] = {
+ stacking: 2
+ width: 0
+ org.apache.fop.area.BlockParent.xOffset: 0
+ org.apache.fop.area.BlockParent.yOffset: 0
+ org.apache.fop.area.BlockParent.width: 0
+ org.apache.fop.area.BlockParent.height: 0
+ org.apache.fop.area.BlockParent.children: null
+ org.apache.fop.area.BlockParent.orientation: 0
+ org.apache.fop.area.Area.areaClass: 0
+ org.apache.fop.area.Area.ipd: 481891
+ org.apache.fop.area.Area.props: null
+}
+</screen>
+</para>
+
+ <screen>
+ curPage.page.regionBody.region.blocks = "[]"
+</screen>
+
+ <para>Type: <literal>org.apache.fop.area.CTM</literal>:
+<screen>
+ curPage.page.regionBody.region.ctm = {
+ a: 1.0
+ b: 0.0
+ c: 0.0
+ d: 1.0
+ e: 56692.0
+ f: 56692.0
+ CTM_LRTB: instance of org.apache.fop.area.CTM(id=1439)
+ CTM_RLTB: instance of org.apache.fop.area.CTM(id=1440)
+ CTM_TBRL: instance of org.apache.fop.area.CTM(id=1441)
+}
+</screen>
+</para>
+
+ </section>
+ </section>
+
+ </chapter>
+
+<!-- Local Variables: -->
+<!-- current-language-environment: UTF-8 -->
+<!-- coding: utf-8 -->
+<!-- default-input-method: TeX -->
+<!-- End: -->