blob: cbe5e5f3594ea6047ccfc4ce3054e270af1e1d12 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
|
<?xml version="1.0"?>
<document>
<header>
<title>FO Tree</title>
<subtitle>All you wanted to know about FO Tree !</subtitle>
<authors> <person name="Keiron Liddle" email="keiron@aftexsw.com"/>
</authors>
</header>
<body><s1 title="FO Tree">
<p>
The FO Tree is a representation of the XSL:FO document. This
represents the <strong>Objectify</strong> step from the
spec. The <strong>Refinement</strong> step is part of reading
and using the properties which may happen immediately or
during the layout process.
</p>
<p>Each xml element is represented by a java object. For pagination the
classes are in <code>org.apache.fop.fo.pagination.*</code>, for elements in the flow
they are in <code>org.apache.fop.fo.flow.*</code> and some others are in
<code>org.apache.fop.fo.*.</code></p>
<p>The base class for all objects in the tree is FONode. The base class for
all FO Objects is FObj.</p>
<p>(insert diagram here)</p>
<p>There is a class for each element in the FO set. An object is created for
each element in the FO Tree. This object holds the properties for the FO
Object.</p>
<p>
When the object is created it is setup. It is given its
element name, the FOUserAgent - for resolving properties
etc. - the logger and the attributes. The methods
<code>handleAttributes()</code> and
<code>setuserAgent()</code>, common to <code>FONode</code>,
are used in this process. The object will then be given any
text data or child elements. Then the <code>end()</code>
method is called. The end method is used by a number of
elements to indicate that it can do certain processing since
all the children have been added.
</p>
<p>Some validity checking is done during these steps. The user can be warned of the error and processing can continue if possible.
</p>
<p>
The FO Tree is simply a heirarchy of java objects that
represent the fo elements from xml. The traversal is done by
the layout or structure process only in the flow elements.
</p>
<s2 title="Properties">
<p>The XML attributes on each element are passed to the object. The objects
that represent FO objects then convert the attributes into properties.
</p>
<p>Since properties can be inherited the PropertyList class handles resolving
properties for a particular element.
All properties are specified in an XML file. Classes are created
automatically during the build process.
</p>
<p>(insert diagram here)</p>
<p>In some cases the element may be moved to have a different parent, for
example markers, or the inheritance could be different, for example
initial property set.</p></s2>
<s2 title="Foreign XML">
<p>The base class for foreign XML is XMLObj. This class handles creating a
DOM Element and the setting of attributes. It also can create a DOM
Document if it is a top level element, class XMLElement.
This class must be extended for the namespace of the XML elements. For
unknown namespaces the class is UnknowXMLObj.</p>
<p>(insert diagram here)</p>
<p>If some special processing is needed then the top level element can extend
the XMLObj. For example the SVGElement makes the special DOM required for
batik and gets the size of the svg.
</p>
<p>Foreign XML will usually be in an fo:instream-foreign-object, the XML will
be passed to the render as a DOM where the render will be able to handle
it. Other XML from an unknwon namespace will be ignored.
</p>
<p>By using element mappings it is possible to read other XML and either</p>
<ul><li>set information on the area tree</li>
<li>create pseudo FO Objects that create areas in the area tree</li>
<li>create FO Objects</li></ul>
</s2>
<s2 title="Unknown Elements">
<p>If an element is in a known namespace but the element is unknown then an
Unknown object is created. This is mainly to provide information to the
user.
This could happen if the fo document contains an element from a different
version or the element is misspelt.</p>
</s2>
<s2 title="Page Masters">
<p>
The first elements in a document are the elements for the
page master setup. This is usually only a small number and
will be used throughout the document to create new pages.
These elements are kept as a factory to create the page and
appropriate regions whenever a new page is requested by the
layout. The objects in the FO Tree that represent these
elements are themselves the factory. The root element keeps
these objects as a factory for the page sequences.
</p>
</s2>
<s2 title="Flow">
<p>The elements that are in the flow of the document are a set of elements
that is needed for the layout process. Each element is important in the
creation of areas.</p>
</s2>
<s2 title="Other Elements">
<p>
The remaining FO Objects are things like page-sequence,
title and color-profile. These are handled by their parent
element; i.e. the root looks after the declarations and the
declarations maintains a list of colour profiles. The
page-sequences are direct descendents of root.
</p>
</s2>
<s2 title="Associated Tasks">
<ul><li>Create diagrams</li>
<li>Setup all properties and elements for XSL:FO</li>
<li>Setup user agent for property resolution</li>
<li>Verify all XML is handled appropriately</li></ul></s2></s1></body></document>
|