aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMehdi Houshmand <mehdi@apache.org>2012-07-02 13:23:46 +0000
committerMehdi Houshmand <mehdi@apache.org>2012-07-02 13:23:46 +0000
commitab426a49d46ec69b80e6accccd537522477df5b3 (patch)
treea4a4550b9d329c7a7eae6a8d00861f373911c081
parentc9f6e74ddf229f879ea7df1b389d6018286ca1aa (diff)
parentf5a033d38f700d70bbf679d87d535b37438c9ebb (diff)
downloadxmlgraphics-fop-ab426a49d46ec69b80e6accccd537522477df5b3.tar.gz
xmlgraphics-fop-ab426a49d46ec69b80e6accccd537522477df5b3.zip
Merged in trunk@1356161
git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/Temp_URI_Unification@1356212 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--examples/fo/advanced/cid-fonts.fo2
-rw-r--r--examples/fo/advanced/giro.fo14
-rw-r--r--examples/fo/basic/images.fo2
-rw-r--r--examples/fo/basic/tableunits.fo40
-rw-r--r--examples/fo/build.xml5
-rw-r--r--examples/fo/svg/embedding.fo4
-rw-r--r--examples/fo/tables/background.fo22
-rw-r--r--examples/fo/tables/borders.fo39
-rw-r--r--examples/fo/tables/break.fo10
-rw-r--r--examples/fo/tables/headfoot.fo14
-rw-r--r--examples/fo/tables/keep.fo12
-rw-r--r--examples/fo/tables/omit.fo10
-rw-r--r--examples/fo/tables/space.fo18
-rw-r--r--src/documentation/content/xdocs/examples.xml10
-rw-r--r--src/documentation/content/xdocs/fo/align.fo25
-rw-r--r--src/documentation/content/xdocs/fo/align.fo.pdfbin4689 -> 0 bytes
-rw-r--r--src/documentation/content/xdocs/fo/align.pdfbin0 -> 9284 bytes
-rw-r--r--src/documentation/content/xdocs/fo/align2.fo27
-rw-r--r--src/documentation/content/xdocs/fo/align2.fo.pdfbin4299 -> 0 bytes
-rw-r--r--src/documentation/content/xdocs/fo/align2.pdfbin0 -> 8797 bytes
-rw-r--r--src/documentation/content/xdocs/fo/build.xml70
-rw-r--r--src/documentation/content/xdocs/fo/embed.fo25
-rw-r--r--src/documentation/content/xdocs/fo/embed.fo.pdf87
-rw-r--r--src/documentation/content/xdocs/fo/embed.pdfbin0 -> 8249 bytes
-rw-r--r--src/documentation/content/xdocs/fo/fonts.fo48
-rw-r--r--src/documentation/content/xdocs/fo/fonts.fo.pdf160
-rw-r--r--src/documentation/content/xdocs/fo/fonts.pdfbin0 -> 20432 bytes
-rw-r--r--src/documentation/content/xdocs/fo/size.fo25
-rw-r--r--src/documentation/content/xdocs/fo/size.fo.pdfbin5516 -> 0 bytes
-rw-r--r--src/documentation/content/xdocs/fo/size.pdfbin0 -> 9508 bytes
-rw-r--r--src/documentation/content/xdocs/team.xml17
-rw-r--r--src/java/org/apache/fop/fonts/FontTriplet.java3
-rw-r--r--src/java/org/apache/fop/render/PrintRenderer.java2
-rw-r--r--src/java/org/apache/fop/render/afp/AFPDocumentHandler.java4
-rw-r--r--src/java/org/apache/fop/render/afp/AFPPainter.java63
-rw-r--r--src/java/org/apache/fop/render/intermediate/AbstractIFPainter.java29
-rw-r--r--src/java/org/apache/fop/render/intermediate/IFException.java25
-rw-r--r--src/java/org/apache/fop/render/java2d/Java2DDocumentHandler.java156
-rw-r--r--src/java/org/apache/fop/render/java2d/Java2DPainter.java12
-rw-r--r--src/java/org/apache/fop/render/pcl/PCLPainter.java42
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFDocumentHandler.java35
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java6
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFPainter.java37
-rw-r--r--src/java/org/apache/fop/render/ps/PSDocumentHandler.java9
-rw-r--r--src/java/org/apache/fop/render/ps/PSPainter.java41
-rw-r--r--src/sandbox/org/apache/fop/render/svg/SVGPainter.java16
-rw-r--r--status.xml3
-rw-r--r--test/java/org/apache/fop/render/intermediate/AbstractIFPainterTestCase.java99
48 files changed, 667 insertions, 601 deletions
diff --git a/examples/fo/advanced/cid-fonts.fo b/examples/fo/advanced/cid-fonts.fo
index 526ebea06..cdcb4737c 100644
--- a/examples/fo/advanced/cid-fonts.fo
+++ b/examples/fo/advanced/cid-fonts.fo
@@ -369,7 +369,7 @@ This font contains no embedding license restrictions
</fo:block>
</fo:wrapper>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="50mm"/>
<fo:table-column column-width="50mm"/>
<fo:table-column column-width="50mm"/>
diff --git a/examples/fo/advanced/giro.fo b/examples/fo/advanced/giro.fo
index 5b5422ec9..9f1a6723a 100644
--- a/examples/fo/advanced/giro.fo
+++ b/examples/fo/advanced/giro.fo
@@ -32,7 +32,7 @@
<fo:block-container absolute-position="absolute" width="100%" height="100%" border-top-color="silver" border-top-style="dotted" border-top-width="0.13mm">
<fo:block/>
</fo:block-container>
- <fo:table space-before.optimum="1in div 12" margin-left="2in div 12" margin-top="1in div 10" font-family="sans-serif" font-size="7pt" color="green">
+ <fo:table space-before.optimum="1in div 12" margin-left="2in div 12" margin-top="1in div 10" font-family="sans-serif" font-size="7pt" color="green" table-layout="fixed" width="100%">
<fo:table-column column-width="8in div 10 - 2in div 12"/>
<fo:table-column border-right-style="solid" border-right-width="0.5mm" column-width="36in div 10"/>
<fo:table-column column-width="5in div 10"/>
@@ -107,7 +107,7 @@
<fo:block>Från konto nr</fo:block>
</fo:table-cell>
<fo:table-cell border-bottom-style="solid" border-bottom-width="0.13mm" padding-top="6mm" display-align="after">
- <fo:table height="3mm">
+ <fo:table height="3mm" table-layout="fixed" width="100%">
<fo:table-column border-right-style="solid" border-right-width="0.13mm" column-width="0.2in"/>
<fo:table-column border-right-style="solid" border-right-width="0.13mm" column-width="0.2in"/>
<fo:table-column border-right-style="solid" border-right-width="0.13mm" column-width="0.2in"/>
@@ -182,7 +182,7 @@
<fo:block color="black">16.6.2006</fo:block>
</fo:table-cell>
<fo:table-cell border-bottom-style="solid" border-bottom-width="0.5mm" padding-left="2mm" padding-top="4mm" font-size="10pt">
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="0.5cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-body>
@@ -201,7 +201,7 @@
<fo:table-row height="13in div 12 - 5mm">
<fo:table-cell number-columns-spanned="4" padding-left="40mm" display-align="after">
<fo:block>
- <fo:table height="5in div 12" margin-left="2.5mm" margin-right="2.5mm"><!--105-->
+ <fo:table height="5in div 12" margin-left="2.5mm" margin-right="2.5mm" table-layout="fixed" width="100%"><!--105-->
<fo:table-column column-width="0.5mm"/>
<fo:table-column column-width="0.25mm"/>
<fo:table-column column-width="0.25mm"/>
@@ -950,7 +950,7 @@
</fo:page-sequence>
<fo:page-sequence master-reference="A4">
<fo:static-content flow-name="xsl-region-after">
- <fo:table space-before.optimum="1in div 12" margin-left="2in div 12" margin-top="1in div 10" font-family="sans-serif" font-size="7pt" color="green">
+ <fo:table space-before.optimum="1in div 12" margin-left="2in div 12" margin-top="1in div 10" font-family="sans-serif" font-size="7pt" color="green" table-layout="fixed" width="100%">
<fo:table-column column-width="8in div 10 - 2in div 12"/>
<fo:table-column border-right-style="solid" border-right-width="0.5mm" column-width="36in div 10"/>
<fo:table-column column-width="5in div 10"/>
@@ -1025,7 +1025,7 @@
<fo:block>Från konto nr</fo:block>
</fo:table-cell>
<fo:table-cell border-bottom-style="solid" border-bottom-width="0.13mm" padding-top="6mm" display-align="after">
- <fo:table height="3mm">
+ <fo:table height="3mm" table-layout="fixed" width="100%">
<fo:table-column border-right-style="solid" border-right-width="0.13mm" column-width="0.2in"/>
<fo:table-column border-right-style="solid" border-right-width="0.13mm" column-width="0.2in"/>
<fo:table-column border-right-style="solid" border-right-width="0.13mm" column-width="0.2in"/>
@@ -1100,7 +1100,7 @@
<fo:block color="black">16.6.2006</fo:block>
</fo:table-cell>
<fo:table-cell border-bottom-style="solid" border-bottom-width="0.5mm" padding-left="2mm" padding-top="4mm" font-size="10pt">
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="0.5cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-body>
diff --git a/examples/fo/basic/images.fo b/examples/fo/basic/images.fo
index 3bb864fd8..daabcd31b 100644
--- a/examples/fo/basic/images.fo
+++ b/examples/fo/basic/images.fo
@@ -31,8 +31,6 @@
odd-or-even="even" />
<fo:conditional-page-master-reference master-reference="right"
odd-or-even="odd" />
- <!-- recommended fallback procedure -->
- <fo:conditional-page-master-reference master-reference="rest" />
</fo:repeatable-page-master-alternatives>
</fo:page-sequence-master>
</fo:layout-master-set>
diff --git a/examples/fo/basic/tableunits.fo b/examples/fo/basic/tableunits.fo
index aca927c4a..1a1c8c9e1 100644
--- a/examples/fo/basic/tableunits.fo
+++ b/examples/fo/basic/tableunits.fo
@@ -67,9 +67,9 @@
<fo:block space-before="12pt" space-after="6pt">The next table has width=100% on the table no column widths specified on the table-column element.</fo:block>
<!-- table start -->
<fo:table border-collapse="separate" table-layout="fixed" width="100%">
- <fo:table-column background-color="yellow"/>
- <fo:table-column background-color="blue"/>
- <fo:table-column background-color="green"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="yellow"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="blue"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="green"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="before"><fo:block>Some text to make this cell
@@ -83,7 +83,7 @@
<fo:block space-before="12pt" space-after="6pt">The next table has fixed column widths=13cm, ipd.optimum=12cm and ipd.max = 100%.</fo:block>
<!-- table start -->
<fo:table border-collapse="separate"
- table-layout="fixed"
+ table-layout="fixed" width="100%"
inline-progression-dimension="12cm"
inline-progression-dimension.maximum="100%"
>
@@ -122,8 +122,8 @@
<!-- table start -->
<fo:table border-collapse="separate" table-layout="fixed" width="70% + 1cm">
<fo:table-column column-width="from-parent('width') div 3" background-color="yellow"/>
- <fo:table-column background-color="blue"/>
- <fo:table-column background-color="green"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="blue"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="green"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="before"><fo:block>Some text to make this cell
@@ -140,11 +140,11 @@
</fo:block>
<!-- table start -->
<fo:table border-collapse="separate"
- table-layout="fixed"
+ table-layout="fixed" width="100%"
inline-progression-dimension="15cm">
- <fo:table-column background-color="yellow"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="yellow"/>
<fo:table-column column-width="3cm" background-color="blue"/>
- <fo:table-column background-color="green"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="green"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="before"><fo:block>Some text to make this cell
@@ -159,10 +159,10 @@
The next table specifies neither width nor inline-progression-dimension.
</fo:block>
<!-- table start -->
- <fo:table table-layout="fixed" border-collapse="separate">
- <fo:table-column background-color="yellow"/>
+ <fo:table table-layout="fixed" width="100%" border-collapse="separate">
+ <fo:table-column column-width="proportional-column-width(1)" background-color="yellow"/>
<fo:table-column column-width="3cm" background-color="blue"/>
- <fo:table-column background-color="green"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="green"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="before"><fo:block>Some text to make this cell
@@ -178,11 +178,11 @@
specifies a column width of 5cm on the middle column only.
</fo:block>
<!-- table start -->
- <fo:table table-layout="fixed" border-collapse="separate"
+ <fo:table table-layout="fixed" width="100%" border-collapse="separate"
inline-progression-dimension.minimum="10cm">
- <fo:table-column background-color="yellow"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="yellow"/>
<fo:table-column column-width="5cm" background-color="blue"/>
- <fo:table-column background-color="green"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="green"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="before"><fo:block>Some text to make this cell
@@ -194,17 +194,17 @@
</fo:table>
<fo:block space-before="12pt" space-after="6pt">
- The next table specifies inline-progression-dimension.minimum="10cm",
- inline-progression-dimension.maximum="17cm and
+ The next table specifies inline-progression-dimension.minimum=&quot;10cm&quot;,
+ inline-progression-dimension.maximum=&quot;17cm and
specifies a column width of 5cm on the middle column only.
</fo:block>
<!-- table start -->
- <fo:table table-layout="fixed" border-collapse="separate"
+ <fo:table table-layout="fixed" width="100%" border-collapse="separate"
inline-progression-dimension.minimum="10cm"
inline-progression-dimension.maximum="17cm">
- <fo:table-column background-color="yellow"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="yellow"/>
<fo:table-column column-width="5cm" background-color="blue"/>
- <fo:table-column background-color="green"/>
+ <fo:table-column column-width="proportional-column-width(1)" background-color="green"/>
<fo:table-body>
<fo:table-row>
<fo:table-cell display-align="before"><fo:block>Some text to make this cell
diff --git a/examples/fo/build.xml b/examples/fo/build.xml
index 2c7c18259..de83b945c 100644
--- a/examples/fo/build.xml
+++ b/examples/fo/build.xml
@@ -127,6 +127,7 @@
</target>
<!-- =================================================================== -->
<!-- Compares new test pdf files to reference pdf files -->
+ <!-- N.B. All comparisons fail due to differences in /CreationDate -->
<!-- =================================================================== -->
<target name="comparePDF" depends="newPDF">
<compare referenceDirectory="${referenceDir}" testDirectory="${testDir}" filenames="normal.pdf,table.pdf,list.pdf,link.pdf,border.pdf,images.pdf,extensive.pdf,readme.pdf,fonts.pdf,bordershorthand.pdf,character.pdf,corresprop.pdf,hyphen.pdf,inhprop.pdf,instream.pdf,leader.pdf,newlinktest.pdf,normalex.pdf,pdfoutline.pdf,simple.pdf,textdeko.pdf,tableunits.pdf"/>
@@ -144,6 +145,7 @@
<!-- =================================================================== -->
<!-- Starts the test -->
+ <!-- N.B. All tests fail due to differences in /CreationDate -->
<!-- =================================================================== -->
<target name="runtest" depends="comparePDF">
<echo message="Running Fop tests"/>
@@ -154,6 +156,9 @@
<target name="clean" depends="init">
<delete dir="${testDir}"/>
</target>
+ <target name="cleantest" depends="init">
+ <delete dir="${referenceDir}"/>
+ </target>
</project>
<!-- End of file -->
diff --git a/examples/fo/svg/embedding.fo b/examples/fo/svg/embedding.fo
index dbcac747b..a4af1675e 100644
--- a/examples/fo/svg/embedding.fo
+++ b/examples/fo/svg/embedding.fo
@@ -794,7 +794,7 @@ XML Syntax
<fo:block>
Here we have some examples of how the XML can be specified in the fo document.
<fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="350pt"/>
<fo:table-column column-width="150pt"/>
<fo:table-body>
@@ -932,7 +932,7 @@ Sizing
The size of the instream-foreign-object is obtained in a number of ways.
<fo:block>
- <fo:table xmlns:svg="http://www.w3.org/2000/svg">
+ <fo:table xmlns:svg="http://www.w3.org/2000/svg" table-layout="fixed" width="100%">
<fo:table-column column-width="350pt"/>
<fo:table-column column-width="150pt"/>
<fo:table-body>
diff --git a/examples/fo/tables/background.fo b/examples/fo/tables/background.fo
index fe2cf128d..e516348da 100644
--- a/examples/fo/tables/background.fo
+++ b/examples/fo/tables/background.fo
@@ -30,7 +30,7 @@
Table 1: cell background
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -72,7 +72,7 @@
Table 1: row background
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -152,7 +152,7 @@
Table 1: column background
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm" background-color="green"/>
<fo:table-column column-width="3cm" background-color="red"/>
<fo:table-column column-width="3cm" background-color="blue"/>
@@ -219,7 +219,7 @@
Table 1: column backgrounds over page
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm" background-color="green"/>
<fo:table-column column-width="3cm" background-color="red"/>
<fo:table-column column-width="3cm" background-color="blue"/>
@@ -286,7 +286,7 @@
Table 1: body background
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -323,7 +323,7 @@
</fo:table-body>
</fo:table>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -360,7 +360,7 @@
</fo:table-body>
</fo:table>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -397,7 +397,7 @@
</fo:table-body>
</fo:table>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -438,7 +438,7 @@
Table 1: table background
</fo:block>
- <fo:table background-color="green">
+ <fo:table background-color="green" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -475,7 +475,7 @@
</fo:table-body>
</fo:table>
- <fo:table background-color="red">
+ <fo:table background-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -516,7 +516,7 @@
Table 1: combinations
</fo:block>
- <fo:table background-color="green">
+ <fo:table background-color="green" table-layout="fixed" width="100%">
<fo:table-column column-width="2.5cm"/>
<fo:table-column column-width="2.5cm" background-color="green"/>
<fo:table-column column-width="2.5cm" background-color="red"/>
diff --git a/examples/fo/tables/borders.fo b/examples/fo/tables/borders.fo
index a38a6b148..f6704ef61 100644
--- a/examples/fo/tables/borders.fo
+++ b/examples/fo/tables/borders.fo
@@ -30,7 +30,7 @@
Table 1: cell borders
</fo:block>
- <fo:table border-collapse="separate">
+ <fo:table border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -186,7 +186,7 @@
Table 2: row borders
</fo:block>
- <fo:table border-collapse="collapse">
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -310,7 +310,7 @@
Table 3: column borders
</fo:block>
- <fo:table border-collapse="collapse">
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm" border-left-color="green" border-left-width="0.5pt" border-left-style="solid"/>
<fo:table-column column-width="3cm" border-top-color="red" border-top-width="0.5pt" border-top-style="solid"/>
<fo:table-column column-width="3cm" border-right-color="blue" border-right-width="0.5pt" border-right-style="solid"/>
@@ -377,7 +377,7 @@
Table 4: column borders over page
</fo:block>
- <fo:table border-collapse="collapse">
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm" border-left-color="green" border-left-width="0.5pt" border-left-style="solid"/>
<fo:table-column column-width="3cm" border-top-color="red" border-top-width="0.5pt" border-top-style="solid"/>
<fo:table-column column-width="3cm" border-right-color="blue" border-right-width="0.5pt" border-right-style="solid"/>
@@ -444,7 +444,7 @@
Table 5: body borders
</fo:block>
- <fo:table border-collapse="separate">
+ <fo:table border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -480,7 +480,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-collapse="separate">
+ <fo:table border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -516,7 +516,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-collapse="separate">
+ <fo:table border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -552,7 +552,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-collapse="separate">
+ <fo:table border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -588,7 +588,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-collapse="separate">
+ <fo:table border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -628,8 +628,7 @@
Table 6: table borders
</fo:block>
- <fo:table border-left-color="green" border-left-width="0.5pt" border-left-style="solid"
- border-collapse="separate">
+ <fo:table border-left-color="green" border-left-width="0.5pt" border-left-style="solid" border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -665,7 +664,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-top-color="red" border-top-width="0.5pt" border-top-style="solid" border-collapse="separate">
+ <fo:table border-top-color="red" border-top-width="0.5pt" border-top-style="solid" border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -701,7 +700,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-right-color="blue" border-right-width="0.5pt" border-right-style="solid" border-collapse="separate">
+ <fo:table border-right-color="blue" border-right-width="0.5pt" border-right-style="solid" border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -737,7 +736,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-bottom-color="yellow" border-bottom-width="0.5pt" border-bottom-style="solid" border-collapse="separate">
+ <fo:table border-bottom-color="yellow" border-bottom-width="0.5pt" border-bottom-style="solid" border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -773,7 +772,7 @@
</fo:table-body>
</fo:table>
- <fo:table border-color="orange" border-width="0.5pt" border-style="solid" border-collapse="separate">
+ <fo:table border-color="orange" border-width="0.5pt" border-style="solid" border-collapse="separate" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -813,7 +812,7 @@
Table 7: combinations
</fo:block>
- <fo:table border-left-color="green" border-left-width="0.5pt" border-left-style="solid" border-collapse="collapse">
+ <fo:table border-left-color="green" border-left-width="0.5pt" border-left-style="solid" border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="2.5cm"/>
<fo:table-column column-width="2.5cm" border-left-color="green" border-left-width="0.5pt" border-left-style="solid"/>
<fo:table-column column-width="2.5cm" border-top-color="red" border-top-width="0.5pt" border-top-style="solid"/>
@@ -1025,7 +1024,7 @@
implementation status.
</fo:block>
- <fo:table border-collapse="collapse" table-layout="fixed">
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm" border-color="blue" border-width="0.5pt" border-style="solid"/>
<fo:table-column column-width="3cm" border-color="blue" border-width="0.5pt" border-style="solid"/>
<fo:table-column column-width="3cm" border-color="blue" border-width="0.5pt" border-style="solid"/>
@@ -1090,7 +1089,7 @@
fo:table-cell level.
</fo:block>
- <fo:table border-collapse="collapse" table-layout="fixed">
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -1159,7 +1158,7 @@
Check the FOP compliance page for current implementation status.
</fo:block>
- <fo:table border-collapse="collapse" table-layout="fixed"
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%"
border-style="solid" border-width="5pt" border-color="yellow">
<fo:table-column column-width="3cm"
border-style="solid" border-width="3pt" border-color="black"/>
@@ -1264,7 +1263,7 @@
the border properties differ only on color.
</fo:block>
- <fo:table border-collapse="collapse" table-layout="fixed">
+ <fo:table border-collapse="collapse" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"
border-style="solid" border-width="3pt" border-color="black"/>
diff --git a/examples/fo/tables/break.fo b/examples/fo/tables/break.fo
index 81325c4ed..91559699d 100644
--- a/examples/fo/tables/break.fo
+++ b/examples/fo/tables/break.fo
@@ -34,7 +34,7 @@
Table 1: basic break after with next
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -81,7 +81,7 @@
Table 2: basic break before with next
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -128,7 +128,7 @@
Table 3: basic break before a keep with next
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -175,7 +175,7 @@
Table 4: basic break after a keep with previous
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -222,7 +222,7 @@
Table 5: basic break after a keep with previous
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
diff --git a/examples/fo/tables/headfoot.fo b/examples/fo/tables/headfoot.fo
index fd0a14590..4401a2c77 100644
--- a/examples/fo/tables/headfoot.fo
+++ b/examples/fo/tables/headfoot.fo
@@ -30,7 +30,7 @@
Table 1: with header
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -311,7 +311,7 @@
Table 2: with footer
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -592,7 +592,7 @@
Table 3: with header and footer and keeps
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -888,7 +888,7 @@
Table 4: cells spanning columns
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -940,7 +940,7 @@
Table 5: cells spanning rows
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="48pt"/>
<fo:table-column column-width="48pt"/>
<fo:table-column column-width="48pt"/>
@@ -1054,7 +1054,7 @@
Table 6: table with header and multiple body's
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -1242,7 +1242,7 @@
Table 6: table with footer and multiple body's
</fo:block>
- <fo:table>
+ <fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
diff --git a/examples/fo/tables/keep.fo b/examples/fo/tables/keep.fo
index b369d7162..929ee760d 100644
--- a/examples/fo/tables/keep.fo
+++ b/examples/fo/tables/keep.fo
@@ -34,7 +34,7 @@
Table 1: basic keep with next
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -81,7 +81,7 @@
Table 1: basic keep with previous
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -128,7 +128,7 @@
Table 1: basic keep with next and keep with previous
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -192,7 +192,7 @@
Table 1: basic multiple keep with next after normal row
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -324,7 +324,7 @@
Table 1: basic multiple keep (next and previous) after normal row
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="6cm"/>
@@ -456,7 +456,7 @@
Table 1: basic multiple keep with next after normal row with normal row in middle
</fo:block>
- <fo:table border-width="0.5pt" border-color="red">
+ <fo:table border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="6cm"/>
diff --git a/examples/fo/tables/omit.fo b/examples/fo/tables/omit.fo
index 042f557ed..875afe77e 100644
--- a/examples/fo/tables/omit.fo
+++ b/examples/fo/tables/omit.fo
@@ -30,7 +30,7 @@
Table 1: with header
</fo:block>
- <fo:table table-omit-header-at-break="true">
+ <fo:table table-omit-header-at-break="true" table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -311,7 +311,7 @@
Table 2: with footer
</fo:block>
- <fo:table table-omit-footer-at-break="true">
+ <fo:table table-omit-footer-at-break="true" table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -592,7 +592,7 @@
Table 3: with header and footer and keeps
</fo:block>
- <fo:table table-omit-header-at-break="true" table-omit-footer-at-break="true">
+ <fo:table table-omit-header-at-break="true" table-omit-footer-at-break="true" table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -888,7 +888,7 @@
Table 6: table with multiple body's
</fo:block>
- <fo:table table-omit-header-at-break="true">
+ <fo:table table-omit-header-at-break="true" table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
@@ -1076,7 +1076,7 @@
Table 6: table with multiple body's
</fo:block>
- <fo:table table-omit-footer-at-break="true">
+ <fo:table table-omit-footer-at-break="true" table-layout="fixed" width="100%">
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
<fo:table-column column-width="2cm"/>
diff --git a/examples/fo/tables/space.fo b/examples/fo/tables/space.fo
index c0562d8f9..e409720bb 100644
--- a/examples/fo/tables/space.fo
+++ b/examples/fo/tables/space.fo
@@ -30,7 +30,7 @@
Table 1: spaces around cells
</fo:block>
- <fo:table border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -109,7 +109,7 @@
Table 2: spaces around rows
</fo:block>
- <fo:table border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -190,7 +190,7 @@
Table 3: spaces around body
</fo:block>
- <fo:table border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -281,7 +281,7 @@
</fo:block>
<fo:block border-style="solid" border-width="0.5pt">
- <fo:table space-before.optimum="5pt" border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table space-before.optimum="5pt" border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -309,7 +309,7 @@
</fo:block>
<fo:block border-style="solid" border-width="0.5pt">
- <fo:table padding-left="5pt" border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table padding-left="5pt" border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -337,7 +337,7 @@
</fo:block>
<fo:block border-style="solid" border-width="0.5pt">
- <fo:table padding-right="5pt" border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table padding-right="5pt" border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -365,7 +365,7 @@
</fo:block>
<fo:block border-style="solid" border-width="0.5pt">
- <fo:table space-after.optimum="5pt" border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table space-after.optimum="5pt" border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -397,7 +397,7 @@
</fo:block>
<fo:block border-style="solid" border-width="0.5pt">
- <fo:table space-after.optimum="20pt" border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table space-after.optimum="20pt" border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
@@ -462,7 +462,7 @@
</fo:block>
<fo:block border-style="solid" border-width="0.5pt">
- <fo:table space-after.optimum="5pt" border-style="solid" border-width="0.5pt" border-color="red">
+ <fo:table space-after.optimum="5pt" border-style="solid" border-width="0.5pt" border-color="red" table-layout="fixed" width="100%">
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
<fo:table-column column-width="3cm"/>
diff --git a/src/documentation/content/xdocs/examples.xml b/src/documentation/content/xdocs/examples.xml
index f64a0d702..6565c1b4e 100644
--- a/src/documentation/content/xdocs/examples.xml
+++ b/src/documentation/content/xdocs/examples.xml
@@ -39,7 +39,7 @@
<tr>
<td>default font characters</td>
<td><link href="fo/fonts.fo">fonts.fo</link></td>
- <td><link href="fo/fonts.fo.pdf">fonts.fo.pdf</link></td>
+ <td><link href="fo/fonts.pdf">fonts.pdf</link></td>
</tr>
</table>
<p>Other basic examples on the use of XSL-FO can be found in the FOP distribution in
@@ -100,17 +100,17 @@ Embedding images in FO:
<tr>
<td>align in larger viewport</td>
<td><link href="fo/align.fo">align.fo</link></td>
- <td><link href="fo/align.fo.pdf">align.fo.pdf</link></td>
+ <td><link href="fo/align.pdf">align.pdf</link></td>
</tr>
<tr>
<td>align in smaller viewport</td>
<td><link href="fo/align2.fo">align2.fo</link></td>
- <td><link href="fo/align2.fo.pdf">align2.fo.pdf</link></td>
+ <td><link href="fo/align2.pdf">align2.pdf</link></td>
</tr>
<tr>
<td>scaling image</td>
<td><link href="fo/size.fo">size.fo</link></td>
- <td><link href="fo/size.fo.pdf">size.fo.pdf</link></td>
+ <td><link href="fo/size.pdf">size.pdf</link></td>
</tr>
</table>
<p>Look also into the directory examples/fo/svg. There you find some very extensive SVG examples.
@@ -132,7 +132,7 @@ Instream Foreign Object images in FO, there are more on the
<tr>
<td>embedding svg in viewport</td>
<td><link href="fo/embed.fo">embed.fo</link></td>
- <td><link href="fo/embed.fo.pdf">embed.fo.pdf</link></td>
+ <td><link href="fo/embed.pdf">embed.pdf</link></td>
</tr>
</table>
</section>
diff --git a/src/documentation/content/xdocs/fo/align.fo b/src/documentation/content/xdocs/fo/align.fo
index ee0cc8827..06e6a2929 100644
--- a/src/documentation/content/xdocs/fo/align.fo
+++ b/src/documentation/content/xdocs/fo/align.fo
@@ -19,19 +19,18 @@
<fo:root font-family="Times Roman" font-size="12pt" text-align="center" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
- <fo:simple-page-master
- margin-right="1.5cm"
- margin-left="1.5cm"
- margin-bottom="2cm"
- margin-top="1cm"
- page-width="21cm"
- page-height="29.7cm"
- master-name="left">
- <fo:region-before extent="1cm"/>
- <fo:region-body margin-top="1cm"/>
- <fo:region-after extent="1.5cm"/>
- </fo:simple-page-master>
-
+ <fo:simple-page-master
+ margin-right="1.5cm"
+ margin-left="1.5cm"
+ margin-bottom="2cm"
+ margin-top="1cm"
+ page-width="21cm"
+ page-height="29.7cm"
+ master-name="left">
+ <fo:region-body margin-top="1cm"/>
+ <fo:region-before extent="1cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence id="N2528" master-reference="left">
diff --git a/src/documentation/content/xdocs/fo/align.fo.pdf b/src/documentation/content/xdocs/fo/align.fo.pdf
deleted file mode 100644
index 9e5393e1e..000000000
--- a/src/documentation/content/xdocs/fo/align.fo.pdf
+++ /dev/null
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/align.pdf b/src/documentation/content/xdocs/fo/align.pdf
new file mode 100644
index 000000000..4b9413b1c
--- /dev/null
+++ b/src/documentation/content/xdocs/fo/align.pdf
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/align2.fo b/src/documentation/content/xdocs/fo/align2.fo
index d16553139..64449dbb3 100644
--- a/src/documentation/content/xdocs/fo/align2.fo
+++ b/src/documentation/content/xdocs/fo/align2.fo
@@ -19,19 +19,18 @@
<fo:root font-family="Times Roman" font-size="12pt" text-align="center" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
- <fo:simple-page-master
- margin-right="1.5cm"
- margin-left="1.5cm"
- margin-bottom="2cm"
- margin-top="1cm"
- page-width="21cm"
- page-height="29.7cm"
- master-name="left">
- <fo:region-before extent="1cm"/>
- <fo:region-body margin-top="1cm"/>
- <fo:region-after extent="1.5cm"/>
- </fo:simple-page-master>
-
+ <fo:simple-page-master
+ margin-right="1.5cm"
+ margin-left="1.5cm"
+ margin-bottom="2cm"
+ margin-top="1cm"
+ page-width="21cm"
+ page-height="29.7cm"
+ master-name="left">
+ <fo:region-body margin-top="1cm"/>
+ <fo:region-before extent="1cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence id="N2528" master-reference="left">
@@ -59,7 +58,7 @@ Default align:
<fo:block>
Default align:
(<fo:external-graphic width="50pt" height="50pt" overflow="hidden" src="images/fop.jpg"/>), start-before
-(<fo:external-graphic width="50pt" height="50pt" overflow="hidden" text-align="start" display-align="start" src="images/fop.jpg"/>), start-center
+(<fo:external-graphic width="50pt" height="50pt" overflow="hidden" text-align="start" display-align="before" src="images/fop.jpg"/>), start-center
(<fo:external-graphic width="50pt" height="50pt" overflow="hidden" text-align="start" display-align="center" src="images/fop.jpg"/>), start-after
(<fo:external-graphic width="50pt" height="50pt" overflow="hidden" text-align="start" display-align="after" src="images/fop.jpg"/>), center-before
(<fo:external-graphic width="50pt" height="50pt" overflow="hidden" text-align="center" display-align="before" src="images/fop.jpg"/>), center-after
diff --git a/src/documentation/content/xdocs/fo/align2.fo.pdf b/src/documentation/content/xdocs/fo/align2.fo.pdf
deleted file mode 100644
index f5a02666b..000000000
--- a/src/documentation/content/xdocs/fo/align2.fo.pdf
+++ /dev/null
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/align2.pdf b/src/documentation/content/xdocs/fo/align2.pdf
new file mode 100644
index 000000000..01b8d1bfb
--- /dev/null
+++ b/src/documentation/content/xdocs/fo/align2.pdf
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/build.xml b/src/documentation/content/xdocs/fo/build.xml
new file mode 100644
index 000000000..4b4a099b4
--- /dev/null
+++ b/src/documentation/content/xdocs/fo/build.xml
@@ -0,0 +1,70 @@
+<?xml version="1.0"?>
+<!--
+ Licensed to the Apache Software Foundation (ASF) under one or more
+ contributor license agreements. See the NOTICE file distributed with
+ this work for additional information regarding copyright ownership.
+ The ASF licenses this file to You 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.
+-->
+<!-- =========================================================================== -->
+<project default="newPDF" basedir=".">
+ <!-- =================================================================== -->
+ <!-- Initialization target -->
+ <!-- =================================================================== -->
+ <target name="init">
+ <tstamp/>
+ <mkdir dir="tests"/>
+ <property name="testDir" value="tests"/>
+ <property name="foDir" value="."/>
+ <path id="run-classpath">
+ <fileset dir="../../../../../lib">
+ <include name="*.jar"/>
+ </fileset>
+ <pathelement location="../../../../../build/fop.jar"/>
+ </path>
+ <taskdef name="fop" classname="org.apache.fop.tools.anttasks.Fop" classpathref="run-classpath"/>
+ </target>
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage">
+ <echo message="Use '-projecthelp' instead"/>
+ </target>
+ <!-- =================================================================== -->
+ <!-- Produces new test files (function) -->
+ <!-- =================================================================== -->
+ <target name="newTestFiles">
+ <fop format="${mimetype}" outdir="${outDir}" messagelevel="${msglevel}" relativebase="true" throwexceptions="false">
+ <fileset dir=".">
+ <include name="**/*.fo"/>
+ </fileset>
+ </fop>
+ </target>
+ <!-- =================================================================== -->
+ <!-- Produces new test PDF files -->
+ <!-- =================================================================== -->
+ <target name="newPDF" depends="init" description="Creates a new set of PDF test files">
+ <antcall target="newTestFiles">
+ <param name="mimetype" value="application/pdf"/>
+ <param name="msglevel" value="warn"/>
+ <param name="outDir" value="${testDir}"/>
+ </antcall>
+ </target>
+ <!-- =================================================================== -->
+ <!-- Clean targets -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <delete dir="${testDir}"/>
+ </target>
+
+</project>
+<!-- End of file -->
diff --git a/src/documentation/content/xdocs/fo/embed.fo b/src/documentation/content/xdocs/fo/embed.fo
index 558e9d397..6b052e0bf 100644
--- a/src/documentation/content/xdocs/fo/embed.fo
+++ b/src/documentation/content/xdocs/fo/embed.fo
@@ -23,19 +23,18 @@
<fo:root font-family="Times Roman" font-size="12pt" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
- <fo:simple-page-master
- margin-right="1.5cm"
- margin-left="1.5cm"
- margin-bottom="2cm"
- margin-top="1cm"
- page-width="21cm"
- page-height="29.7cm"
- master-name="left">
- <fo:region-before extent="1cm"/>
- <fo:region-body margin-top="1cm"/>
- <fo:region-after extent="1.5cm"/>
- </fo:simple-page-master>
-
+ <fo:simple-page-master
+ margin-right="1.5cm"
+ margin-left="1.5cm"
+ margin-bottom="2cm"
+ margin-top="1cm"
+ page-width="21cm"
+ page-height="29.7cm"
+ master-name="left">
+ <fo:region-body margin-top="1cm"/>
+ <fo:region-before extent="1cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence id="N2528" master-reference="left">
diff --git a/src/documentation/content/xdocs/fo/embed.fo.pdf b/src/documentation/content/xdocs/fo/embed.fo.pdf
deleted file mode 100644
index 6da06b559..000000000
--- a/src/documentation/content/xdocs/fo/embed.fo.pdf
+++ /dev/null
@@ -1,87 +0,0 @@
-%PDF-1.3
-%ª«¬­
-4 0 obj
-<< /Type /Info
-/Producer (FOP 0.20.5) >>
-endobj
-5 0 obj
-<< /Length 1556 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb"0W9p=9h(^KQB5D>011Kd^2(:&!s-8.0G?92NC6am<+$Zp"a8L^3ZrE?Z%8B:u_OFn)DOGr-/INIQ=q\oZh2p:3YpSJW^j5k;[E4:*BGe#CoakN"mYH!sFZ8>$).@Y@g/-!,+\,3geIX]sgn&ks8h-P:I5CJ>(?M<peVjI(+?b[S@pZ8%/ns@)HU2Lio<0CtCPX[Q)8_(<FftM:sit[&L*Ob:OKat[.EkI%ON)unFn92KJrG.J!cH<PB*A9Y6q24X,`S^&S[!UEIh+u"#V93'eZc#bITL93O^P^p,I3BHrmbEFVPF$aP[Jemg]0^JG[GBF4ZUN[?=KSW(*k#W!J+1'Bh;+g]["$p!rMJIh;uH?[:#+dG<U]5@$Jf'eIGN8iGJ0k>3srEp%+j`GFC2lVAW?-k]'A%*A+X0,Y&n>gXrgJRd8etuLIh.uop[SIXoW1(Me8(mZ+eI84[tkfD8Y2>AOP5_.60qf-b].hK50R#%EJ8&ck"-ed6),XDAZ4I/+.NABKpXVTecSBnJhE/-BIl,-QFP0P>7hC<B]QN&C.,Y8Gd*8%[k^9Hi4&$B)L$>kMsi)STHZs%$'J5nT--!YC%F5o`L74Wr:Be]r#sCZ+lgS/E:AD3,3jV\ej=Ch)Mm&T3L9Qof&akqNaE.ePBeD$+%h=PJ*s!3>n&C]igN#KOB]'j8H"aks*5=iHX3ZW>2HPS[b]*`)73_Q%NVce\!_DKr]/-Y/42K3d4X3_6^:.XnTm.M/Ws*C)U,oQ,$R7M5;IQWWpQNXEeNq$<R<Z?j3W^FmcIHJnJLtn"7q,lIV18P-__e<Fgr_6rPiH7SM(LJ5hU;;F)d'"fZPjPmA)PrUM!Qp%*M$jflJgibHB!cmc"N9.VAd;)(V]?<k_^!EQuC=90p["fud#Pn6%clf97o>-MaM&m21cZ'7XGeK>`6"O7>T<ko&E!@qO]XE0/^&3L?dC3.eQYbEX_<h1cDLEnJS=-O,Fo?4qC$r@,-5S^4!<M2Bs<$Qsaan'ESI[F:IQD.j]$*GaN/1&\A3Cq0H&Y'R;YM^/.JlhFK?K]UL7.;t8P=rd#Au7HmY>plj8g:-IOGkatB8+,OGQk;/'tf.M\ap^O]Zf]N/IY_K;_Cf\L-lRiL(u"ei;CH2-j*X=.qf*gTG=iZSQ6qr)cg<j)q4H%YZ.\Z,10D%M5;J,.L4)Jb&CAe^;<tH$=DaBI%@mQK]&)u;bP"C=,]);Y<#<---<LF5r/0+2(Jf:i@B;0YOE:@cJ;PgE8YMeBD+'tMJH7H>BtH@(6&KA0C:ed<NAL]hd<_.;BdP%K4MpV]JSDt]5SSS_HjZ5GBXA0<7Li@R\gm\NFJc%&ogoS@O[.ub!@ekBUfe=Y.td^!a":e>j%+t+a=UNaVEi.YkDdNJud0091bqd)C/fC``XJC$=&-4E!<D[FmcaPJcf8u<fEkZ?OjPcl:rlH2j2]h[<`2[_>YWO/1#n25qkWC<X.PM>_ic-+YL^(]=:7:C?abAqh?bqD4b-,1\n_j+*T5NVnRDAT6?<U@WcP17PIi#^4hB/rspg7gYM~>
-endstream
-endobj
-6 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 5 0 R
->>
-endobj
-7 0 obj
-<< /Length 1817 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gb"0W:N+uG(^BKA5)#"'Yd"$U8imem#OF-PR"6:/*k]utN6sEG3%4Xj7nFsp;3J?+4m;Cb/S%)3?CFKB?VSYnqb?ePK?>&Z1uIXURQk@7VtS,NabaJ,Y-fH"AbkJUs)n(bDSLTWQi$]3.r%#RgR?#YrF>m&j5#._.Gt&lrOg7dfGe=DCLO9.JlJ#\Nu:_+'9XObCm7%pIqEiC#]3r(6ZXV,rHP^:2:!="7[p5gQd%aYoh4"?CMW%pVqf;,\4sMKf<>Y[[oqT?]$9s%n,K_VArek#gUbF!FjDL<f/M_nI7j[N(Sm.]Wjj^^X.[)1g9opE<O[0BX3jCRC#>/(H\Zt^D8g"tMc@0c>I<YL)PBJq<Yb-Gl^BiRqaf,5=oU6pl&g!lMKY/W;-W=o:>%?@\t`PT_@NNSUM//U^7dnFB>]k,gsGT'8p>p-/_"t]4N`X)^SA/n>4O8[WK$DZi:"X[8@`0iGF;K/oBJDZ9tRQ^T20MuX/In(9BX/odV^W3rKV8qhu&C&.Ui@aH`nog^">K.8!\<CbO;jA8pD*MA_f>SZl<4uYB;@Nk0tuRbZQ^4Zl`RW%CQc6l9V>:g\X^LPnhTI(tXiC5P1&O>dih=]W7P0+tFD=.[%`'UfWeAOpP4=dVor(_H")Q=5iGu?005^2='PfY.j8J=(&-[];:<l9bJ,&#hDj."`%!AYQ@k@$<R<Z?sPjq69;_j@GTJ+k>`7n,`KdDas8\bkm\B&A4"hR1fT1/:_fus<N*KP<MaYXc)UX7DLX_9k$aN$,J&\><CpXd;FK$3aTS\ZBtt'X!@qO]XFPH\YU\Vu)St.eR@`EV"d+89V$UU:P#AMhgD3`r/kZfjOs20H@)CZo%(HJMi"k+">B%2tDAdYA`K1Sda):WQ;.YHi:?tGNSg5X.4ecbW9V!N#'S<B)'s>DR\-c<hmODkpY$"i\dtAg/Ar1e%#oi@`P/N$La-;XJaci0JKto3`"g?i!]RnbCo.$QBCOt*6.:L?"KM>*j=-Y$X,X&#FPY<*N9aZGQn-WL<.sM6$CZe\5cE7=W(ZpJ.6/"Y,KQRN)PJi,BKk(lkffCYd>!XZP"g+F4['#tNb0soB]CI].`JJ$#/^9_Q\FLn"+mCRiUL`Z"CJkGNJlhFK?GS.:>s#6[Hb1&@?()XK^4M2BZ*,oS9LsJ(`@./D2(]8Ei@B;0YOE:@Y2*0Q]NkoZ/kuj+,'5q+XHLMT,b>rMPKCr*@3P+I?GS.:"g?j,mCZ'Ym@*'X=+=PH)to%WGsV)l\>r8sj/sOC"]p_r\of,GA;.+H's^0W[EIir]<[S6Z`l&V$F><sVH>)o:D+>(*`=mgV@L0aKjZEIKrqQo[_gV'gWGqjlRK%F1W!Bq+pYQ6,V^J,-0:n4_Uc(NCk]!q't1t[fXc61"a>,!D']\<G9=2?le#JE2Yh5Y,q?c(\&BGM>B?a8_H-VhA(.Qi,aB[Mh<MIJrU<u4p8@NPg4a!]HUU%C"C_!=2A_5k-70un,]&]=]dZ\`!H,[^\,ePH#2F!L4!5Am3d=S.rtet1DeYBZ)9"mCOX)8!]qp+@9YE#Q$:.bW$=0>UFG6l5f<tDUW7J+S>o.&e<C*#%OfU<09Lr])D44.H_C$c8=Wo;+Krg@NZE@KaJDf0nF]6C[:nh/r=d&F?+,c5>K),#!I2T6r<l$7f"fl$RmAr(?41i![XCmel?e:;s#lD"fc\IkNRhp:0Qc#fjKD<PeD8,\(cFYa5L\!.0])1S''m`&lNLkFP?K+K&a,A18gZeADJ+r!>R/Z're+oUP&g(8R_^!@;&u7($?83Z%nS$eZO5XGIU386~>
-endstream
-endobj
-8 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 7 0 R
->>
-endobj
-9 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F5
-/BaseFont /Times-Roman
-/Encoding /WinAnsiEncoding >>
-endobj
-10 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F7
-/BaseFont /Times-Bold
-/Encoding /WinAnsiEncoding >>
-endobj
-1 0 obj
-<< /Type /Pages
-/Count 2
-/Kids [6 0 R 8 0 R ] >>
-endobj
-2 0 obj
-<< /Type /Catalog
-/Pages 1 0 R
- >>
-endobj
-3 0 obj
-<<
-/Font << /F5 9 0 R /F7 10 0 R >>
-/ProcSet [ /PDF /ImageC /Text ] >>
-endobj
-xref
-0 11
-0000000000 65535 f
-0000004058 00000 n
-0000004122 00000 n
-0000004172 00000 n
-0000000015 00000 n
-0000000071 00000 n
-0000001719 00000 n
-0000001825 00000 n
-0000003734 00000 n
-0000003840 00000 n
-0000003949 00000 n
-trailer
-<<
-/Size 11
-/Root 2 0 R
-/Info 4 0 R
->>
-startxref
-4261
-%%EOF
diff --git a/src/documentation/content/xdocs/fo/embed.pdf b/src/documentation/content/xdocs/fo/embed.pdf
new file mode 100644
index 000000000..59dec7763
--- /dev/null
+++ b/src/documentation/content/xdocs/fo/embed.pdf
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/fonts.fo b/src/documentation/content/xdocs/fo/fonts.fo
index 12e176eba..0c2646d05 100644
--- a/src/documentation/content/xdocs/fo/fonts.fo
+++ b/src/documentation/content/xdocs/fo/fonts.fo
@@ -18,32 +18,32 @@
<!-- $Id$ -->
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
- <!-- defines the layout master -->
- <fo:layout-master-set>
- <fo:simple-page-master master-name="first"
- page-height="29.7cm"
- page-width="21cm"
- margin-top="1cm"
- margin-bottom="2cm"
- margin-left="2.5cm"
- margin-right="2.5cm">
- <fo:region-body margin-top="1cm"/>
- <fo:region-before extent="1cm"/>
- <fo:region-after extent="1.5cm"/>
- </fo:simple-page-master>
- </fo:layout-master-set>
-
- <!-- starts actual layout -->
- <fo:page-sequence master-reference="first">
+<!-- defines the layout master -->
+<fo:layout-master-set>
+ <fo:simple-page-master
+ master-name="first"
+ page-height="29.7cm"
+ page-width="21cm"
+ margin-top="1cm"
+ margin-bottom="2cm"
+ margin-left="2.5cm"
+ margin-right="2.5cm">
+ <fo:region-body margin-top="1cm"/>
+ <fo:region-before extent="1cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
+</fo:layout-master-set>
+<!-- starts actual layout -->
+<fo:page-sequence master-reference="first">
<fo:flow flow-name="xsl-region-body">
- <fo:block font-family="Helvetica" font-size="14pt">
+<fo:block font-family="Helvetica" font-size="14pt">
Helvetica
</fo:block>
- <fo:block space-after.optimum="10pt" font-family="Helvetica" font-size="10pt">
-<fo:table>
+<fo:block space-after.optimum="10pt" font-family="Helvetica" font-size="10pt">
+<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="65pt"/>
<fo:table-column column-width="30pt"/>
<fo:table-column column-width="65pt"/>
@@ -303,7 +303,7 @@ Helvetica
Times Roman
</fo:block>
<fo:block space-after.optimum="10pt" font-family="Times Roman" font-size="10pt">
-<fo:table>
+<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="65pt"/>
<fo:table-column column-width="30pt"/>
<fo:table-column column-width="65pt"/>
@@ -563,7 +563,7 @@ Times Roman
Courier
</fo:block>
<fo:block space-after.optimum="10pt" font-family="Courier" font-size="10pt">
-<fo:table>
+<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="65pt"/>
<fo:table-column column-width="30pt"/>
<fo:table-column column-width="65pt"/>
@@ -823,7 +823,7 @@ Courier
ZapfDingbats:
</fo:block>
<fo:block space-after.optimum="10pt" font-family="ZapfDingbats" font-size="10pt">
-<fo:table>
+<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="65pt"/>
<fo:table-column column-width="30pt"/>
<fo:table-column column-width="65pt"/>
@@ -1071,7 +1071,7 @@ Courier
Symbol:
</fo:block>
<fo:block space-after.optimum="10pt" font-family="Symbol" font-size="10pt">
-<fo:table>
+<fo:table table-layout="fixed" width="100%">
<fo:table-column column-width="65pt"/>
<fo:table-column column-width="30pt"/>
<fo:table-column column-width="65pt"/>
diff --git a/src/documentation/content/xdocs/fo/fonts.fo.pdf b/src/documentation/content/xdocs/fo/fonts.fo.pdf
deleted file mode 100644
index 85a37fd0e..000000000
--- a/src/documentation/content/xdocs/fo/fonts.fo.pdf
+++ /dev/null
@@ -1,160 +0,0 @@
-%PDF-1.4
-%ª«¬­
-4 0 obj
-<< /Type /Info
-/Producer (FOP 0.20.5) >>
-endobj
-5 0 obj
-<< /Length 2756 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gas2O=aO+:'LgpN.p>dQQ0),tXf?8Xl8sh^A"4[?L]L?S.Yp(`G)J$07;CF[q0Xk,m[_:;p.hg?\%DUPMj%;2G1eG?n*DpXrcNRk=kqghM^JC4(9q#F6<M1iQEg+@rM.>kF&rk?5<4+=n+NmTMjoY'X2c"#Z%_Ip=kXFJF_B#_[H@&U`<@2^l+]E+l1pZ!Cop\)PH?hg\+B/,61.dsGk/JYH2/>>gUQl'^O&$qIgP0_PeXi&QbNt"`g=GeR$XG9Q\Vt!J+koUIg+m`>Q4&kH259:cpnuO)YE2Y+(Xr3H2XcdDe8Lq]_jXK4.1I\07P#'<[L&Tb:eD$aQ1Beq%DbJ9R`Fs?_!J[FZFa!bf^reYKF[C8A"tK/EcFDnJ:3"S@aEl4-6r5g`7ZS"h?/HmND$@jL1SjK>\"VRr[p,&g'EraP7s/X*K!&QFTB@f-"GBg`c-Q5TXJ(OS?p@pG-s6q\pYrAaYZS2aQkBmZ@1P5]10$OS?4MDT]N!OS<rahNW)"+n(nG\QbDAD^"QiaC@7)(@p=74Hso*+n#NSI6%$;nihZ</a(tWhC"DsEpbO?rEYLhR60L.$HS4N*V01Na;^O/jSeAVgob2UOSAK8*bFc$pCBM1AF>QR%mfVpmZ@1(5i0Z=+n$M*gm)sTOS;O9DTfS;aSVkX2s&gXjSdfFgoS]0HcZ(s+CCCTpQ5,tON2D0*qK<@aA)011uohL?]\T5a@"t%,e`]/LWFs6H3#3#RK&`J6:;k]J"?4`6lo6U"8'`(*b'V<5R'PD*eJm*oKktfP5c!UKo.u\s'*nZ('VeYGGH$-$5!2@U_b]lOT+]?04Yb>rjPHPBG;Th5Cd(n-pReQP$[&p5QTX`^!KW,!k:mL_4pu6n0@1ONrg$24jj]\"Xnnn82#W1TE'Ef]c^4'!k;$P@AEo!56AMb;Ln[0+MCTLJG_VW]jO`kr;T*0iM6bTs-<3X8eLXo)sN'@,38b9klm=rjSpt!Kp<kCs*)m!/4IY['@86]7EGKNU_d9nOT25S(LDu\s$'(.^_@slJ!"&n.74%6-G:O#K`(j;H=<ZVq>ZfR!_j9tru^KZRPp8B"5E*hD.fR'["/K0$b`fV$_aI-UbGs8SLn%O6#@a#a[0o_fg7*%"'J;5H>gtB6;ebYA$XIN>IG*3g-?jGL#1XkKb2dh:@6Wubr&]2<GgsRDE[B@P19c2R4N#)Pccp+c=B4fTnKhI=6S6$?J$t3QI?$nQ7R-Vfg7Z6"+OpHKaotE#\nMOQhDO.a?jR@_ls@dC:4]3l7hQjLRKfJ\N1.Gd%TkY'Y?C7H_@&^G]aksTOH.^_Hn7;4j[L`IWZM$5^T1-em[2Um=dl/LLH7N(Wp/,L-<sk.#N-ap5"&=1tH*f,OL0d=U0G<P6L?-10KB\&SWm4b<#!J8:.%@el,qOQN1P>E7Rrp\;']Dq5gL.E"22g,$Icji>UDXV6lij_DSh>!bsmkKkk?TPgt*F$eNa3.'E6m(TsIF:h&ai0:\`L:h]0o0@Hn"Z4Lp>W@sd8]hih:W@sd8]hj%@W@sd8]hj7FW@sdX]b#qaW@sd8]hj[RW@sd8]hjk2YV.QpKu2VqI:6hCPii8;$VPi?82jp`=P=.Z\cM]FdU"?S%G2J_p-RGM^qR%_(P6i5p4]?V:qRaO0-'A5in]-5iFjkYmfr+d7sgqS2dfuPg'bm3!W0a]?7=Y>fGBSA6Les/^2UFqMK]0rKql=X]Gn+/>1sA']+Oq73^.'^_7L<VU,kIt5Q;eYLj`,@+0pUYh2$JV*?VS@i8'3;;&paaL#CdCI8M",ZA%5mLj`,@+0pUYh2$JV*?TG?MK^<=7<O"!(4p`Tp-j+Oa;0AO,PFQKI)m(TG9cfMFaV7GJp/I5Kr;U\]Gn+/Wr#5n&A/se0<4n<[Lg*@YV3$R7CEc?S$4QGqo-iInSZ4XW9tJT6L\m0^8UH9fg>1G_S2u:(YM.EDSj,dmMFPCn8?+WW9tJT6L\m0^8UH9fg>1G_S2u:(YM.EDSj,dmMFPCn8?+WW9tH`$cT^aqkCZ/A.-5c$2^I.?XsP\]*\A/\mJtU_7L$NU:O]B$c0F]qkCZ/A.-5c`mBo4#I^A5Ca+Cr9^pb<]k#;5Jp<9KV]=,\K%hH1QV?oF>.oUFR4.3oYOU=J]l;.A!d_rkDd4#rAeRJDA:dmcl;_LU&_LmC)Fn&gG-Zt_?=WM*\ZH,`RgAN:`o*FfYa%ocq2u'@V(:?D-3AV;"@l]oF>a`t9."o3XZ1W>U>VA3n>KP3n$7eC?S]I^<&gID"TFPjDJTL;fgP<_RGc(c=28Y#lCM+ZK'J/Y9q:VXI>B>?d%2Wg-54TuF^`?<7e_R"'9mqY1/STV;<<,"NE$Zd-Fg>23A6jih%P+u5?.`Q"PFI+s'tZ2ioFb/G)!V!4POK$Y.#KpgV7rSpuo9+[>.8]*b5XST6W59[<2(ShO[$rp'3YX&jGo!9J#:K?4NTQ1JK:ZDI*gFH!C/Dh9N([,B'Wk<;UquIH&M:l7fE=&%pRn*TtuLH+3^sZV8W]GGf(pF_i,55<YL:F5&mJ>NtD*>T)>jdG.>hO64UG[SQ$do'7Ebd;9uLXlME+0!j:rQWqS4kAp0"8VX^&cbDBrp\]/_g\:X//F^Y+,M^#r5@]95q9'I6W/ag5ns;XcclT*uj'U*;K*"(#%KCI=*L+Xhqu+(VAY::H&:ETgJWBA$n<HcS3^TI0EoiL9NmK8R*;O-<,P9,m2nj=*,;dSX-baVo,F$B.$fAJ/pHP_$<5J~>
-endstream
-endobj
-6 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 5 0 R
->>
-endobj
-7 0 obj
-<< /Length 2935 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gas2O=-jma'SPBB.u%SN_RLo"U`"2C^gpR<OtetcAE%Mt#"GslqY'^#I]5BohPsK0gZn=qd^@Wo9XjJ6B:iGoG+W(r].X%:]@cK]+m`ZsHPb]0m-EK^="`BQb8q_=\pMg#gP@?jrVt48.p$r`m*;b8p^g'q&b&j&msU$7gA(OFhY/=DCr>]H\8rsDC;V+n\@!W1DSmP!\1o:WBuBZFn%'.G[c,iln8L?&E7_MV*Pg^/KUXmT!'HLWF1)Oe!;E>VS86"__#%#PY&D4)J@e^%cF;aRi3lUU$Z1+g\1(G@@N-?hhNb*^i:oYYmZ440*#SY\n0k:=^HVkj+K>OY57DKaWWU"#!q9Mq#C_.:i(d5VIX_da<`B<QIiRCD<*^#`IfeP6WOa/K5.';IYuG!>INJT>-rnlOh^<r0;KY.tI0R27<S)l\(P)7Vl?_ss$?0(HXp;^+$#j+KXp;^+"`RD?Xp;^+%Id+l#CaGEL:a4Z%fH;7^^m/#nGBNlO.n])qf;c3U,qf@o)S5JFl<!1!:EJ0H1:]h!4Sfi4S\k$J=BGZ*rQ!m^q3Ke*rQ"0)fC_5l9+k?%,cn=FWUJ[Wk_?ubu3pp2t%;a9!no_]M!JueK0tH*oWqq#E[7.KU5j_5W^&!?@$_onU*lP.FnOLo+BrX=U1&7a+2cV*C)hJ#VY!p^k)"^iMBca3&*TC]X6u)8&f1pQ[0\1bkR^td]W`m)IF%^$?gquj%I6^_[^X%Hpr:ZfE(pM2;klP#OqaPKU7iB_#N:)?<VLTs*mO`WS%m]s#o>;B1MIk9u9QNNo9pZ#VSn6K)^<G]N"8(rr7iEd^:=ps(B,_foG"j?O/<%4+dKN&ROaG"TSKoGj3rpr;R_pV/Sros6kW-`Z;nqIh5p9G6IsG8U0LT&cDYFiMCW,i4j?fl[%\]TuD?Y$RQ3dd:<S5hZLAB;<XGq;b-p2^kdh6=#HC49)&Bm9GG(@aV7Xk#I%^4d$7>&O>9"M,85d6D)-eZnpr^,l#3;X;EiI5ep>i"'_;@,R4(TB>0[@lB;-MSBL*`UTSZ!X@7,D34eaQ\l69.t9cm4K6$8;=UoBERMkIZ&'N3LPe4!>BA.%Se,O-JQ/i&,[p(;EZ<>V&i>5O,eLoQA,+iSjt>t!+pG4uTS4&M(l[(_S4hhcr,TacI(#+$`/(L#fG-unFQ,@+uDTBI87*U,nkr']_(lUViGjsN2[>XuBP69ijXP2_HLUsi,((TnugBW[mT03h#Yct5L>?FZ#;U#g`t]PrUIU&BG7]PrUITbW'O]PrUITe1bg]PrUITgaI*]PrUITj</B]L[f2;+TN8-nh)6?"i8j-nh)6?"iJp0eY*B6@8`kH!s8\>5`*X$VS(Xp-3%n=OMm5!&Nbk-!f^C0OnEkdY3\^1ZjB[?-"9F@pW9cKh_\*k(P$ckThil?9$Ae:'*66Kd0me,VW_737<LU!]/tm,@0LY0OnEKdY1Et1ZjB9?0EOf@pV.EKhMOUk!`(Wcq.W]]VsuB9HfV8JpC5<WQqu^oa=Bm)JLs\9EGSoWu>\-KhMOU8uikE15/C'$VJUCZnd>/!XhWDX0aX99EGSobH&!*KhMOu8h6jI15/C'.nV=jZq_;r$*5PW5e><6@)\lhO=kVf=RddHU^N^r<]l8>;)_Fp,d?9*</nJW67.6uO.pC=bnMo>XEYFZUMcrj8RTN4W#Be7KhMOuk!_/mSg\[n=>;J/;)_Fp,d:`a<24?.O@`j!]Vn<U9HfV8MKr'Y\sYl3JJIdN)Kdii9ELcYf?NKe.e8uqAq<@%$d7gWcQk7TFGAYCVOn"A+nIrC_$+`,G"s;D&Tic9pkaYFXNgs*"P4gICm%A#.S(hp&?-"0-BYj31Iq?X=)3=[,*P<*Z,#%mb[qKU%;]ZR-WMhG,VgAc&mT9Tbrh32I#png='Q2>R7&BT7"X1.C?.F<k_tToE;s#,Gqt4M$&Je744WDX8RtRe,cK@1G0;-d.3oO*Cpbt>,VgmGs#<J6[I;3_1+aaaN.Pg)P=_i*etRAg@5O/b<NO/^GI7Ip,b6ENDB5W;+iW`rO@W3Qe`J6C*)s1b'/`2ZP!i0Ki<Pi"gM<kC-0+uG+oarT\p'C!_V"a8q5/([](u/]Ri-@mfD$)G:-[dJ5K3#^+a!Nmq!Xi!aT(6&:JkY`)n9b&mf[m`7IN-Rf7r/dnBUKNgq`eFr9cJu*;r'i%G\GOpAk,QIZ`AT(Y\B%!0;SYgci=%L>NC.1c:`hUH>jAo^.?(^#!Y!h%B/Gm=e,PlaICCB]J(+$^2&e^O:?:)\1b3R$:3Oqs^I@*59*?-L;8tLGu^$nEkqo_Z%&nG"Wbahd.;_hJAh>g.&uX(PfN0Rg8\+#1dJ_o&BAS@e8@pfUY4=LjQm^C_#6\05i.Q4?2I\_FrU-YfuEdQalSDR5YC)H/l^sDZX5Ia+J$],.o1]#Lg=[G_mCNXuS]o!XTkX^7i0<)EJpu6[)HdF?EZ\m\Xaa">CAB:"@l&?lutLWjreY5]eqbK."H[8U")ZGljM&F>['m-bt"!2cD#L!k9=*VO$0S_#/L32(s;&Hj7sS\ZN<(R6pIW!;RoJ>'t)gNM+(.>AY`DKr!'$,"r]XpspQ+6&1;K?AN81N?H2.5qbV_N^f+?U7`;H)Fu)Dnq)cZRRnaFnq)cZ)G;;Go7Dl[RS4sV3PL<EiA=H-j,5mc:EpiU(L4o+L`562]&4cmUsqr5']6fjTGldV]&4KeACZKE_7+C+\/I(PE&4JM[?/@4FU'[#87F/]0j!1^bS64B$X(\RG9A\q,h>9tF4D;P'87da65FXm*QUntM7&Ga>]g9,;b1@LA2.0AJ]ngk=:88j?PmNe/S$Sb@Ao$jON7-MTdJ>W-K>nsRTKs.N*dE:@P)+HIUT13[F12]0+9/3<]ZB=IA%q;8d@,d/sO:X0eE*:@@:4JAjnnDQa9>7"16kd=o~>
-endstream
-endobj
-8 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 7 0 R
->>
-endobj
-9 0 obj
-<< /Length 3803 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gat=/BpTgY&cAe=0fD3@gQ_!gWbr-%H[Bq?nSK$`Y[E-$#ltYUY`6udmM]f;-7cEtQ,Vbc]Vh).W&c.ZU3c[qlIOe/ZuagNh:9DIG5(3dgY).YgLY0?P]f'"1YKFQHEqn\p30j>.YR\CFtY4iXLN]Ir1DrnmbQ^L)koHS`^WiIf?5Be+%G9[;Eh1K&"l%F-?rF[f#n^T&#4u<Piq`1%*JN^&j<gG]mKtEDD[b&h6^KPJT<i@OWN>k?@Hh+4AD$Eo]RpYbO:)SEAEOqh6LAd$7O5a$2!HTlfG=%nhcb*O7%&%r.gqmR*7gVm]^$s)CUZ1alMZ[>qc3i-kB8P2^rt:jYJA>InG_RqXsCe;!tH*jQIf7qZ=p`..QB^,1-3.Pa=Uoo]Uh^0A"C&adRc%*ROZaP`OC+H?;F@YClE+^Zj,H^&Jq6-Yk&TF?o:Z!TeqiNZK4fq\u1j3ofJP!PSLIPQthF4Z]81T7M%ObWq4!kl'\;gc:S^d/gr\!gHo%7XB/An%W*\O-;@53P#7TrE#Y>oZ!#g)h?dp%Ec"9SfHPdo_oe+T"GBjkQ[^S2aR8tbs7;,!.)B]jjBPcNt1CP/QV;fYj+srOPGViT%T;12"qj;1OkR<kWV?+bb-5S\rT]OF!q@9mLrRG/4ouTH\1ON7nGsj:Jj82.1%Ek;c(eG8d<`@%+R/'P(E?+MX$U*aZt6GUO$NO1/QjEW1H#7%-7./Wb5?Y"9&0-eMFCl_8?.4XDc?U"rm:YW1LPb%.sQ7Wb6K$"9&65eMFt'Jc>ZQlFC?F5l^jRous[OT`>%bH=g;8d/SSm4nC3Bkl6.2Ssbl^kjR4qLEMt(R=PJKKLZTt]Z`Wp"bOeM$Gd.p%"q_*Ggri,bf%^jMZn^Qh$UuWbREQ7+F)s16#\V9"%<t2*d]C?1Ggm!jg?0]JmbHf#.c>sW%YZcR=R1&"R6A4DJ#Qe!eL3")k7cOZp=,pn7hh*AcY!]3`pj$'nY,/"j&;tI[h.)3Lp>q/6I@k'nVjE"j&;tI[h.)q4.]2/6I.ebjm;UB#/MU<=%`5(*p4o\]cN+1Hl20=`G5XJpX*naXfF$(Yo!@87o]3^>KK75r&fXo`[9?$^+Y3W%YXk>*-s[6[ceQciR6VJO"Y"h9Z53@=^[l_%"cn$upiKIDJ%n*mP-(qh!Lq4e*<0p'#M,HT3Z@l3hKip2F>_e/-m^mGY_IW%YYLg;A3p;.":/["n7iUV>YUBb0B\7t&45dN6\lJGOj:V*1=b!VHUT8p`NN!pg;,PkK'&"P=O7..-!+#cKDd;;/p5&PuhRUU5gJ,+u[.7VNCr76l:;NRB,C(D6<D2bKEU?3hKW+dc-<K_%O_pb8dV"s'@7'7V2@Jf1Be<,1DgUd?c1FFZtXr/"AYAs<d%WL5u5$Gh\L!@ftu-W2+T;*$t=B)"c];*$t=B!0Vj_2QeC.Q):DSfkO?3^BNRe/-mg*M?:dl3hKo%T',Bo`[9HetL:DCG1'1"^tH2JAAZFL0k*mB$%W;VM5o$YC\I?<'Xjh(X(_FdMaIuclGp`JHs@L;ZT0Iie;NU+NuYW&C`"4bju1YCm/uTI)I3TSNs])Z6&Em06VaI@FiP)#Q$pAQ3tLQ;ZVFc,Jpri&8%OA#^jS-O&cg(TF(t;;\4trJhRR45iAbrLqsgZRA^/gT8kV6'nk8=!WkGa=PF2"N)Th/*@p]&"^tH3r5IVC&97IJ_Tc$\JYPI5iX3Qh;uqR(&RN/&0LJi*i$Fi%+K-F,;AH1jnVB5lS#QMk4&uLE$GpUZ!J)7Agi<Q)hMh)7*Br+jr9k]^c:.?kG=DG3?eO[h*1l3(rSY#;qo;JSIIQ1<0CI4k]36/NTp`2MgLm):o6Bm,E^GQ`_A1J:JRNpn_)V^`L5+0$F&Is8.QC'C;U\N'6T6C3GY,_S#&T_GcIgB50tsLB/7(9a##4ehcWLt!0tsdJ%,&/;r&n!Qhm:-qE;IBZ[c,HdS.t"q$;MD]QlF>US!.;dhc>hB2F+U>\k+?jopln_qVla_UKuq5HFp,lpn!)D?oPM>\aIa[0YXaK9\G)B&hSFT@%:^D5>Z<b/We^Y[.!.Q(b[C!A(_jh,jITuMI@3hA]rKB>W<6WSCTHS]*cgr4N:tG3SQ'M#/_oMm::T#M-TcZD(sb'3SfqEcqGY8]g3SGYM^B*1Gsg+F`5V2,:GNm1r2&>h&E`;L^MF:2B*I)h9aD<0a7eo8Q3'c6`tcg2Af$%)5\`!(XDFXg0eFpVp?\KF3&KBcj!uZE4XQS2&4F)"km?X$;MPbd*A>qGMY4p$7A(6k-h]pG->]hEW=":@nH.V&F*Sn']PAo1T&9iFp)rk:($OV#34qa#;RD*p"8l4D+$X8;aW#I;Gb]Q8kLh@1o)<>"ngfSU_Mi@%B7E>5s>#n.E2(aL6RIh*7UaeP#@7rBh1Zb$L6;G8L_[J25DEC"nhAcU_Mi")H)]]JpR9=Q_.neMXe-0<90jJSq!#i@_AHY'fd]Joa(2-I.$)F`q?`oPp`CJe75_g;N,fWU`q8lFbD`FDhISOL/_][T["*=dUsGL@f0(j.`,(_LPV.+)N=DJU`qBZFc*,n']Xb!<5bW3NY.P@@XOgl'mV6O0@U3d:C9u;Qt#eVD(tsj+Vfh_Ft_>Lj"D<K&Xd,&6>\CtC.Ld*MVSZJ_0Db!'qm("0@U3d6Og"c9sK&=2AhK4U`q_9mY0A&I&%o#\LD\Te-=rC%4Mf__pU:/8!>pP-ONb6S7;4RV%?E:PWUu9F2s/`I^TsMWIe#YVqA[T.E&,'Pc#THam>8A@j/@IQV6C@nsd9S5,G&]0pS)7OIt*Bo'uo`g9I-6@Z]L-Dt<H1Q'-I@<*kGJI`0"C.pb+[FW4CgMEu^e^WFZo<;[ZI'SCccYfY);<(q%j<d?,`iSD'cXLpYl`ME3AQ+)&/jG0iV_TL%X<W!arC>M,L6).d!X("u=[1dHtWsZ.eQNsSDYG2;sn7qSGZ;p7`)\#9qe`^)QX4TY/)iVY7dB?)C0r^^JjeWfJ=/0+7Z=6_$\&q>u$Elq612#_Jk=[N:Y=?8^C?>HX9/-dW7_^]qjmM<d?sNT1dB<s`\bl1\(kl%d?^\I1g7JUoF59VH$Elq613R6:7Ba?<U[W$j/!F%8?[Egfd*XR,(kl%d?Q$S`g8S.[MG\UUqN^k,X7*df3E(mRX3n,0?s2mMO1\!/hI%%(Q%$^<X0LDd2&PCYat6p3`5Z\A73Tb8QWpQN2:gDsXsaGK@WRH-`3HT%>#>RrOlmYKl)0:lO\P*I)=>T$/FmN'-EhZf25qs6Zo>Jc9d2ZKca:eEhJ#^L$!DPC7!AP8C6M`3esb)%o([:Oj.pE'g%igj9j[@%CJmsLb1e2IoB0/D]]/&(Un3\@S=;oir^L[e=1mFZe._DoH^p17,!1;,[E0q*ETo,qlJK'BAEU/42L38GY$!n3.rUWmcC^28n]DYRZ[,06GhYW0rpFTd=1mgeeRPoU2MitQNIL!DY$%;\.rUWm6Ib4#^@7TA$+07]M(D&SIcWYp=e/A=Dj/7/eEBuJp6sM<V=HO$/8X/S<aLp0Ap$G>]M0RXRl?"c=!Y)^A,kET2Miu$h@Q9'AKmU*p?uZmk(tX*h@N^oOiZ[FrHlH:,dOY"6WeV&,+C[fD`M1N'3Wu#+fr=#Oj+pDpP-.KA7>(aYk!Z>2L"NFRr`H[=kLA1XLoa>boQ\*>Y/I7o7jL?MF;X8]a*:[(,g*r.^)BR(YsGB9k7](VQTKI7!?tk#?`8*]W"!_MF;X8]a!4Z[WtYm@MOadU3d3TM/;dLmeg?H94Sjp/$M`YooAJ2lIPt9%SlFX~>
-endstream
-endobj
-10 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 9 0 R
->>
-endobj
-11 0 obj
-<< /Length 3625 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gat=pl'!AO&]MNR?dW8Ah#PVEWCj1r\[H]o!-@0DJ8h!q!>kkWF(9:im::-ZV))$pbtDN\D8a(oQWhOZ:F5](rlJr"nIVTP*U\FKA3.Bt,T\</(CtWqCFP$BQ`t?"E<!c5mAHS'jeGf8m2O@]YGSnZh`Q>cg#8L>rL7GbR:UPuQr7%f``GA"MrkOnAsl"=ML"An:6X*#._o:eW*(n)KJR,*(SgLXJ2tX]-cM$^VUTi#0[gg"WgLoQPT!&B)/E>e`QW4se9D!JV\2m,bh:7*)E3^5b;P,e<QrG*<#W4GF%p(I'XP<;;WA6peeiF*bj&e4NNWH.AICrXTecGa<bd!a@*YRMl;63i9W@PVJ=0&tFWGerXg^p_9n8YoYj+8kF>Kc5[fC$a+mM,\!b]s=7\fKjJ2tTQkW3hGAkJ'O4O.3_/Sr!.\bi;Qpb'?-mA0'0]72;imfCX16;_kR]DJMSpccJuQ8#:!Phl::C&@s=c8fFsLU+OA.ZGM[R'A1_'=P]/Rprob1TBn7"PUAi"Wgs(8rZ%Yd)LelnF/24CA\s#=s(0m*RK-&\5M??#h0ctjTl[<'Xs0edJ,3n[8(O`!P=%"f9[4KC&AEk2HFX65YGn3rXM140=KZO*bBh!V=>'!g6f-VoffA'p]uF/DJXl0$:CZ0`sC2KZ+@_/AR@2bj.?UanRDsn;]$uAre3TV6aeu*l#e1ANIN2"`fVjW;dlWSp^[FC/D1)/'cp\\nQuFQGd?>s1.pSkjp5p1?WPsA7VNDm+l(),'fZRW=)&:*,M^;2'fZ^[=)&:j7_"FJ.r]B9Y1+T^JoD[$<npD>Bb7`^\<KKF<c*Q23QKcU[8WYdj36;uXf_(P1KS<&G;RUhD%,/+O#(jR#'$>VDYD@V\A'h$C(Riugh-S&Kj-Z\V8at)$/mdhBIhm"R4C.N40"LgD9U`A2u4MtqnH$]\>)*qF5+C8(%1`V=(r4i<%"*g=L])`pGlRS#c%ZEOnIJ?\/"H,b`s*b7FlBmjAreTo/KAPiZd]tol;Rq7rd[_pF)71EKTqKg:7ZQdec(')Q0*ep"MO=%JDg+Po@S0eo,?h2V@1H=)&9_>/-'#gL-Yk>ik9l6Ip)@lS`tee\3X`AGnF#0)EUkqmr;Zp"T8QpjYE0noZr9laQD,EHD!dmH^]k+l()hD=7D(I9k-nop_<)(>KMq)tR%`pRimS=pVV-F[u4PRB(aAKq>dDF[t)&0N\._3iZ9*D1(.Op)EV1L/Jst=%Dq@\W*dS_L@-Jg=OkP]jbm>lgSc,H+IkqC0t%4onp;>Y<0UMK=T^fePX$6\ZN%s_L>u:BB/=CW*V41pq"*1(@M'4DX6W:cp'><pq"*1`pp]GW7CaU1s@Dm285*B([f'9]ZSj&ToWcfnTFK:pq3@$T^H<;>oMikjr.Ss>Xs4>H"AjhMpt>alY)es?cV3.HsIZQ,N]nO8'gM"=4__oHsIZY1GIGU3oW3sd<1uPIbf[Y,O=ZO$g351odVlsFi3"Z>iY.+lf^j*EAm]:'@I\uY9U3Fs'E^um+4tQ]X#83\9L6LY$\MB2r$o4Y46YANaNs@Y9UA\2pB%\bqW0tYARe+c<R>7>kS'@qJZ)ZaCLFaFh.Fl>9A@amYC8G55;M:^RDVGAed'Bri!B`(-V]<@MD!0&8NT8/;TiD1*B2C<rc^':FLia-WUY3;W4q^ENV?#F>bfX7&9kpF4-r";aL^WWGm.j+NYj?l/t.YA:TmOVe6!MU<b6iI&B7nKHpY<'u'/s0s<G[C#V4NlX=7^7cB7*Z)3VYIIEQ8r\H$X!"bKsNI.Q455[j8aXFe+&Eab%W&hVE4oM@T'LlAP-`.fVW&hV%4ThEX)#9)\)!M]kWma&Z1E];D;5_)?doO@3W_R_=<i%M@'K_H:MmVWWdpNDKWA&@N40d-['LaC]CUm=[p%+`aS@=4Vd9Xq\_C0]r6jaBmW&_C%3sJ*P0ZnQ#0u^ARRZlR`6Rf):Ob1;(hq?gJPf!,R0lE-OOW\g@GJC:1"i+?]>/Db)Nk8LEKf9!@Thd(PNk8LEKeEJF\V)GJ:+)J@Lf33T!7BHbm-]p,!Ot6YL0SS#Ap8`($Gb2S89)(qRaX?_1jDKhnFkn\Q#`ED3PDabrNB'*]^n+d`_](>=kl@o"b&YnmADmZd$aG/Q^m[3%9eWm@s%:5TdK(:'WsL[o1s'X)P^g3$oN$[T^_S^W72ZTK4h,S49U@RcPa<+UG4e8cVP:$#R\m^L.[HQ8U,uYfL&KF!qGbPNLq=i'7:&mYF+qJXiY78cJS(eRsh13*;8XoP:DR>!ITWjpd7m1W\[Uh+K+18![9&ZSJ`n7hEmk^";)?VcO?'WpB]:0+G.H?R\<X>7gRU4+bIQXR\<VhFJEZ-g,)2ofLPC,V(oP*aA<P+#RXdML.[Gt,#FJ[VL3J=)5Zjr"DVBX6/d@;:oWt;!]A)UT^Hs&1u:Tm-6*WI]hXj4Y7RYS7g*t<;l0#"!,<_k6/Cj+Bcoq8D+Z"NH^uXGh]bl1PR-P\Vb.'%M.Eq*5oga5$C)OE6_GbY&_(5T=#+;Uj7`i/,US+(/Edfu2;Uir-8Z=ai<E@eT17iO!7^'V@QM`kj[#^GE]_<0-UKkqi5P=\M%9j4rJ4GEQ=u`G&pQSaeV'hjNqtQ`^+5qbl/kTt;]`XkB!-Pl'I-j(Qn(%MM]=TjhAaE>Vl6pfC/PacOe\2dgS9S>Z/Xr3)F$]apAIk,2ffk:hB:q=q$Q9<QUnB*??a2M)Q0qbPIYt('RT"cqcos`>i\"[o0TF'Nc`(%)T5(iF#L4e@dgttJ1EL5Mk&t;\Z1..Fhj7\`'kHFNE.LfQL2>0RqQr=D]7T'FHtjF@m47WL=/'CN6GoRY__V4cPNb4+>,FAD8md&@m481;M2L#I'tbf\;pB4j[p!A,2]Ru>/YR-k:9VK&/Ub\2Jf3H\a-'>pbW%0@>gfH@\knVWBagna]l]+(Fu?P)$"FC(.$as:hbG=h/)-rY.NL?NR9Bs1"8TDK#0O/Ti)!*Y$t<GESXqrBn4ftD"&W$SG&>NNe(WjO_j_8/tBWK2P`/nO$HG5+t+F'c4>9YT2llg>nn$fB]ZiXQ'=8iiD&6+DGI277T=SkOqOr.OSb`g-@o#!6^dQ<_!A$k/eKkj-EskoFcj3qJO,(HRfo%'Q_"FeS\TuH2484n=R'0U*cQ6'K+<l!#qYa%*tPmH"Q/uP/9>Y69>*u""0Mr=d.>s&7S_=T<?Z1+WI<qf+Y;U@5L,UWRWhq"6_H>gV&(cJ98BY_f_B%tF);!%]jIH!&$er<\KHg/8RNE#<m4g6^iD^f<Kk3RIO:>j.Y6^?07P\--Eu;&KtY<udKuutga7S(0-&cjNi,HV1NJ,A8RSC)kESeMPYVjn9jjgl9.'hE8mo$#&?\`8V>#lm"0P7(Bn=!*S%qYb(In[7WBjeQq_]P`Y4QUh4?TgQIH1"A9l&m[&4TpFI,;`Q)3%.(QLA(J_h\\)k+-:.f^OVSF%m.V>Ar>G6#$5uJXRQJ:rfBC6<+Lgco"Oe_hdXBpfFW@@0sNBBlb,2iV^`$S\p1HbJ[YL_hdV\6s$P@+>0sUC_S+s].'*q2LJT4F%m>nXCD]FYU55Nhl_fF7"o!8lml.0&9Vms\+`\t#E)-F\G~>
-endstream
-endobj
-12 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 11 0 R
->>
-endobj
-13 0 obj
-<< /Length 1495 /Filter [ /ASCII85Decode /FlateDecode ]
- >>
-stream
-Gat%e6#YO:&4Z-f'`nFNG*'!T7j=r);VSgQ,.A\Q*a85ECc>(H)@>c+9oufu4l[f^3$X(O#[b5&oKA>r%%k$GqigJlY&i1HDZA_7G/'ZZcLR%^U,=BQ0#lc#0m<H[m[)C@*kVlMn'AR`I8#%-l/T,<f5CW\/q\2c*8m>CdA_d(b8%&cB&YK_)\unqBH]F-n,X[*I"tZ40:U!a-N"5_4l;qbM!_NP-N")[*LSW7`:J^<HBZ!6R#(+\Tj^W,lkel>D1.Wm@IaGM-GE8W5[?1Q9OOe$THT_f$L#hF/JG8fi]nh"$ZQhaQ]Obr@J0\cpa5q@h).I"$!&?G4sCNePDM^9Z>T:gf(85tPqi(u!*G^a/GbI)&RS*c[`g`23cc/62G#TlLFP&3!%)>K/""i1/2NjtbWmLC_8H^nAsO<=JCu:`HGL$7bVJ3kJ4Y-L:,)3qR@.X+Nr[WT1F0e1c-.s'=bZ+WE3CTj\qGFDGL7[6)6XXN1'NEL'q1h-`XMuLZG9;H6o23op^)L$?XP9eUD[6Ig`fRk$k2NmTk24_!32<8Tl=Y3Td&MK!`dCY:q/AnBUSAlJLY5=.,5as[*1KP:h:(EKptGaQ5T-'W3QV^Nm5p+iu\E(XarCTbs>l&7A)/DfJGMlOhn%qZd5&Op4c:_eVK/K&a2h,2U,5H1B'b9arJ(e%5T!Tk.osq&[&DEju*W+XR1Sp[jKmuWsljLC*.A^_(3YQ>\+MkD:ijFg*1d5CKu=r]2p7?Y8!3om^'T_N/%[<M$-2lEMtf[WJl[]m0t:]PtNeI4p\[YY$?Q+GsJl3-^_M_*cII_M[JGnU[[-XQC&bs4GN@5(W`#FV1Q8&Mb9R/&CoKTjsmQB0"fqNXuM@_6Ae=7"`rW32fm0$M/9:cB!/EIju1hR4I%#o4^TKPb_6Q:1KPPi&Cdeg@sCeR+m4+d-PI.[<Kb0tpb6XS)C"3k!3-LGF2bTu<Fl#X5a>b3[(1WR#&h)+E4'6G5FT,\1*Y."<g)DDm&ZVU,Qh2i/'7:SGo^\BJEC!-#&dkn>U:7F/e.QI<p\6MhKO<.RXS3R'+M?5Q+>$nQj`Ap]tN0M<h;%qelCi^cX?1DKhG!a"q@t_Q+>$nG%h35;/`6";0rKVd.:8/_-FL1108eA:m:R?X$)*GYcQ/UjV^G1X"mb%#'43UcWo]P6d8so=*Y!kiP(GbdPHWHB4S19%-GET,BK\o<58CQ>lF=cg;,FnRB&FPRV1_"b_?!QF+n7'oqaTgQ"_oghL@=_*+r+@$_NifAV7Ot^Wp)H_-Ed3C>WDOm&tK&PeKH6rASe_D_N"$f?=uD5ul7Q>icpKKh_-eIRMmKW-YD)\]QjugT^^,i<nJ8M"F:+)pE0QIm;2an-t8LI_EDVb;V3TfULC&c^-bDFa[MV\$(jJ5Hauhrc!+-F`V\MF1f&Smm`'YB4qe0^:eg">W\K/^]/I>/0EO>qa\iMQcF<n#B.pAVmFE4MRRYdDYGM#!>>4h*r~>
-endstream
-endobj
-14 0 obj
-<< /Type /Page
-/Parent 1 0 R
-/MediaBox [ 0 0 595 842 ]
-/Resources 3 0 R
-/Contents 13 0 R
->>
-endobj
-15 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F14
-/BaseFont /ZapfDingbats >>
-endobj
-16 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F5
-/BaseFont /Times-Roman
-/Encoding /WinAnsiEncoding >>
-endobj
-17 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F13
-/BaseFont /Symbol >>
-endobj
-18 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F1
-/BaseFont /Helvetica
-/Encoding /WinAnsiEncoding >>
-endobj
-19 0 obj
-<< /Type /Font
-/Subtype /Type1
-/Name /F9
-/BaseFont /Courier
-/Encoding /WinAnsiEncoding >>
-endobj
-1 0 obj
-<< /Type /Pages
-/Count 5
-/Kids [6 0 R 8 0 R 10 0 R 12 0 R 14 0 R ] >>
-endobj
-2 0 obj
-<< /Type /Catalog
-/Pages 1 0 R
- >>
-endobj
-3 0 obj
-<<
-/Font << /F5 16 0 R /F14 15 0 R /F13 17 0 R /F1 18 0 R /F9 19 0 R >>
-/ProcSet [ /PDF /ImageB /ImageC /Text ] >>
-endobj
-xref
-0 20
-0000000000 65535 f
-0000016170 00000 n
-0000016255 00000 n
-0000016305 00000 n
-0000000015 00000 n
-0000000071 00000 n
-0000002919 00000 n
-0000003025 00000 n
-0000006052 00000 n
-0000006158 00000 n
-0000010053 00000 n
-0000010160 00000 n
-0000013878 00000 n
-0000013986 00000 n
-0000015574 00000 n
-0000015682 00000 n
-0000015767 00000 n
-0000015877 00000 n
-0000015956 00000 n
-0000016064 00000 n
-trailer
-<<
-/Size 20
-/Root 2 0 R
-/Info 4 0 R
->>
-startxref
-16438
-%%EOF
diff --git a/src/documentation/content/xdocs/fo/fonts.pdf b/src/documentation/content/xdocs/fo/fonts.pdf
new file mode 100644
index 000000000..5c84a41b2
--- /dev/null
+++ b/src/documentation/content/xdocs/fo/fonts.pdf
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/size.fo b/src/documentation/content/xdocs/fo/size.fo
index 225adb491..1de6b0245 100644
--- a/src/documentation/content/xdocs/fo/size.fo
+++ b/src/documentation/content/xdocs/fo/size.fo
@@ -19,19 +19,18 @@
<fo:root font-family="Times Roman" font-size="12pt" xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
- <fo:simple-page-master
- margin-right="1.5cm"
- margin-left="1.5cm"
- margin-bottom="2cm"
- margin-top="1cm"
- page-width="21cm"
- page-height="29.7cm"
- master-name="left">
- <fo:region-before extent="0.5cm"/>
- <fo:region-body margin-top="0.5cm" margin-bottom="1.7cm"/>
- <fo:region-after extent="1.5cm"/>
- </fo:simple-page-master>
-
+ <fo:simple-page-master
+ margin-right="1.5cm"
+ margin-left="1.5cm"
+ margin-bottom="2cm"
+ margin-top="1cm"
+ page-width="21cm"
+ page-height="29.7cm"
+ master-name="left">
+ <fo:region-body margin-top="0.5cm" margin-bottom="1.7cm"/>
+ <fo:region-before extent="0.5cm"/>
+ <fo:region-after extent="1.5cm"/>
+ </fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence id="N2528" master-reference="left">
diff --git a/src/documentation/content/xdocs/fo/size.fo.pdf b/src/documentation/content/xdocs/fo/size.fo.pdf
deleted file mode 100644
index 177160580..000000000
--- a/src/documentation/content/xdocs/fo/size.fo.pdf
+++ /dev/null
Binary files differ
diff --git a/src/documentation/content/xdocs/fo/size.pdf b/src/documentation/content/xdocs/fo/size.pdf
new file mode 100644
index 000000000..add8fe871
--- /dev/null
+++ b/src/documentation/content/xdocs/fo/size.pdf
Binary files differ
diff --git a/src/documentation/content/xdocs/team.xml b/src/documentation/content/xdocs/team.xml
index a8f0602e4..a6e2e51c9 100644
--- a/src/documentation/content/xdocs/team.xml
+++ b/src/documentation/content/xdocs/team.xml
@@ -58,7 +58,7 @@
recent XML/XSL-FO convert, he has been nit-picking FAQs &amp; assorted web
pages since his first webmaster position @brain.com in 1996. Most
important creation? He's got a couple of cool kids.</li>
- <li id="jm"><link href="mailto:jeremias@apache.org">Jeremias Mï¿œrki</link> (JM)
+ <li id="jm"><link href="mailto:jeremias@apache.org">Jeremias MÀrki</link> (JM)
is an independent software engineer and consultant from Lucerne, Switzerland. He's also
the creator of <fork href="http://barcode4j.sourceforge.net">Barcode4J</fork>.
See his <fork href="http://www.jeremias-maerki.ch">home page</fork> for more information
@@ -67,20 +67,25 @@
<li id="sp"><link href="mailto:spepping@apache.org">Simon Pepping</link> (SP) came to FOP
from the TeX/LaTeX world. See his <fork href="http://www.leverkruid.eu">home
page</fork> for some of his private projects.</li>
- <li id="jp"><link href="mailto:pietsch@apache.org">Jï¿œrg Pietschmann</link> (JP)</li>
+ <li id="jp"><link href="mailto:pietsch@apache.org">Jörg Pietschmann</link> (JP)</li>
<li id="ps"><link href="mailto:tcho@club-internet.fr">Pascal Sancho</link> (PS)
- is an XML developper from Aix-en-Provence (France). He works on software solutions for
- rendering various kind of documents on various supports, more specifically taking care
- of PDF generation with FOP.</li>
+ is an XML developper from Aix-en-Provence (France). He works on software solutions for
+ rendering various kind of documents on various supports, more specifically taking care
+ of PDF generation with FOP.</li>
</ul>
</section>
<section id="contribute-active">
<title>Active Contributors</title>
<ul>
+ <li id="ag">Alexios Giotis holds a Ph.D. in the optimization of turbomachinery cascades
+ using evolutionary algorithms, neural networks and parallel processing. He is one of
+ the founding members of i-docs (software for enterprises) and he has been leading its
+ technical design &amp; implementation based on open source libraries since its inception.
+ He is relying on Apache FOP for generating high volumes of documents on major banks and
+ telecom operators since FOP's 1.0 release. He lives in Athens, Greece.</li>
<li id="gd">Georg Datterl is a software developer from Austria, currently working for
Geneon media solutions gmbh in Nuremberg, Germany. He needs FOP to wrestle gigabytes of
electronic data into thousands of printed pages.</li>
- <li id="lm">Louis Masters</li>
<li id="lb">Luis Bernardo</li>
</ul>
</section>
diff --git a/src/java/org/apache/fop/fonts/FontTriplet.java b/src/java/org/apache/fop/fonts/FontTriplet.java
index 945739077..2c1d89088 100644
--- a/src/java/org/apache/fop/fonts/FontTriplet.java
+++ b/src/java/org/apache/fop/fonts/FontTriplet.java
@@ -27,6 +27,8 @@ import java.io.Serializable;
*/
public class FontTriplet implements Comparable<FontTriplet>, Serializable {
+ public static final FontTriplet DEFAULT_FONT_TRIPLET = new FontTriplet("any", Font.STYLE_NORMAL, Font.WEIGHT_NORMAL);
+
/** serial version UID */
private static final long serialVersionUID = 1168991106658033508L;
@@ -135,6 +137,5 @@ public class FontTriplet implements Comparable<FontTriplet>, Serializable {
*/
boolean matches(FontTriplet triplet);
}
-
}
diff --git a/src/java/org/apache/fop/render/PrintRenderer.java b/src/java/org/apache/fop/render/PrintRenderer.java
index 396a2c790..5302975f6 100644
--- a/src/java/org/apache/fop/render/PrintRenderer.java
+++ b/src/java/org/apache/fop/render/PrintRenderer.java
@@ -108,7 +108,7 @@ public abstract class PrintRenderer extends AbstractRenderer {
String key = fontInfo.getInternalFontKey(triplet);
if (key == null) {
//Find a default fallback font as last resort
- triplet = new FontTriplet("any", Font.STYLE_NORMAL, Font.WEIGHT_NORMAL);
+ triplet = FontTriplet.DEFAULT_FONT_TRIPLET;
key = fontInfo.getInternalFontKey(triplet);
}
return key;
diff --git a/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java b/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
index b94f396b6..fb6c89ce4 100644
--- a/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
+++ b/src/java/org/apache/fop/render/afp/AFPDocumentHandler.java
@@ -61,8 +61,8 @@ import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFPainter;
/**
- * {@link org.apache.fop.render.intermediate.IFDocumentHandler} implementation that
- * produces AFP (MO:DCA).
+ * {@link org.apache.fop.render.intermediate.IFDocumentHandler} implementation that produces AFP
+ * (MO:DCA).
*/
public class AFPDocumentHandler extends AbstractBinaryWritingIFDocumentHandler
implements AFPCustomizable {
diff --git a/src/java/org/apache/fop/render/afp/AFPPainter.java b/src/java/org/apache/fop/render/afp/AFPPainter.java
index 86858c3c8..7d659a8b4 100644
--- a/src/java/org/apache/fop/render/afp/AFPPainter.java
+++ b/src/java/org/apache/fop/render/afp/AFPPainter.java
@@ -30,7 +30,13 @@ import java.net.URI;
import java.net.URISyntaxException;
import java.util.Map;
+import org.w3c.dom.Document;
+
+import org.apache.xmlgraphics.image.loader.ImageProcessingHints;
+import org.apache.xmlgraphics.image.loader.ImageSessionContext;
+
import org.apache.fop.afp.AFPBorderPainter;
+import org.apache.fop.afp.AFPEventProducer;
import org.apache.fop.afp.AFPPaintingState;
import org.apache.fop.afp.AFPUnitConverter;
import org.apache.fop.afp.AbstractAFPPainter;
@@ -47,27 +53,22 @@ import org.apache.fop.afp.ptoca.PtocaBuilder;
import org.apache.fop.afp.ptoca.PtocaProducer;
import org.apache.fop.afp.util.AFPResourceAccessor;
import org.apache.fop.fonts.Font;
-import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.intermediate.AbstractIFPainter;
import org.apache.fop.render.intermediate.BorderPainter;
-import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFState;
import org.apache.fop.render.intermediate.IFUtil;
import org.apache.fop.traits.BorderProps;
import org.apache.fop.traits.RuleStyle;
import org.apache.fop.util.CharUtilities;
-import org.apache.xmlgraphics.image.loader.ImageProcessingHints;
-import org.apache.xmlgraphics.image.loader.ImageSessionContext;
-import org.w3c.dom.Document;
/**
* IFPainter implementation that produces AFP (MO:DCA).
*/
-public class AFPPainter extends AbstractIFPainter {
+public class AFPPainter extends AbstractIFPainter<AFPDocumentHandler> {
//** logging instance */
//private static Log log = LogFactory.getLog(AFPPainter.class);
@@ -75,8 +76,6 @@ public class AFPPainter extends AbstractIFPainter {
private static final int X = 0;
private static final int Y = 1;
- private final AFPDocumentHandler documentHandler;
-
/** the border painter */
private final AFPBorderPainterAdapter borderPainter;
/** the rectangle painter */
@@ -85,36 +84,38 @@ public class AFPPainter extends AbstractIFPainter {
/** unit converter */
private final AFPUnitConverter unitConv;
+ private final AFPEventProducer eventProducer;
+
/**
* Default constructor.
* @param documentHandler the parent document handler
*/
public AFPPainter(AFPDocumentHandler documentHandler) {
- super();
- this.documentHandler = documentHandler;
+ super(documentHandler);
this.state = IFState.create();
this.borderPainter = new AFPBorderPainterAdapter(
new AFPBorderPainter(getPaintingState(), getDataStream()));
this.rectanglePainter = documentHandler.createRectanglePainter();
this.unitConv = getPaintingState().getUnitConverter();
+ this.eventProducer = AFPEventProducer.Provider.get(getUserAgent().getEventBroadcaster());
}
- /** {@inheritDoc} */
- @Override
- protected IFContext getContext() {
- return this.documentHandler.getContext();
- }
-
- FontInfo getFontInfo() {
- return this.documentHandler.getFontInfo();
+ private AFPPaintingState getPaintingState() {
+ return getDocumentHandler().getPaintingState();
}
- AFPPaintingState getPaintingState() {
- return this.documentHandler.getPaintingState();
+ private DataStream getDataStream() {
+ return getDocumentHandler().getDataStream();
}
- DataStream getDataStream() {
- return this.documentHandler.getDataStream();
+ @Override
+ public String getFontKey(FontTriplet triplet) throws IFException {
+ try {
+ return super.getFontKey(triplet);
+ } catch (IFException e) {
+ eventProducer.invalidConfiguration(null, e);
+ return super.getFontKey(FontTriplet.DEFAULT_FONT_TRIPLET);
+ }
}
/** {@inheritDoc} */
@@ -180,7 +181,7 @@ public class AFPPainter extends AbstractIFPainter {
protected RenderingContext createRenderingContext() {
AFPRenderingContext psContext = new AFPRenderingContext(
getUserAgent(),
- documentHandler.getResourceManager(),
+ getDocumentHandler().getResourceManager(),
getPaintingState(),
getFontInfo(),
getContext().getForeignAttributes());
@@ -189,7 +190,7 @@ public class AFPPainter extends AbstractIFPainter {
/** {@inheritDoc} */
public void drawImage(String uri, Rectangle rect) throws IFException {
- PageSegmentDescriptor pageSegment = documentHandler.getPageSegmentNameFor(uri);
+ PageSegmentDescriptor pageSegment = getDocumentHandler().getPageSegmentNameFor(uri);
if (pageSegment != null) {
float[] srcPts = {rect.x, rect.y};
@@ -203,10 +204,10 @@ public class AFPPainter extends AbstractIFPainter {
//Do we need to embed an external page segment?
if (pageSegment.getURI() != null) {
AFPResourceAccessor accessor = new AFPResourceAccessor(
- documentHandler.getUserAgent().getResourceResolver());
+ getDocumentHandler().getUserAgent().getResourceResolver());
try {
URI resourceUri = new URI(pageSegment.getURI());
- documentHandler.getResourceManager().createIncludedResourceFromExternal(
+ getDocumentHandler().getResourceManager().createIncludedResourceFromExternal(
pageSegment.getName(), resourceUri, accessor);
} catch (URISyntaxException urie) {
@@ -362,14 +363,10 @@ public class AFPPainter extends AbstractIFPainter {
FontTriplet triplet = new FontTriplet(
state.getFontFamily(), state.getFontStyle(), state.getFontWeight());
//TODO Ignored: state.getFontVariant()
- String fontKey = getFontInfo().getInternalFontKey(triplet);
- if (fontKey == null) {
- triplet = new FontTriplet("any", Font.STYLE_NORMAL, Font.WEIGHT_NORMAL);
- fontKey = getFontInfo().getInternalFontKey(triplet);
- }
+ String fontKey = getFontKey(triplet);
// register font as necessary
- Map<String, Typeface> fontMetricMap = documentHandler.getFontInfo().getFonts();
+ Map<String, Typeface> fontMetricMap = getFontInfo().getFonts();
final AFPFont afpFont = (AFPFont)fontMetricMap.get(fontKey);
final Font font = getFontInfo().getFontInstance(triplet, fontSize);
AFPPageFonts pageFonts = getPaintingState().getPageFonts();
@@ -383,7 +380,7 @@ public class AFPPainter extends AbstractIFPainter {
if (afpFont.isEmbeddable()) {
try {
- documentHandler.getResourceManager().embedFont(afpFont, charSet);
+ getDocumentHandler().getResourceManager().embedFont(afpFont, charSet);
} catch (IOException ioe) {
throw new IFException("Error while embedding font resources", ioe);
}
diff --git a/src/java/org/apache/fop/render/intermediate/AbstractIFPainter.java b/src/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
index e86cc435f..147b6d54b 100644
--- a/src/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
+++ b/src/java/org/apache/fop/render/intermediate/AbstractIFPainter.java
@@ -46,6 +46,8 @@ import org.apache.xmlgraphics.image.loader.util.ImageUtil;
import org.apache.fop.ResourceEventProducer;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.fo.Constants;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.render.ImageHandler;
import org.apache.fop.render.ImageHandlerRegistry;
import org.apache.fop.render.ImageHandlerUtil;
@@ -56,7 +58,7 @@ import org.apache.fop.traits.RuleStyle;
/**
* Abstract base class for IFPainter implementations.
*/
-public abstract class AbstractIFPainter implements IFPainter {
+public abstract class AbstractIFPainter<T extends IFDocumentHandler> implements IFPainter {
/** logging instance */
private static Log log = LogFactory.getLog(AbstractIFPainter.class);
@@ -67,18 +69,39 @@ public abstract class AbstractIFPainter implements IFPainter {
/** Holds the intermediate format state */
protected IFState state;
+ private final T documentHandler;
/**
* Default constructor.
*/
- public AbstractIFPainter() {
+ public AbstractIFPainter(T documentHandler) {
+ this.documentHandler = documentHandler;
+ }
+
+ protected String getFontKey(FontTriplet triplet) throws IFException {
+ String key = getFontInfo().getInternalFontKey(triplet);
+ if (key == null) {
+ throw new IFException("The font triplet is not available: \"" + triplet + "\" "
+ + "for the MIME type: \"" + documentHandler.getMimeType() + "\"");
+ }
+ return key;
}
/**
* Returns the intermediate format context object.
* @return the context object
*/
- protected abstract IFContext getContext();
+ protected IFContext getContext() {
+ return documentHandler.getContext();
+ }
+
+ protected FontInfo getFontInfo() {
+ return documentHandler.getFontInfo();
+ }
+
+ protected T getDocumentHandler() {
+ return documentHandler;
+ }
/**
* Returns the user agent.
diff --git a/src/java/org/apache/fop/render/intermediate/IFException.java b/src/java/org/apache/fop/render/intermediate/IFException.java
index 52c650765..5f35c3e3a 100644
--- a/src/java/org/apache/fop/render/intermediate/IFException.java
+++ b/src/java/org/apache/fop/render/intermediate/IFException.java
@@ -27,20 +27,27 @@ public class IFException extends Exception {
private static final long serialVersionUID = 0L;
/**
- * Constructs a new exception with the specified detail message and
- * cause. <p>Note that the detail message associated with
- * <code>cause</code> is <i>not</i> automatically incorporated in
+ * Constructs a new exception with the specified detail message and cause. <p>Note that the
+ * detail message associated with <code>cause</code> is <i>not</i> automatically incorporated in
* this exception's detail message.
*
- * @param message the detail message (which is saved for later retrieval
- * by the {@link #getMessage()} method).
- * @param cause the cause (which is saved for later retrieval by the
- * {@link #getCause()} method). (A <code>null</code> value is
- * permitted, and indicates that the cause is nonexistent or
- * unknown.)
+ * @param message the detail message (which is saved for later retrieval by the
+ * {@link #getMessage()} method).
+ * @param cause the cause (which is saved for later retrieval by the {@link #getCause()}
+ * method). (A <code>null</code> value is permitted, and indicates that the cause is
+ * nonexistent or unknown.)
*/
public IFException(String message, Exception cause) {
super(message, cause);
}
+ /**
+ * Constructs a new exception with the specified detail message.
+ *
+ * @param message the detail message (which is saved for later retrieval by the
+ * {@link #getMessage()} method).
+ */
+ public IFException(String message) {
+ super(message);
+ }
}
diff --git a/src/java/org/apache/fop/render/java2d/Java2DDocumentHandler.java b/src/java/org/apache/fop/render/java2d/Java2DDocumentHandler.java
new file mode 100644
index 000000000..87003f077
--- /dev/null
+++ b/src/java/org/apache/fop/render/java2d/Java2DDocumentHandler.java
@@ -0,0 +1,156 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.fop.render.java2d;
+
+import java.awt.Dimension;
+import java.util.Locale;
+
+import javax.xml.transform.Result;
+
+import org.apache.fop.accessibility.StructureTreeEventHandler;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.render.intermediate.IFContext;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
+import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
+import org.apache.fop.render.intermediate.IFDocumentNavigationHandler;
+import org.apache.fop.render.intermediate.IFException;
+import org.apache.fop.render.intermediate.IFPainter;
+
+/**
+ * {@link org.apache.fop.render.intermediate.IFDocumentHandler} implementation that produces
+ * Graphics2D instance.
+ */
+public class Java2DDocumentHandler implements IFDocumentHandler {
+
+ public void setContext(IFContext context) {
+ throw new UnsupportedOperationException();
+ }
+
+ public IFContext getContext() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setResult(Result result) throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setFontInfo(FontInfo fontInfo) {
+ throw new UnsupportedOperationException();
+ }
+
+ public FontInfo getFontInfo() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setDefaultFontInfo(FontInfo fontInfo) {
+ throw new UnsupportedOperationException();
+ }
+
+ public IFDocumentHandlerConfigurator getConfigurator() {
+ throw new UnsupportedOperationException();
+ }
+
+ public StructureTreeEventHandler getStructureTreeEventHandler() {
+ throw new UnsupportedOperationException();
+ }
+
+ public IFDocumentNavigationHandler getDocumentNavigationHandler() {
+ throw new UnsupportedOperationException();
+ }
+
+ public boolean supportsPagesOutOfOrder() {
+ throw new UnsupportedOperationException();
+ }
+
+ public String getMimeType() {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startDocument() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endDocument() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void setDocumentLocale(Locale locale) {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startDocumentHeader() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endDocumentHeader() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startDocumentTrailer() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endDocumentTrailer() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startPageSequence(String id) throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endPageSequence() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startPage(int index, String name, String pageMasterName, Dimension size)
+ throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endPage() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startPageHeader() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endPageHeader() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public IFPainter startPageContent() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endPageContent() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void startPageTrailer() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void endPageTrailer() throws IFException {
+ throw new UnsupportedOperationException();
+ }
+
+ public void handleExtensionObject(Object extension) throws IFException {
+ throw new UnsupportedOperationException();
+ }
+}
diff --git a/src/java/org/apache/fop/render/java2d/Java2DPainter.java b/src/java/org/apache/fop/render/java2d/Java2DPainter.java
index 575242d38..89031787a 100644
--- a/src/java/org/apache/fop/render/java2d/Java2DPainter.java
+++ b/src/java/org/apache/fop/render/java2d/Java2DPainter.java
@@ -47,10 +47,10 @@ import org.apache.fop.traits.RuleStyle;
import org.apache.fop.util.CharUtilities;
/**
- * {@link org.apache.fop.render.intermediate.IFPainter} implementation
- * that paints on a Graphics2D instance.
+ * {@link org.apache.fop.render.intermediate.IFPainter} implementation that paints on a Graphics2D
+ * instance.
*/
-public class Java2DPainter extends AbstractIFPainter {
+public class Java2DPainter extends AbstractIFPainter<Java2DDocumentHandler> {
/** the IF context */
protected IFContext ifContext;
@@ -62,7 +62,7 @@ public class Java2DPainter extends AbstractIFPainter {
/** The current state, holds a Graphics2D and its context */
protected Java2DGraphicsState g2dState;
- private Stack g2dStateStack = new Stack();
+ private Stack<Java2DGraphicsState> g2dStateStack = new Stack<Java2DGraphicsState>();
/**
* Main constructor.
@@ -83,7 +83,7 @@ public class Java2DPainter extends AbstractIFPainter {
* @param state the IF state object
*/
public Java2DPainter(Graphics2D g2d, IFContext context, FontInfo fontInfo, IFState state) {
- super();
+ super(new Java2DDocumentHandler());
this.ifContext = context;
if (state != null) {
this.state = state.push();
@@ -256,7 +256,7 @@ public class Java2DPainter extends AbstractIFPainter {
/** Restores the last graphics state from the stack. */
protected void restoreGraphicsState() {
g2dState.dispose();
- g2dState = (Java2DGraphicsState)g2dStateStack.pop();
+ g2dState = g2dStateStack.pop();
}
private void concatenateTransformationMatrix(AffineTransform transform) throws IOException {
diff --git a/src/java/org/apache/fop/render/pcl/PCLPainter.java b/src/java/org/apache/fop/render/pcl/PCLPainter.java
index 2f22424f5..614ebf1d2 100644
--- a/src/java/org/apache/fop/render/pcl/PCLPainter.java
+++ b/src/java/org/apache/fop/render/pcl/PCLPainter.java
@@ -47,7 +47,6 @@ import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.render.ImageHandlerUtil;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.intermediate.AbstractIFPainter;
-import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFState;
import org.apache.fop.render.intermediate.IFUtil;
@@ -58,15 +57,12 @@ import org.apache.fop.traits.RuleStyle;
import org.apache.fop.util.CharUtilities;
/**
- * {@link org.apache.fop.render.intermediate.IFPainter} implementation
- * that produces PCL 5.
+ * {@link org.apache.fop.render.intermediate.IFPainter} implementation that produces PCL 5.
*/
-public class PCLPainter extends AbstractIFPainter implements PCLConstants {
+public class PCLPainter extends AbstractIFPainter<PCLDocumentHandler> implements PCLConstants {
private static final boolean DEBUG = false;
- private PCLDocumentHandler parent;
-
/** The PCL generator */
private PCLGenerator gen;
@@ -74,7 +70,7 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
private int currentPrintDirection = 0;
//private GeneralPath currentPath = null;
- private Stack graphicContextStack = new Stack();
+ private Stack<GraphicContext> graphicContextStack = new Stack<GraphicContext>();
private GraphicContext graphicContext = new GraphicContext();
/**
@@ -83,24 +79,19 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
* @param pageDefinition the page definition describing the page to be rendered
*/
public PCLPainter(PCLDocumentHandler parent, PCLPageDefinition pageDefinition) {
- this.parent = parent;
+ super(parent);
this.gen = parent.getPCLGenerator();
this.state = IFState.create();
this.currentPageDefinition = pageDefinition;
}
- /** {@inheritDoc} */
- public IFContext getContext() {
- return this.parent.getContext();
- }
-
PCLRenderingUtil getPCLUtil() {
- return this.parent.getPCLUtil();
+ return getDocumentHandler().getPCLUtil();
}
/** @return the target resolution */
protected int getResolution() {
- int resolution = (int)Math.round(getUserAgent().getTargetResolution());
+ int resolution = Math.round(getUserAgent().getTargetResolution());
if (resolution <= 300) {
return 300;
} else {
@@ -223,7 +214,7 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
g2d.translate(-rect.x, -rect.y);
Java2DPainter painter = new Java2DPainter(g2d,
- getContext(), parent.getFontInfo(), state);
+ getContext(), getFontInfo(), state);
try {
painter.drawBorderRect(rect, top, bottom, left, right);
} catch (IFException e) {
@@ -258,7 +249,7 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
g2d.translate(-boundingBox.x, -boundingBox.y);
Java2DPainter painter = new Java2DPainter(g2d,
- getContext(), parent.getFontInfo(), state);
+ getContext(), getFontInfo(), state);
try {
painter.drawLine(start, end, width, color, style);
} catch (IFException e) {
@@ -315,9 +306,8 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
state.getFontFamily(), state.getFontStyle(), state.getFontWeight());
//TODO Ignored: state.getFontVariant()
//TODO Opportunity for font caching if font state is more heavily used
- String fontKey = parent.getFontInfo().getInternalFontKey(triplet);
- boolean pclFont = getPCLUtil().isAllTextAsBitmaps()
- ? false
+ String fontKey = getFontKey(triplet);
+ boolean pclFont = getPCLUtil().isAllTextAsBitmaps() ? false
: HardcodedFonts.setFont(gen, fontKey, state.getFontSize(), text);
if (pclFont) {
drawTextNative(x, y, letterSpacing, wordSpacing, dp, text, triplet);
@@ -346,7 +336,7 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
setCursorPos(x, y);
float fontSize = state.getFontSize() / 1000f;
- Font font = parent.getFontInfo().getFontInstance(triplet, state.getFontSize());
+ Font font = getFontInfo().getFontInstance(triplet, state.getFontSize());
int l = text.length();
int[] dx = IFUtil.convertDPToDX ( dp );
int dxl = (dx != null ? dx.length : 0);
@@ -438,13 +428,12 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
final int letterSpacing, final int wordSpacing, final int[][] dp,
final String text, FontTriplet triplet) throws IFException {
//Use Java2D to paint different fonts via bitmap
- final Font font = parent.getFontInfo().getFontInstance(triplet, state.getFontSize());
+ final Font font = getFontInfo().getFontInstance(triplet, state.getFontSize());
//for cursive fonts, so the text isn't clipped
FontMetricsMapper mapper;
try {
- mapper = (FontMetricsMapper)parent.getFontInfo().getMetricsFor(
- font.getFontName());
+ mapper = (FontMetricsMapper) getFontInfo().getMetricsFor(font.getFontName());
} catch (Exception t) {
throw new RuntimeException(t);
}
@@ -475,8 +464,7 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
rect = new Rectangle(x, y, 1000, -descent);
g2d.draw(rect);
}
- Java2DPainter painter = new Java2DPainter(g2d,
- getContext(), parent.getFontInfo(), state);
+ Java2DPainter painter = new Java2DPainter(g2d, getContext(), getFontInfo(), state);
try {
painter.drawText(x, y, letterSpacing, wordSpacing, dp, text);
} catch (IFException e) {
@@ -501,7 +489,7 @@ public class PCLPainter extends AbstractIFPainter implements PCLConstants {
/** Restores the last graphics state from the stack. */
private void restoreGraphicsState() {
- graphicContext = (GraphicContext)graphicContextStack.pop();
+ graphicContext = graphicContextStack.pop();
}
private void concatenateTransformationMatrix(AffineTransform transform) throws IOException {
diff --git a/src/java/org/apache/fop/render/pdf/PDFDocumentHandler.java b/src/java/org/apache/fop/render/pdf/PDFDocumentHandler.java
index 1ad8034e0..dd9320571 100644
--- a/src/java/org/apache/fop/render/pdf/PDFDocumentHandler.java
+++ b/src/java/org/apache/fop/render/pdf/PDFDocumentHandler.java
@@ -40,7 +40,6 @@ import org.apache.fop.fo.extensions.xmp.XMPMetadata;
import org.apache.fop.pdf.PDFAnnotList;
import org.apache.fop.pdf.PDFDocument;
import org.apache.fop.pdf.PDFPage;
-import org.apache.fop.pdf.PDFResourceContext;
import org.apache.fop.pdf.PDFResources;
import org.apache.fop.render.extensions.prepress.PageBoundaries;
import org.apache.fop.render.extensions.prepress.PageScale;
@@ -68,31 +67,28 @@ public class PDFDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
private PDFStructureTreeBuilder structureTreeBuilder;
/** the PDF Document being created */
- protected PDFDocument pdfDoc;
+ private PDFDocument pdfDoc;
/**
* Utility class which enables all sorts of features that are not directly connected to the
* normal rendering process.
*/
- protected final PDFRenderingUtil pdfUtil;
+ private final PDFRenderingUtil pdfUtil;
/** the /Resources object of the PDF document being created */
- protected PDFResources pdfResources;
+ private PDFResources pdfResources;
/** The current content generator */
- protected PDFContentGenerator generator;
-
- /** the current annotation list to add annotations to */
- protected PDFResourceContext currentContext;
+ private PDFContentGenerator generator;
/** the current page to add annotations to */
- protected PDFPage currentPage;
+ private PDFPage currentPage;
/** the current page's PDF reference */
- protected PageReference currentPageRef;
+ private PageReference currentPageRef;
/** Used for bookmarks/outlines. */
- protected Map<Integer, PageReference> pageReferences = new HashMap<Integer, PageReference>();
+ private Map<Integer, PageReference> pageReferences = new HashMap<Integer, PageReference>();
private final PDFDocumentNavigationHandler documentNavigationHandler
= new PDFDocumentNavigationHandler(this);
@@ -133,6 +129,22 @@ public class PDFDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
return logicalStructureHandler;
}
+ PDFDocument getPDFDocument() {
+ return pdfDoc;
+ }
+
+ PDFPage getCurrentPage() {
+ return currentPage;
+ }
+
+ PageReference getCurrentPageRef() {
+ return currentPageRef;
+ }
+
+ PDFContentGenerator getGenerator() {
+ return generator;
+ }
+
/** {@inheritDoc} */
public void startDocument() throws IFException {
super.startDocument();
@@ -171,7 +183,6 @@ public class PDFDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
pdfResources = null;
this.generator = null;
- currentContext = null;
currentPage = null;
} catch (IOException ioe) {
throw new IFException("I/O error in endDocument()", ioe);
diff --git a/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java b/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
index af49fea4c..1ef637726 100644
--- a/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
+++ b/src/java/org/apache/fop/render/pdf/PDFDocumentNavigationHandler.java
@@ -63,7 +63,7 @@ public class PDFDocumentNavigationHandler implements IFDocumentNavigationHandler
}
PDFDocument getPDFDoc() {
- return this.documentHandler.pdfDoc;
+ return this.documentHandler.getPDFDocument();
}
/** {@inheritDoc} */
@@ -100,7 +100,7 @@ public class PDFDocumentNavigationHandler implements IFDocumentNavigationHandler
/** {@inheritDoc} */
public void renderLink(Link link) throws IFException {
Rectangle targetRect = link.getTargetRect();
- int pageHeight = documentHandler.currentPageRef.getPageDimension().height;
+ int pageHeight = documentHandler.getCurrentPageRef().getPageDimension().height;
Rectangle2D targetRect2D = new Rectangle2D.Double(
targetRect.getMinX() / 1000.0,
(pageHeight - targetRect.getMinY() - targetRect.getHeight()) / 1000.0,
@@ -116,7 +116,7 @@ public class PDFDocumentNavigationHandler implements IFDocumentNavigationHandler
if (documentHandler.getUserAgent().isAccessibilityEnabled() && structure != null) {
documentHandler.getLogicalStructureHandler().addLinkContentItem(pdfLink, structure);
}
- documentHandler.currentPage.addAnnotation(pdfLink);
+ documentHandler.getCurrentPage().addAnnotation(pdfLink);
}
}
diff --git a/src/java/org/apache/fop/render/pdf/PDFPainter.java b/src/java/org/apache/fop/render/pdf/PDFPainter.java
index f51088fab..0160ffc1c 100644
--- a/src/java/org/apache/fop/render/pdf/PDFPainter.java
+++ b/src/java/org/apache/fop/render/pdf/PDFPainter.java
@@ -30,19 +30,16 @@ import java.io.IOException;
import org.w3c.dom.Document;
import org.apache.fop.fonts.Font;
-import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.fonts.LazyFont;
import org.apache.fop.fonts.SingleByteFont;
import org.apache.fop.fonts.Typeface;
-import org.apache.fop.pdf.PDFDocument;
import org.apache.fop.pdf.PDFNumber;
import org.apache.fop.pdf.PDFStructElem;
import org.apache.fop.pdf.PDFTextUtil;
import org.apache.fop.pdf.PDFXObject;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.intermediate.AbstractIFPainter;
-import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFState;
import org.apache.fop.render.intermediate.IFUtil;
@@ -55,9 +52,7 @@ import org.apache.fop.util.CharUtilities;
/**
* IFPainter implementation that produces PDF.
*/
-public class PDFPainter extends AbstractIFPainter {
-
- private final PDFDocumentHandler documentHandler;
+public class PDFPainter extends AbstractIFPainter<PDFDocumentHandler> {
/** The current content generator */
protected PDFContentGenerator generator;
@@ -77,30 +72,15 @@ public class PDFPainter extends AbstractIFPainter {
*/
public PDFPainter(PDFDocumentHandler documentHandler,
PDFLogicalStructureHandler logicalStructureHandler) {
- super();
- this.documentHandler = documentHandler;
+ super(documentHandler);
this.logicalStructureHandler = logicalStructureHandler;
- this.generator = documentHandler.generator;
+ this.generator = documentHandler.getGenerator();
this.borderPainter = new PDFBorderPainter(this.generator);
this.state = IFState.create();
accessEnabled = this.getUserAgent().isAccessibilityEnabled();
}
/** {@inheritDoc} */
- @Override
- protected IFContext getContext() {
- return this.documentHandler.getContext();
- }
-
- PDFDocument getPDFDoc() {
- return this.documentHandler.pdfDoc;
- }
-
- FontInfo getFontInfo() {
- return this.documentHandler.getFontInfo();
- }
-
- /** {@inheritDoc} */
public void startViewport(AffineTransform transform, Dimension size, Rectangle clipRect)
throws IFException {
generator.saveGraphicsState();
@@ -129,7 +109,7 @@ public class PDFPainter extends AbstractIFPainter {
/** {@inheritDoc} */
public void drawImage(String uri, Rectangle rect)
throws IFException {
- PDFXObject xobject = getPDFDoc().getXObject(uri);
+ PDFXObject xobject = getDocumentHandler().getPDFDocument().getXObject(uri);
if (xobject != null) {
if (accessEnabled) {
PDFStructElem structElem = (PDFStructElem) getContext().getStructureTreeElement();
@@ -156,7 +136,7 @@ public class PDFPainter extends AbstractIFPainter {
@Override
protected RenderingContext createRenderingContext() {
PDFRenderingContext pdfContext = new PDFRenderingContext(
- getUserAgent(), generator, this.documentHandler.currentPage, getFontInfo());
+ getUserAgent(), generator, getDocumentHandler().getCurrentPage(), getFontInfo());
pdfContext.setMarkedContentInfo(imageMCI);
return pdfContext;
}
@@ -317,12 +297,11 @@ public class PDFPainter extends AbstractIFPainter {
}
}
- private void drawTextWithDX ( int x, int y, String text, FontTriplet triplet,
- int letterSpacing, int wordSpacing, int[] dx ) {
-
+ private void drawTextWithDX(int x, int y, String text, FontTriplet triplet,
+ int letterSpacing, int wordSpacing, int[] dx) throws IFException {
//TODO Ignored: state.getFontVariant()
//TODO Opportunity for font caching if font state is more heavily used
- String fontKey = getFontInfo().getInternalFontKey(triplet);
+ String fontKey = getFontKey(triplet);
int sizeMillipoints = state.getFontSize();
float fontSize = sizeMillipoints / 1000f;
diff --git a/src/java/org/apache/fop/render/ps/PSDocumentHandler.java b/src/java/org/apache/fop/render/ps/PSDocumentHandler.java
index 488abd559..d73beb759 100644
--- a/src/java/org/apache/fop/render/ps/PSDocumentHandler.java
+++ b/src/java/org/apache/fop/render/ps/PSDocumentHandler.java
@@ -56,6 +56,7 @@ import org.apache.fop.apps.MimeConstants;
import org.apache.fop.apps.io.TempResourceURIGenerator;
import org.apache.fop.render.intermediate.AbstractBinaryWritingIFDocumentHandler;
import org.apache.fop.render.intermediate.IFContext;
+import org.apache.fop.render.intermediate.IFDocumentHandler;
import org.apache.fop.render.intermediate.IFDocumentHandlerConfigurator;
import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFPainter;
@@ -80,10 +81,10 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
* Utility class which enables all sorts of features that are not directly connected to the
* normal rendering process.
*/
- protected PSRenderingUtil psUtil;
+ private PSRenderingUtil psUtil;
/** The PostScript generator used to output the PostScript */
- protected PSGenerator gen;
+ PSGenerator gen;
/** the temporary file in case of two-pass processing */
private URI tempURI;
@@ -134,6 +135,10 @@ public class PSDocumentHandler extends AbstractBinaryWritingIFDocumentHandler {
return MimeConstants.MIME_POSTSCRIPT;
}
+ PSGenerator getGenerator() {
+ return gen;
+ }
+
/** {@inheritDoc} */
public IFDocumentHandlerConfigurator getConfigurator() {
return new PSRendererConfigurator(getUserAgent(), new PSRendererConfigParser());
diff --git a/src/java/org/apache/fop/render/ps/PSPainter.java b/src/java/org/apache/fop/render/ps/PSPainter.java
index c2288019a..63e947e55 100644
--- a/src/java/org/apache/fop/render/ps/PSPainter.java
+++ b/src/java/org/apache/fop/render/ps/PSPainter.java
@@ -41,7 +41,6 @@ import org.apache.xmlgraphics.ps.PSGenerator;
import org.apache.xmlgraphics.ps.PSResource;
import org.apache.fop.fonts.Font;
-import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
import org.apache.fop.fonts.LazyFont;
import org.apache.fop.fonts.MultiByteFont;
@@ -49,7 +48,6 @@ import org.apache.fop.fonts.SingleByteFont;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.intermediate.AbstractIFPainter;
-import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFState;
import org.apache.fop.render.intermediate.IFUtil;
@@ -61,12 +59,11 @@ import org.apache.fop.util.HexEncoder;
/**
* IFPainter implementation that produces PostScript.
*/
-public class PSPainter extends AbstractIFPainter {
+public class PSPainter extends AbstractIFPainter<PSDocumentHandler> {
/** logging instance */
private static Log log = LogFactory.getLog(PSPainter.class);
- private PSDocumentHandler documentHandler;
private PSBorderPainter borderPainter;
private boolean inTextMode = false;
@@ -80,27 +77,13 @@ public class PSPainter extends AbstractIFPainter {
}
protected PSPainter(PSDocumentHandler documentHandler, IFState state) {
- super();
- this.documentHandler = documentHandler;
- this.borderPainter = new PSBorderPainter(documentHandler.gen);
+ super(documentHandler);
+ this.borderPainter = new PSBorderPainter(getGenerator());
this.state = state;
}
- /** {@inheritDoc} */
- protected IFContext getContext() {
- return this.documentHandler.getContext();
- }
-
- PSRenderingUtil getPSUtil() {
- return this.documentHandler.psUtil;
- }
-
- FontInfo getFontInfo() {
- return this.documentHandler.getFontInfo();
- }
-
private PSGenerator getGenerator() {
- return this.documentHandler.gen;
+ return getDocumentHandler().getGenerator();
}
/** {@inheritDoc} */
@@ -168,7 +151,7 @@ public class PSPainter extends AbstractIFPainter {
/** {@inheritDoc} */
protected void drawImageUsingImageHandler(ImageInfo info, Rectangle rect)
throws ImageException, IOException {
- if (!getPSUtil().isOptimizeResources()
+ if (!getDocumentHandler().getPSUtil().isOptimizeResources()
|| PSImageUtils.isImageInlined(info,
(PSRenderingContext)createRenderingContext())) {
super.drawImageUsingImageHandler(info, rect);
@@ -177,7 +160,7 @@ public class PSPainter extends AbstractIFPainter {
log.debug("Image " + info + " is embedded as a form later");
}
//Don't load image at this time, just put a form placeholder in the stream
- PSResource form = documentHandler.getFormForImage(info.getOriginalURI());
+ PSResource form = getDocumentHandler().getFormForImage(info.getOriginalURI());
PSImageUtils.drawForm(form, info, rect, getGenerator());
}
}
@@ -246,7 +229,7 @@ public class PSPainter extends AbstractIFPainter {
if (top != null || bottom != null || left != null || right != null) {
try {
endTextObject();
- if (getPSUtil().getRenderingMode() == PSRenderingMode.SIZE
+ if (getDocumentHandler().getPSUtil().getRenderingMode() == PSRenderingMode.SIZE
&& hasOnlySolidBorders(top, bottom, left, right)) {
super.drawBorderRect(rect, top, bottom, left, right);
} else {
@@ -273,7 +256,7 @@ public class PSPainter extends AbstractIFPainter {
if (fontName == null) {
throw new NullPointerException("fontName must not be null");
}
- Typeface tf = (Typeface)getFontInfo().getFonts().get(fontName);
+ Typeface tf = getFontInfo().getFonts().get(fontName);
if (tf instanceof LazyFont) {
tf = ((LazyFont)tf).getRealFont();
}
@@ -363,10 +346,7 @@ public class PSPainter extends AbstractIFPainter {
state.getFontFamily(), state.getFontStyle(), state.getFontWeight());
//TODO Ignored: state.getFontVariant()
//TODO Opportunity for font caching if font state is more heavily used
- String fontKey = getFontInfo().getInternalFontKey(triplet);
- if (fontKey == null) {
- throw new IFException("Font not available: " + triplet, null);
- }
+ String fontKey = getFontKey(triplet);
int sizeMillipoints = state.getFontSize();
// This assumes that *all* CIDFonts use a /ToUnicode mapping
@@ -529,10 +509,9 @@ public class PSPainter extends AbstractIFPainter {
}
private void useFont(String key, int size) throws IOException {
- PSFontResource res = this.documentHandler.getPSResourceForFontKey(key);
+ PSFontResource res = getDocumentHandler().getPSResourceForFontKey(key);
PSGenerator generator = getGenerator();
generator.useFont("/" + res.getName(), size / 1000f);
res.notifyResourceUsageOnPage(generator.getResourceTracker());
}
-
}
diff --git a/src/sandbox/org/apache/fop/render/svg/SVGPainter.java b/src/sandbox/org/apache/fop/render/svg/SVGPainter.java
index 8e181d4ec..cdb6297b5 100644
--- a/src/sandbox/org/apache/fop/render/svg/SVGPainter.java
+++ b/src/sandbox/org/apache/fop/render/svg/SVGPainter.java
@@ -45,7 +45,6 @@ import org.apache.fop.render.ImageHandlerUtil;
import org.apache.fop.render.RenderingContext;
import org.apache.fop.render.intermediate.AbstractIFPainter;
import org.apache.fop.render.intermediate.IFConstants;
-import org.apache.fop.render.intermediate.IFContext;
import org.apache.fop.render.intermediate.IFException;
import org.apache.fop.render.intermediate.IFState;
import org.apache.fop.render.intermediate.IFUtil;
@@ -59,12 +58,11 @@ import org.apache.fop.util.XMLUtil;
/**
* IFPainter implementation that writes SVG.
*/
-public class SVGPainter extends AbstractIFPainter implements SVGConstants {
-
- private AbstractSVGDocumentHandler parent;
+public class SVGPainter extends AbstractIFPainter<AbstractSVGDocumentHandler>
+ implements SVGConstants {
/** The SAX content handler that receives the generated XML events. */
- protected GenerationHelperContentHandler handler;
+ private GenerationHelperContentHandler handler;
private static final int MODE_NORMAL = 0;
private static final int MODE_TEXT = 1;
@@ -78,18 +76,12 @@ public class SVGPainter extends AbstractIFPainter implements SVGConstants {
*/
public SVGPainter(AbstractSVGDocumentHandler parent,
GenerationHelperContentHandler contentHandler) {
- super();
- this.parent = parent;
+ super(parent);
this.handler = contentHandler;
this.state = IFState.create();
}
/** {@inheritDoc} */
- protected IFContext getContext() {
- return parent.getContext();
- }
-
- /** {@inheritDoc} */
public void startViewport(AffineTransform transform, Dimension size, Rectangle clipRect)
throws IFException {
startViewport(SVGUtil.formatAffineTransformMptToPt(transform), size, clipRect);
diff --git a/status.xml b/status.xml
index 8d41fdef4..bd337df9a 100644
--- a/status.xml
+++ b/status.xml
@@ -63,6 +63,9 @@
documents. Example: the fix of marks layering will be such a case when it's done.
-->
<release version="FOP Trunk" date="TBD">
+ <action context="Test" dev="GA" type="fix">
+ Fix errors and warnings in example files. Add build.xml for documentation examples.
+ </action>
<action context="Code" dev="GA" type="fix" fixes-bug="53458" due-to="Dieter von Holten">
Fix incorrect language and country code key generation in hyphenation tree cache.
</action>
diff --git a/test/java/org/apache/fop/render/intermediate/AbstractIFPainterTestCase.java b/test/java/org/apache/fop/render/intermediate/AbstractIFPainterTestCase.java
new file mode 100644
index 000000000..ebe7f17b5
--- /dev/null
+++ b/test/java/org/apache/fop/render/intermediate/AbstractIFPainterTestCase.java
@@ -0,0 +1,99 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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.
+ */
+
+package org.apache.fop.render.intermediate;
+
+import java.awt.Dimension;
+import java.awt.Paint;
+import java.awt.Rectangle;
+import java.awt.geom.AffineTransform;
+
+import org.junit.Before;
+import org.junit.Test;
+import org.w3c.dom.Document;
+
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.FontTriplet;
+import org.apache.fop.render.RenderingContext;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+public class AbstractIFPainterTestCase {
+
+ private AbstractIFPainter<?> sut;
+ private IFDocumentHandler handler;
+
+ @Before
+ public void setUp() {
+ handler = mock(IFDocumentHandler.class);
+ sut = new AbstractIFPainter<IFDocumentHandler>(handler) {
+ public void startViewport(AffineTransform transform, Dimension size, Rectangle clipRect)
+ throws IFException {
+ }
+
+ public void endViewport() throws IFException {
+ }
+
+ public void startGroup(AffineTransform transform) throws IFException {
+ }
+
+ public void endGroup() throws IFException {
+ }
+
+ public void clipRect(Rectangle rect) throws IFException {
+ }
+
+ public void fillRect(Rectangle rect, Paint fill) throws IFException {
+ }
+
+ public void drawImage(String uri, Rectangle rect) throws IFException {
+ }
+
+ public void drawImage(Document doc, Rectangle rect) throws IFException {
+ }
+
+ @Override
+ protected RenderingContext createRenderingContext() {
+ return null;
+ }
+
+ public void drawText(int x, int y, int letterSpacing, int wordSpacing, int[][] dp,
+ String text) throws IFException {
+ }
+ };
+ FontInfo fontInfo = mock(FontInfo.class);
+ when(handler.getFontInfo()).thenReturn(fontInfo);
+ }
+
+ @Test
+ public void testGetFontKey() throws IFException {
+ String expected = "the expected string";
+ FontTriplet triplet = mock(FontTriplet.class);
+ FontInfo fontInfo = handler.getFontInfo();
+ when(fontInfo.getInternalFontKey(triplet)).thenReturn(expected);
+ assertEquals(expected, sut.getFontKey(triplet));
+ }
+
+ @Test(expected = IFException.class)
+ public void testGetFontKeyMissingFont() throws IFException {
+ FontTriplet triplet = mock(FontTriplet.class);
+ when(handler.getFontInfo().getInternalFontKey(triplet)).thenReturn(null);
+ sut.getFontKey(triplet);
+ }
+}