aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--KEYS24
-rw-r--r--README40
-rw-r--r--build.properties4
-rw-r--r--build.xml80
-rw-r--r--fop.bat2
-rw-r--r--forrest.properties7
-rw-r--r--forrest.properties.xml (renamed from src/java/org/apache/fop/image/analyser/package.html)15
-rw-r--r--lib/README.txt14
-rw-r--r--lib/xmlgraphics-commons-1.4svn.jar (renamed from lib/xmlgraphics-commons-1.3svn.jar)bin510302 -> 511830 bytes
-rw-r--r--src/codegen/fonts/font-file.xsl6
-rw-r--r--src/documentation/content/.htaccess4
-rw-r--r--src/documentation/content/doap.rdf8
-rw-r--r--src/documentation/content/xdocs/0.93/extensions.xml125
-rw-r--r--src/documentation/content/xdocs/0.93/fonts.xml298
-rw-r--r--src/documentation/content/xdocs/0.93/graphics.xml338
-rw-r--r--src/documentation/content/xdocs/0.94/index.xml2
-rw-r--r--src/documentation/content/xdocs/0.95/anttask.xml (renamed from src/documentation/content/xdocs/0.93/anttask.xml)0
-rw-r--r--src/documentation/content/xdocs/0.95/compiling.xml (renamed from src/documentation/content/xdocs/0.93/compiling.xml)7
-rw-r--r--src/documentation/content/xdocs/0.95/configuration.xml (renamed from src/documentation/content/xdocs/0.93/configuration.xml)85
-rw-r--r--src/documentation/content/xdocs/0.95/embedding.xml (renamed from src/documentation/content/xdocs/0.93/embedding.xml)13
-rw-r--r--src/documentation/content/xdocs/0.95/extensions.xml234
-rw-r--r--src/documentation/content/xdocs/0.95/fonts.xml410
-rw-r--r--src/documentation/content/xdocs/0.95/fotree/disabled-testcases.xml (renamed from src/documentation/content/xdocs/0.93/fotree/disabled-testcases.xml)5
-rw-r--r--src/documentation/content/xdocs/0.95/graphics.xml551
-rw-r--r--src/documentation/content/xdocs/0.95/hyphenation.xml (renamed from src/documentation/content/xdocs/0.93/hyphenation.xml)0
-rw-r--r--src/documentation/content/xdocs/0.95/index.xml (renamed from src/documentation/content/xdocs/0.93/index.xml)14
-rw-r--r--src/documentation/content/xdocs/0.95/intermediate.xml (renamed from src/documentation/content/xdocs/0.93/intermediate.xml)0
-rw-r--r--src/documentation/content/xdocs/0.95/known-issues.xml (renamed from src/documentation/content/xdocs/0.93/known-issues.xml)32
-rw-r--r--src/documentation/content/xdocs/0.95/knownissues_overview.xml (renamed from src/documentation/content/xdocs/0.93/knownissues_overview.xml)16
-rw-r--r--src/documentation/content/xdocs/0.95/layoutengine/disabled-testcases.xml (renamed from src/documentation/content/xdocs/0.93/layoutengine/disabled-testcases.xml)88
-rw-r--r--src/documentation/content/xdocs/0.95/output.xml (renamed from src/documentation/content/xdocs/0.93/output.xml)132
-rw-r--r--src/documentation/content/xdocs/0.95/pdfa.xml (renamed from src/documentation/content/xdocs/0.93/pdfa.xml)26
-rw-r--r--src/documentation/content/xdocs/0.95/pdfencryption.xml (renamed from src/documentation/content/xdocs/0.93/pdfencryption.xml)11
-rw-r--r--src/documentation/content/xdocs/0.95/pdfx.xml (renamed from src/documentation/content/xdocs/0.93/pdfx.xml)0
-rw-r--r--src/documentation/content/xdocs/0.95/running.xml (renamed from src/documentation/content/xdocs/0.93/running.xml)65
-rw-r--r--src/documentation/content/xdocs/0.95/servlets.xml (renamed from src/documentation/content/xdocs/0.93/servlets.xml)67
-rw-r--r--src/documentation/content/xdocs/0.95/upgrading.xml (renamed from src/documentation/content/xdocs/0.93/upgrading.xml)42
-rw-r--r--src/documentation/content/xdocs/compliance.ihtml12468
-rw-r--r--src/documentation/content/xdocs/dev/doc.xml4
-rw-r--r--src/documentation/content/xdocs/dev/release.xml2
-rw-r--r--src/documentation/content/xdocs/download.xml21
-rw-r--r--src/documentation/content/xdocs/faq.xml15
-rw-r--r--src/documentation/content/xdocs/index.xml7
-rw-r--r--src/documentation/content/xdocs/quickstartguide.xml124
-rw-r--r--src/documentation/content/xdocs/site.xml25
-rw-r--r--src/documentation/content/xdocs/status.xml8
-rw-r--r--src/documentation/content/xdocs/tabs.xml8
-rw-r--r--src/documentation/content/xdocs/team.xml32
-rw-r--r--src/documentation/content/xdocs/trunk/compiling.xml4
-rw-r--r--src/documentation/content/xdocs/trunk/fonts.xml210
-rw-r--r--src/documentation/content/xdocs/trunk/output.xml29
-rw-r--r--src/documentation/content/xdocs/trunk/pdfencryption.xml6
-rw-r--r--src/documentation/content/xdocs/trunk/running.xml2
-rw-r--r--src/documentation/poster/README.txt5
-rw-r--r--src/documentation/poster/cfg/README.txt7
-rw-r--r--src/documentation/poster/cfg/VERDANA.ttf.xml1817
-rw-r--r--src/documentation/poster/cfg/VERDANAB.ttf.xml1167
-rw-r--r--src/documentation/poster/cfg/fop.xconf12
-rw-r--r--src/documentation/poster/cfg/lucon.ttf.xml925
-rw-r--r--src/documentation/poster/svg/pepe-business-card.svg3
-rw-r--r--src/documentation/poster/xml/business-card-demo.xml19
-rw-r--r--src/documentation/poster/xml/fop-history.xml11
-rw-r--r--src/documentation/poster/xml/fop-poster.xml10
-rw-r--r--src/documentation/poster/xml/fop-transformation-chain.xml2
-rw-r--r--src/documentation/poster/xml/fop-use-cases.xml3
-rw-r--r--src/documentation/poster/xslt/common.xsl6
-rw-r--r--src/documentation/poster/xslt/fop-poster.xsl13
-rw-r--r--src/documentation/sitemap.xmap43
-rw-r--r--src/documentation/skinconf.xml20
-rw-r--r--src/java-1.4/org/apache/fop/image/ImageIOImage.java237
-rw-r--r--src/java-1.4/org/apache/fop/image/JpegImageIOImage.java161
-rw-r--r--src/java/org/apache/fop/apps/FopFactory.java10
-rw-r--r--src/java/org/apache/fop/cli/InputHandler.java8
-rw-r--r--src/java/org/apache/fop/fo/ElementMapping.java6
-rw-r--r--src/java/org/apache/fop/fo/FOPropertyMapping.java6
-rw-r--r--src/java/org/apache/fop/fo/FOTreeBuilder.java104
-rw-r--r--src/java/org/apache/fop/fo/flow/table/EmptyGridUnit.java7
-rw-r--r--src/java/org/apache/fop/fo/flow/table/GridUnit.java9
-rw-r--r--src/java/org/apache/fop/fo/flow/table/PrimaryGridUnit.java26
-rw-r--r--src/java/org/apache/fop/fo/properties/CommonHyphenation.java5
-rw-r--r--src/java/org/apache/fop/fo/properties/XMLLangShorthandParser.java2
-rw-r--r--src/java/org/apache/fop/fonts/AbstractCodePointMapping.java23
-rw-r--r--src/java/org/apache/fop/fonts/Base14Font.java (renamed from src/java-1.3/org/apache/fop/svg/GraphicsConfiguration.java)10
-rw-r--r--src/java/org/apache/fop/fonts/CIDFont.java33
-rw-r--r--src/java/org/apache/fop/fonts/CIDSubset.java177
-rw-r--r--src/java/org/apache/fop/fonts/Font.java2
-rw-r--r--src/java/org/apache/fop/fonts/LazyFont.java24
-rw-r--r--src/java/org/apache/fop/fonts/MultiByteFont.java156
-rw-r--r--src/java/org/apache/fop/fonts/NamedCharacter.java142
-rw-r--r--src/java/org/apache/fop/fonts/SimpleSingleByteEncoding.java145
-rw-r--r--src/java/org/apache/fop/fonts/SingleByteEncoding.java (renamed from src/java/org/apache/fop/image/RegisterableImageProvider.java)41
-rw-r--r--src/java/org/apache/fop/fonts/SingleByteFont.java214
-rw-r--r--src/java/org/apache/fop/fonts/Typeface.java7
-rw-r--r--src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java19
-rw-r--r--src/java/org/apache/fop/fonts/type1/AFMCharMetrics.java46
-rw-r--r--src/java/org/apache/fop/fonts/type1/AFMFile.java12
-rw-r--r--src/java/org/apache/fop/fonts/type1/AFMParser.java17
-rw-r--r--src/java/org/apache/fop/fonts/type1/Type1FontLoader.java33
-rw-r--r--src/java/org/apache/fop/image/AbstractFopImage.java376
-rw-r--r--src/java/org/apache/fop/image/BmpImage.java220
-rw-r--r--src/java/org/apache/fop/image/EPSImage.java122
-rw-r--r--src/java/org/apache/fop/image/EmfImage.java51
-rw-r--r--src/java/org/apache/fop/image/FopImage.java207
-rw-r--r--src/java/org/apache/fop/image/FopImageConsumer.java211
-rw-r--r--src/java/org/apache/fop/image/GifImage.java218
-rw-r--r--src/java/org/apache/fop/image/ImageCache.java72
-rw-r--r--src/java/org/apache/fop/image/ImageFactory.java708
-rw-r--r--src/java/org/apache/fop/image/ImageLoader.java64
-rw-r--r--src/java/org/apache/fop/image/JAIImage.java194
-rw-r--r--src/java/org/apache/fop/image/JimiImage.java186
-rw-r--r--src/java/org/apache/fop/image/JpegImage.java239
-rw-r--r--src/java/org/apache/fop/image/PNGImage.java87
-rw-r--r--src/java/org/apache/fop/image/TIFFImage.java207
-rw-r--r--src/java/org/apache/fop/image/XMLImage.java78
-rw-r--r--src/java/org/apache/fop/image/XmlGraphicsCommonsImage.java239
-rw-r--r--src/java/org/apache/fop/image/analyser/BMPReader.java134
-rw-r--r--src/java/org/apache/fop/image/analyser/EMFReader.java162
-rw-r--r--src/java/org/apache/fop/image/analyser/EPSReader.java253
-rw-r--r--src/java/org/apache/fop/image/analyser/GIFReader.java104
-rw-r--r--src/java/org/apache/fop/image/analyser/ImageReader.java56
-rw-r--r--src/java/org/apache/fop/image/analyser/ImageReaderFactory.java108
-rw-r--r--src/java/org/apache/fop/image/analyser/JPEGReader.java264
-rw-r--r--src/java/org/apache/fop/image/analyser/PNGReader.java115
-rw-r--r--src/java/org/apache/fop/image/analyser/SVGReader.java188
-rw-r--r--src/java/org/apache/fop/image/analyser/SVGZReader.java53
-rw-r--r--src/java/org/apache/fop/image/analyser/TIFFReader.java117
-rw-r--r--src/java/org/apache/fop/image/analyser/XMLReader.java167
-rw-r--r--src/java/org/apache/fop/image/package.html2
-rw-r--r--src/java/org/apache/fop/layoutmgr/AbstractBreaker.java4
-rw-r--r--src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java16
-rw-r--r--src/java/org/apache/fop/layoutmgr/AreaAdditionUtil.java2
-rw-r--r--src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java54
-rw-r--r--src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java11
-rw-r--r--src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java21
-rw-r--r--src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java2
-rw-r--r--src/java/org/apache/fop/layoutmgr/LayoutContext.java108
-rw-r--r--src/java/org/apache/fop/layoutmgr/MinOptMaxUtil.java13
-rw-r--r--src/java/org/apache/fop/layoutmgr/PageBreaker.java2
-rw-r--r--src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java8
-rw-r--r--src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java8
-rw-r--r--src/java/org/apache/fop/layoutmgr/TraitSetter.java87
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java7
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/AbstractPageNumberCitationLayoutManager.java17
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java23
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/ContentLayoutManager.java24
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/ICLayoutManager.java5
-rwxr-xr-xsrc/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java18
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java26
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/LeaderLayoutManager.java5
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/LeafNodeLayoutManager.java10
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java14
-rw-r--r--src/java/org/apache/fop/layoutmgr/inline/PageNumberLayoutManager.java6
-rw-r--r--src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java36
-rw-r--r--src/java/org/apache/fop/layoutmgr/list/ListItemContentLayoutManager.java30
-rw-r--r--src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java58
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/ActiveCell.java144
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java220
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/RowPainter.java116
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java7
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java5
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java123
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java164
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableContentPosition.java7
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableHFPenaltyPosition.java5
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableHeaderFooterPosition.java5
-rw-r--r--src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java75
-rw-r--r--src/java/org/apache/fop/pdf/PDFCMap.java5
-rw-r--r--src/java/org/apache/fop/pdf/PDFEncoding.java8
-rw-r--r--src/java/org/apache/fop/pdf/PDFFactory.java133
-rw-r--r--src/java/org/apache/fop/pdf/PDFResources.java2
-rw-r--r--src/java/org/apache/fop/pdf/PDFStream.java38
-rw-r--r--src/java/org/apache/fop/pdf/PDFTTFStream.java2
-rw-r--r--src/java/org/apache/fop/pdf/PDFTextUtil.java295
-rw-r--r--src/java/org/apache/fop/render/AbstractGenericSVGHandler.java2
-rw-r--r--src/java/org/apache/fop/render/afp/AFPRenderer.java22
-rw-r--r--src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java3
-rw-r--r--src/java/org/apache/fop/render/afp/AFPSVGHandler.java10
-rwxr-xr-xsrc/java/org/apache/fop/render/afp/extensions/AFPElement.java7
-rwxr-xr-xsrc/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java18
-rw-r--r--src/java/org/apache/fop/render/afp/extensions/AFPExtensionHandler.java2
-rw-r--r--src/java/org/apache/fop/render/afp/fonts/OutlineFont.java7
-rw-r--r--src/java/org/apache/fop/render/afp/fonts/RasterFont.java7
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractAFPObject.java10
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractDescriptor.java14
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractNamedAFPObject.java23
-rw-r--r--src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java2
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ImageContent.java98
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ImageDataDescriptor.java81
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ImageSegment.java2
-rw-r--r--src/java/org/apache/fop/render/afp/modca/ObjectAreaDescriptor.java21
-rw-r--r--src/java/org/apache/fop/render/afp/modca/PageDescriptor.java12
-rw-r--r--src/java/org/apache/fop/render/afp/modca/PageObject.java8
-rw-r--r--src/java/org/apache/fop/render/afp/modca/PresentationTextData.java122
-rw-r--r--src/java/org/apache/fop/render/afp/modca/PresentationTextDescriptor.java13
-rw-r--r--src/java/org/apache/fop/render/afp/modca/PresentationTextObject.java3
-rw-r--r--src/java/org/apache/fop/render/afp/modca/TagLogicalElementBean.java4
-rw-r--r--src/java/org/apache/fop/render/java2d/CustomFontMetricsMapper.java2
-rw-r--r--src/java/org/apache/fop/render/java2d/Java2DRenderer.java2
-rw-r--r--src/java/org/apache/fop/render/java2d/SystemFontMetricsMapper.java2
-rw-r--r--src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java10
-rw-r--r--src/java/org/apache/fop/render/pdf/ImageRawJPEGAdapter.java101
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFGraphics2DAdapter.java4
-rw-r--r--src/java/org/apache/fop/render/pdf/PDFRenderer.java258
-rw-r--r--src/java/org/apache/fop/render/ps/PSFontUtils.java128
-rw-r--r--src/java/org/apache/fop/render/ps/PSImageUtils.java73
-rw-r--r--src/java/org/apache/fop/render/ps/PSRenderer.java91
-rw-r--r--src/java/org/apache/fop/render/rtf/SVGConverter.java70
-rw-r--r--src/java/org/apache/fop/svg/GraphicsConfiguration.java (renamed from src/java-1.4/org/apache/fop/svg/GraphicsConfiguration.java)0
-rw-r--r--src/java/org/apache/fop/svg/PDFGraphics2D.java11
-rw-r--r--src/java/org/apache/fop/svg/PDFTextPainter.java11
-rw-r--r--src/java/org/apache/fop/svg/PDFTextUtil.java231
-rw-r--r--status.xml259
-rw-r--r--test/java/org/apache/fop/URIResolutionTestCase.java11
-rw-r--r--test/java/org/apache/fop/render/pdf/PDFEncodingTestCase.java6
-rw-r--r--test/layoutengine/disabled-testcases.xml48
-rw-r--r--test/layoutengine/standard-testcases/block-container_absolute-position_no-height_3.xml63
-rw-r--r--test/layoutengine/standard-testcases/block-level_break-after_bug44412.xml112
-rw-r--r--test/layoutengine/standard-testcases/block_break-before_bug44412.xml64
-rw-r--r--test/layoutengine/standard-testcases/inline_block-level_nested_1.xml104
-rw-r--r--test/layoutengine/standard-testcases/table-body_background-image.xml110
-rw-r--r--test/layoutengine/standard-testcases/table-cell_block_keep-with-previous.xml85
-rw-r--r--test/layoutengine/standard-testcases/table-cell_conditional-spaces_2.xml64
-rw-r--r--test/layoutengine/standard-testcases/table-footer_omit-footer-at-break.xml38
-rw-r--r--test/layoutengine/standard-testcases/table-header_background-image.xml101
-rw-r--r--test/layoutengine/standard-testcases/table-header_omit-header-at-break.xml34
-rw-r--r--test/layoutengine/standard-testcases/table-header_table-footer_1.xml40
-rw-r--r--test/layoutengine/standard-testcases/table-header_table-footer_2.xml46
-rw-r--r--test/layoutengine/standard-testcases/table-row_background-image.xml20
-rw-r--r--test/layoutengine/standard-testcases/table-row_height.xml34
-rw-r--r--test/layoutengine/standard-testcases/table-row_keep-with-previous.xml250
-rw-r--r--test/layoutengine/standard-testcases/table_backgrounds.xml392
-rw-r--r--test/layoutengine/standard-testcases/table_backgrounds_2.xml113
-rw-r--r--test/layoutengine/standard-testcases/table_border-collapse_collapse_1.xml130
-rw-r--r--test/layoutengine/standard-testcases/table_border-collapse_collapse_2.xml70
-rw-r--r--test/layoutengine/standard-testcases/table_border-collapse_separate_1.xml2
-rw-r--r--test/layoutengine/standard-testcases/table_border_padding.xml28
-rw-r--r--test/layoutengine/standard-testcases/table_bug44621.xml105
-rw-r--r--test/layoutengine/standard-testcases/table_row-delay_fixed-row-height.xml6
-rw-r--r--test/layoutengine/standard-testcases/table_row-height_break.xml87
239 files changed, 13666 insertions, 18887 deletions
diff --git a/KEYS b/KEYS
index f49f8d6be..c11ca63c3 100644
--- a/KEYS
+++ b/KEYS
@@ -19,7 +19,8 @@ pub 1024D/5F298824 2006-09-30 Simon Pepping <spepping@leverkruid.eu>
sub 2048g/40F32100 2006-09-30
pub 1024D/4358C584 2006-12-08 Vincent Hennebert <vhennebert@apache.org>
sub 2048g/0BD6AC9B 2006-12-08
-
+pub 1024D/CC31AE97 2008-03-27 [expires: 2011-01-01]
+uid Maximilian Berger <maxberger@apache.org>
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.0.6 (GNU/Linux)
@@ -167,3 +168,24 @@ SQQYEQIACQUCRXmZwgIbDAAKCRCgctTQQ1jFhBc3AKCQ1X7oIVR8g7GvSGEUw6DE
HgEaUgCgkl30lcl9gGa9hqk4cuGYn1OTyks=
=XphF
-----END PGP PUBLIC KEY BLOCK-----
+
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.7 (OpenBSD)
+
+mQGiBEfrX/ARBADulGs9V7StbfK8CFfClihdh4lRpw2tktMuYiQJ/rIsNq4zghkT
+UGxFU0eUC2ZVPYvwG6sXgZ5SSm6i8Ii79YdIIxUG7oNwXaY/e9rK+xX193xqmDgl
+Vh5vm4LUtncHi9TZDSF+g1YU1DVHbSjTd2oQEHxbBppL0CLfaLv3U1qr2wCgxeGw
+ZIwb6KD6yesRLx6vGDkDzAMEAL99p0m4sNnjZdKC25Rrt6NZ7CROXWs89/+dkewg
+JCZiVEoAcdSa0z5d8+XaSzmqR8BJWM1PBPjG48eEdqOevwypd0F/U1mwZ42MvQEw
+oBayUY+7/pptW7C5L3Fjk18drE0a8lIzt9VBGX5fe3GoXtZKuOzDv0hEuHyzR9q9
+JLXsA/sELFfrHf0tBfXAdE7pj/Mahalu17/GAyb0RHSvuOfoUvXSXZA91cFg8ycB
+4x265NtYZk52M32wi5ePrYeSJIZ6vWRvPuWVAXDg5S6HCMjcXc6ElkgLcUt1NoPI
+DmRXe4FIDZkGSYSXdLTUByu7+8fCuWQHCFG2sALdOyVlucij2LQoTWF4aW1pbGlh
+biBCZXJnZXIgPG1heGJlcmdlckBhcGFjaGUub3JnPohmBBMRAgAmBQJH61/wAhsD
+BQkFM4sABgsJCAcDAgQVAggDBBYCAwECHgECF4AACgkQ4+RAT8wxrpcs1wCeIAoI
+B0MwZfWLV+wD3pt1wDkPXbsAnjuOsyZ7EeNOcpoqSteB17aPRGeLiEYEEBECAAYF
+Akfrb00ACgkQByq3OugVkrx76ACgqJ8W64IhBYgBvp3dTDLS825gCQQAnjB6X5+4
+eW/0pQUpJcvolxbT9xvF
+=bbQO
+-----END PGP PUBLIC KEY BLOCK-----
+
diff --git a/README b/README
index 67a3b0fe1..133232276 100644
--- a/README
+++ b/README
@@ -90,6 +90,46 @@ http://xmlgraphics.apache.org/fop/stable/running.html
RELEASE NOTES
==============================================================================
+Version 0.95beta
+================
+
+This is a pre-version of the third production grade release of the new FOP
+codebase. It contains many bug fixes and new features. See below for details.
+
+Compliance
+----------
+
+This release implements the XSL 1.0 and 1.1 recommendations to a high
+degree of compliance. See the compliance page
+http://xmlgraphics.apache.org/fop/compliance.html for a detailed
+overview.
+
+Known issues
+------------
+
+The known issues of this release are listed at
+http://xmlgraphics.apache.org/fop/0.95/knownissues_overview.html.
+
+Major Changes in Version 0.95
+-----------------------------
+
+* Add new fox:external-document extension element that allows to insert whole
+ documents into a page-sequence (JM)
+* Add support for background on fo:table-column and fo:table-header/footer/body
+ elements (VH)
+* Add support for conditional borders in tables (VH)
+* Add support for scale-down-to-fit and scale-up-to-fit (JM)
+* Fix various bugs and performance problems with external graphics by
+ introducing a new image loading framework (JM)
+
+The long list of changes in this release is available at
+http://xmlgraphics.apache.org/fop/0.95/changes_0.95.html.
+
+The long list of changes in this and earlier releases is available at
+http://xmlgraphics.apache.org/fop/changes.html.
+
+
+
Version 0.94
============
diff --git a/build.properties b/build.properties
index 06630b4b3..2a8b4c80c 100644
--- a/build.properties
+++ b/build.properties
@@ -24,8 +24,8 @@
# javac.debug = on
# javac.optimize = off
# javac.deprecation = on
-# javac.source = 1.3
-# javac.target = 1.3
+# javac.source = 1.4
+# javac.target = 1.4
# javac.fork = on
## JUnit task switches
diff --git a/build.xml b/build.xml
index 18bf3e8d7..2169003f8 100644
--- a/build.xml
+++ b/build.xml
@@ -131,10 +131,6 @@ list of possible build targets.
</fileset>
</path>
- <patternset id="exclude-jimi">
- <exclude name="org/apache/fop/image/JimiImage.java" unless="jimi.present"/>
- </patternset>
-
<patternset id="exclude-jai">
<exclude name="org/apache/fop/image/JAIImage.java" unless="jai.present"/>
<exclude name="org/apache/fop/render/pcl/JAIMonochromeBitmapConverter.java" unless="jai.present"/>
@@ -148,7 +144,7 @@ list of possible build targets.
<property name="name" value="fop"/>
<property name="NAME" value="FOP"/>
<property name="version" value="svn-trunk"/>
- <property name="year" value="1999-2007"/>
+ <property name="year" value="1999-2008"/>
<property name="javac.debug" value="on"/>
<property name="javac.optimize" value="off"/>
@@ -214,7 +210,7 @@ list of possible build targets.
<!-- =================================================================== -->
<!-- Initialization target -->
<!-- =================================================================== -->
- <target name="init" depends="init-avail, init-filters-jdk14, init-filters-jdk13">
+ <target name="init" depends="init-avail">
</target>
<target name="init-avail">
@@ -224,18 +220,6 @@ list of possible build targets.
<echo message="VM: ${java.vm.version}, ${java.vm.vendor}"/>
<echo message="JAVA_HOME: ${env.JAVA_HOME}"/>
- <available property="jimi.present" classname="com.sun.jimi.core.Jimi"
- classpathref="libs-build-classpath"/>
- <condition property="jimi.message" value="Jimi Support PRESENT">
- <equals arg1="${jimi.present}" arg2="true"/>
- </condition>
- <condition property="jimi.message" value="Jimi Support NOT Present">
- <not>
- <equals arg1="${jimi.present}" arg2="true"/>
- </not>
- </condition>
- <echo message="${jimi.message}"/>
-
<available property="jai.present" classname="javax.media.jai.JAI"
classpathref="libs-build-classpath"/>
<condition property="jai.message" value="JAI Support PRESENT">
@@ -261,7 +245,8 @@ list of possible build targets.
<echo message="${jce.message}"/>
<available property="jdk14.present" classname="java.lang.CharSequence"/>
-
+ <fail message="${Name} requires at least Java 1.4!" unless="jdk14.present"/>
+
<available property="junit.present" classname="junit.framework.TestCase"
classpathref="libs-build-classpath"/>
<condition property="junit.message" value="JUnit Support PRESENT">
@@ -292,22 +277,6 @@ list of possible build targets.
</target>
- <target name="init-filters-jdk13" depends="init-avail" unless="jdk14.present">
- <echo message="Use GraphicsConfiguration adapter for JDK 1.3 or earlier."/>
- <path id="graphics-configuration-adapter">
- <pathelement location="src/java-1.3"/>
- </path>
- <property name="src.java.version.dir" value="${basedir}/src/java-1.3"/>
- </target>
-
- <target name="init-filters-jdk14" depends="init-avail" if="jdk14.present">
- <echo message="Use GraphicsConfiguration adapter for JDK 1.4."/>
- <path id="graphics-configuration-adapter">
- <pathelement location="src/java-1.4"/>
- </path>
- <property name="src.java.version.dir" value="${basedir}/src/java-1.4"/>
- </target>
-
<!-- =================================================================== -->
<!-- Help on usage -->
<!-- =================================================================== -->
@@ -401,12 +370,9 @@ list of possible build targets.
source="${javac.source}" target="${javac.target}">
<src path="${build.gensrc.dir}"/>
<src path="${src.java.dir}"/>
- <src refid="graphics-configuration-adapter"/>
<patternset includes="**/*.java"/>
- <!--patternset includes="org/apache/fop/svg/GraphicsConfiguration.java"/-->
<patternset refid="exclude-jce-dependencies"/>
<patternset refid="exclude-jai"/>
- <patternset refid="exclude-jimi"/>
<classpath refid="libs-build-classpath"/>
</javac>
<copy todir="${build.classes.dir}">
@@ -543,7 +509,6 @@ list of possible build targets.
<uptodate property="jar.sources.uptodate" targetfile="${build.dir}/fop-sources.jar">
<srcfiles dir="${build.gensrc.dir}"/>
<srcfiles dir="${src.java.dir}"/>
- <srcfiles refid="graphics-configuration-adapter"/>
</uptodate>
</target>
@@ -1032,7 +997,6 @@ NOTE:
<pathelement path="${src.java.dir}"/>
<pathelement path="${src.sandbox.dir}"/>
<pathelement path="${build.gensrc.dir}"/>
- <path refid="graphics-configuration-adapter"/>
</sourcepath>
<tag name="todo" scope="all" description="To do:"/>
<group title="Control and Startup">
@@ -1206,37 +1170,24 @@ NOTE:
-->
<echo message="Make sure you have a proper Forrest installation (see http://forrest.apache.org/)"/>
- <!--<antcall target="site"/>-->
-
- <!-- You can provide a JDK 1.4 for a JDK 1.3 build by adding "javahome.jdk14" to build-local.properties -->
- <condition property="javahome.jdk14.override" value="${javahome.jdk14}">
- <isset property="javahome.jdk14"/>
- </condition>
- <echo message="java home: ${javahome.jdk14.override}"/>
- <condition property="javahome.jdk14.override" value="${env.JAVA_HOME}">
- <not>
- <isset property="javahome.jdk14.override"/>
- </not>
- </condition>
- <echo message="java home: ${javahome.jdk14.override}"/>
<condition property="forrest.call" value="forrest.bat" else="forrest">
<os family="windows"/>
</condition>
- <exec executable="${forrest.call}">
- <env key="JAVA_HOME" value="${javahome.jdk14.override}"/>
- </exec>
+ <exec executable="${forrest.call}"/>
</target>
<!-- =================================================================== -->
<!-- Creates the distribution -->
<!-- =================================================================== -->
- <target name="dist" depends="dist-src,dist-bin" description="Generates the distribution package"/>
+ <target name="dist" depends="dist-prereq,dist-src,dist-bin" description="Generates the distribution package"/>
- <target name="dist-bin" depends="all,javadocs,docs">
- <echo message="Building the binary distribution files (zip,tar)"/>
- <fail message="A complete binary build requires Jimi" unless="jimi.present"/>
+ <target name="dist-prereq" depends="init">
<fail message="A complete binary build requires JAI" unless="jai.present"/>
<fail message="A complete binary build requires JCE" unless="jce.present"/>
+ </target>
+
+ <target name="dist-bin" depends="all,javadocs,docs">
+ <echo message="Building the binary distribution files (zip,tar)"/>
<mkdir dir="${dist.bin.result.dir}"/>
<copy todir="${dist.bin.result.dir}">
<fileset refid="dist.bin"/>
@@ -1252,10 +1203,9 @@ NOTE:
<copy todir="${dist.bin.result.dir}/build" file="build/fop.jar"/>
<chmod file="${dist.bin.result.dir}/fop" perm="ugo+rx"/>
- <property name="bin.suffix" value="bin-jdk${java.specification.version}"/>
- <zip zipfile="${name}-${version}-${bin.suffix}.zip" basedir="${dist.bin.dir}" includes="**"/>
+ <zip zipfile="${name}-${version}-bin.zip" basedir="${dist.bin.dir}" includes="**"/>
<tar longfile="gnu"
- destfile="${name}-${version}-${bin.suffix}.tar">
+ destfile="${name}-${version}-bin.tar">
<tarfileset dir="${dist.bin.dir}" mode="755">
<include name="${name}-${version}/fop"/>
</tarfileset>
@@ -1264,8 +1214,8 @@ NOTE:
<exclude name="${name}-${version}/fop"/>
</tarfileset>
</tar>
- <gzip zipfile="${name}-${version}-${bin.suffix}.tar.gz" src="${name}-${version}-${bin.suffix}.tar"/>
- <delete file="${name}-${version}-${bin.suffix}.tar"/>
+ <gzip zipfile="${name}-${version}-bin.tar.gz" src="${name}-${version}-bin.tar"/>
+ <delete file="${name}-${version}-bin.tar"/>
</target>
<target name="dist-src" depends="all">
diff --git a/fop.bat b/fop.bat
index 774e2a8b6..c2444a083 100644
--- a/fop.bat
+++ b/fop.bat
@@ -61,7 +61,7 @@ set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xercesImpl-2.7.1.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xalan-2.7.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\serializer-2.7.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\batik-all-1.7.jar
-set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xmlgraphics-commons-1.3svn.jar
+set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\xmlgraphics-commons-1.4svn.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\avalon-framework-4.2.0.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\commons-io-1.3.1.jar
set LOCALCLASSPATH=%LOCALCLASSPATH%;%LIBDIR%\commons-logging-1.0.4.jar
diff --git a/forrest.properties b/forrest.properties
index 537cb15e3..add080783 100644
--- a/forrest.properties
+++ b/forrest.properties
@@ -56,7 +56,7 @@ project.skin=pelt
#project.images-dir=${project.resources-dir}/images
#project.schema-dir=${project.resources-dir}/schema
#project.skins-dir=${project.content-dir}/skins
-#project.skinconf=${project.content-dir}/skinconf.xml
+project.skinconf=${project.content-dir}/skinconf.xml
#project.lib-dir=${project.content-dir}/lib
#project.classes-dir=${project.content-dir}/classes
#project.translations-dir=${project.content-dir}/translations
@@ -97,7 +97,8 @@ forrest.validate.skins.stylesheets=${forrest.validate.skins}
# server, set to -Djava.awt.headless=true
#forrest.jvmargs=
# The bugtracking URL - the issue number will be appended
-#project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
+project.bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
+bugtracking-url=http://issues.apache.org/bugzilla/show_bug.cgi?id=
#project.bugtracking-url=http://issues.apache.org/jira/browse/
# The issues list as rss
#project.issues-rss-url=
@@ -106,4 +107,4 @@ forrest.validate.skins.stylesheets=${forrest.validate.skins}
# The names of plugins that are required to build the project
# comma separated list (no spaces)
# project.required.plugins=
-project.required.plugins=org.apache.forrest.plugin.output.pdf-0.1
+project.required.plugins=org.apache.forrest.plugin.input.projectInfo,org.apache.forrest.plugin.output.pdf
diff --git a/src/java/org/apache/fop/image/analyser/package.html b/forrest.properties.xml
index 677a625b2..d0c01bf4a 100644
--- a/src/java/org/apache/fop/image/analyser/package.html
+++ b/forrest.properties.xml
@@ -1,3 +1,4 @@
+<?xml version="1.0" encoding="UTF-8"?>
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@@ -6,7 +7,7 @@
(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
+ 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,
@@ -14,10 +15,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<!-- $Id$ -->
-<HTML>
-<TITLE>org.apache.fop.image.analyser Package</TITLE>
-<BODY>
-<P>Image analyzers for determining the format of an image and to preload its intrinsic size.</P>
-</BODY>
-</HTML> \ No newline at end of file
+<properties>
+<!-- Project identity -->
+ <property name="projectInfo.project.fullname" value="Apache FOP"/>
+ <property name="projectInfo.project.url" value="http://xmlgraphics.apache.org/fop/"/>
+</properties>
diff --git a/lib/README.txt b/lib/README.txt
index 46c716b77..db0c2cdcf 100644
--- a/lib/README.txt
+++ b/lib/README.txt
@@ -142,8 +142,16 @@ Please make sure you've read the license of each package.
https://jai-imageio.dev.java.net/
BSD license
- Note: Not the whole JAI is needed, only the ImageIO-compatible codecs
- packaged as "Image I/O Tools". The name may be misleading.
+ Note: This is not the same as JAI! Only the ImageIO-compatible codecs
+ are packaged as "Image I/O Tools". The name may be misleading.
+
+ - JAI (Java Advanced Imaging API)
+
+ http://java.sun.com/products/java-media/jai
+ Java Research License and Java Distribution License (Check which one applies to you!)
+
+ Currently used for:
+ - Grayscale error diffusion dithering in the PCL Renderer
- JEuclid (MathML implementation, for the MathML extension)
@@ -182,4 +190,4 @@ Additional development-time dependencies
(not bundled, to be added to your Apache Ant installation)
http://xmlunit.sourceforge.net/
- BSD style license \ No newline at end of file
+ BSD style license
diff --git a/lib/xmlgraphics-commons-1.3svn.jar b/lib/xmlgraphics-commons-1.4svn.jar
index 55b9d9b2a..cb386bd59 100644
--- a/lib/xmlgraphics-commons-1.3svn.jar
+++ b/lib/xmlgraphics-commons-1.4svn.jar
Binary files differ
diff --git a/src/codegen/fonts/font-file.xsl b/src/codegen/fonts/font-file.xsl
index dbca3eba5..21a6507b8 100644
--- a/src/codegen/fonts/font-file.xsl
+++ b/src/codegen/fonts/font-file.xsl
@@ -40,10 +40,10 @@ import java.util.Map;
</xsl:if>
import java.util.Set;
import org.apache.fop.fonts.FontType;
-import org.apache.fop.fonts.Typeface;
+import org.apache.fop.fonts.Base14Font;
import org.apache.fop.fonts.CodePointMapping;
-public class <xsl:value-of select="class-name"/> extends Typeface {
+public class <xsl:value-of select="class-name"/> extends Base14Font {
private final static String fontName = "<xsl:value-of select="font-name"/>";
private final static String fullName = "<xsl:value-of select="full-name"/>";
private final static Set familyNames;
@@ -84,7 +84,7 @@ public class <xsl:value-of select="class-name"/> extends Typeface {
this.enableKerning = enableKerning;
}
- public String getEncoding() {
+ public String getEncodingName() {
return encoding;
}
diff --git a/src/documentation/content/.htaccess b/src/documentation/content/.htaccess
index db766b7c4..561900fde 100644
--- a/src/documentation/content/.htaccess
+++ b/src/documentation/content/.htaccess
@@ -18,8 +18,8 @@ RedirectMatch Permanent ^/fop/upgrading(.*) http://xmlgraphics.apache.org/fop/0.
# redirect to versioned documentation
Redirect Temp /fop/stable http://xmlgraphics.apache.org/fop/0.94
-Redirect Temp /fop/current http://xmlgraphics.apache.org/fop/0.94
-Redirect Temp /fop/unstable http://xmlgraphics.apache.org/fop/trunk
+Redirect Temp /fop/current http://xmlgraphics.apache.org/fop/0.95
+Redirect Temp /fop/unstable http://xmlgraphics.apache.org/fop/0.95
Redirect Temp /fop/latest http://xmlgraphics.apache.org/fop/trunk
Redirect Temp /fop/maintenance http://xmlgraphics.apache.org/fop/0.93
Redirect Temp /fop/previous http://xmlgraphics.apache.org/fop/0.93
diff --git a/src/documentation/content/doap.rdf b/src/documentation/content/doap.rdf
index 82be83e32..1c4253cea 100644
--- a/src/documentation/content/doap.rdf
+++ b/src/documentation/content/doap.rdf
@@ -77,15 +77,15 @@
<release>
<Version>
<name>Previous release</name>
- <created>2003-07-16</created>
- <revision>0.20.5</revision>
+ <created>2007-01-02</created>
+ <revision>0.93</revision>
</Version>
</release>
<release>
<Version>
<name>Latest stable release</name>
- <created>2007-01-02</created>
- <revision>0.93</revision>
+ <created>2007-08-23</created>
+ <revision>0.94</revision>
</Version>
</release>
<repository>
diff --git a/src/documentation/content/xdocs/0.93/extensions.xml b/src/documentation/content/xdocs/0.93/extensions.xml
deleted file mode 100644
index 0c22ca123..000000000
--- a/src/documentation/content/xdocs/0.93/extensions.xml
+++ /dev/null
@@ -1,125 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
-<document>
- <header>
- <title>Standard FOP Extensions</title>
- <version>$Revision$</version>
- </header>
- <body>
- <p>
- By "extension", we mean any data that can be placed in the input XML document that
- is not addressed by the XSL-FO standard.
- By having a mechanism for supporting extensions, FOP is able to add features that
- are not covered in the specification.
- </p>
- <p>
- The extensions documented here are included with FOP, and are automatically available
- to you. If you wish to add an extension of your own to FOP, please see the
- <a href="../dev/extensions.html">Developers' Extension Page</a>.
- </p>
- <note>All extensions required the correct use of an appropriate namespace in your input document.</note>
- <section id="svg">
- <title>SVG</title>
- <p>
- Please see the <a href="graphics.html#svg">SVG documentation</a> for more details.
- </p>
- </section>
- <section id="fo-extensions">
- <title>FO Extensions</title>
- <section id="fox-namespace">
- <title>Namespace</title>
- <p>
- By convention, FO extensions in FOP use the "fox" namespace prefix.
- To use any of the FO extensions, add a namespace entry for
- <code>http://xml.apache.org/fop/extensions</code> to the root element:
- </p>
- <source><![CDATA[<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
- xmlns:fox="http://xmlgraphics.apache.org/fop/extensions">]]></source>
- <note>
- Currently, no extension elements are implemented in FOP Trunk which use the
- FOP extension namespace.
- </note>
- </section>
- <section id="bookmarks">
- <title>PDF Bookmarks</title>
- <p>
- In previous versions of Apache FOP there was a <code>fox:outline</code> element
- which was used to create outlines in PDF files. The redesigned code makes use
- of the new <a href="http://www.w3.org/TR/xsl11/#fo_bookmark-tree">bookmark feature defined in the latest XSL 1.1 working draft</a>.
- </p>
- </section>
- <section id="named-destinations">
- <title>Anchors or Named Destinations</title>
- <p>This extension element hasn't been reimplemented for the redesigned code, yet.</p>
- <!--p>Use the fox:destination element to define "named destinations" inside a PDF document.
-These are useful as fragment identifiers, e.g. "http://server/document.pdf#anchor-name".
-fox:destination elements can be placed almost anywhere in the fo document, including a child of
-root, a block-level element, or an inline-level element.
-For the destination to actually work, it must correspond to an "id" attribute on some fo element
-within the document. In other words, the "id" attribute actually creates the "view" within the
-PDF document. The fox:destination simply gives that view an independent name.
-</p>
- <source><![CDATA[<fox:destination internal-destination="table-of-contents"/>
-...
-<fo:block id="table-of-contents">Table of Contents</fo:block>]]></source>
- <warning>It is possible that in some future release of FOP, <em>all </em>elements with
-"id" attributes will generate named-destinations, which will eliminate the need for
-fox:destination.</warning-->
- </section>
- <section id="table-continue-label">
- <title>Table Continuation Label</title>
- <p>This extension element hasn't been reimplemented for the redesigned code, yet.</p>
- <!--p>Use the fox:continued-label element to create content in table-header and
-table-footer cells that will appear only on pages after the first page that the table
-appears. fox:continued-label is itself inline content, and is a container of fo:inline
-content. This content will be laid out only if the table does not fit on a single page and flows
-to following pages. Here is an example of FO code creating such a table-header:</p>
-<source><![CDATA[<fo:table-header>
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Header column 1 with continued label
- <fox:continued-label><fo:inline> (cont.)</fo:inline></fox:continued-label>
- </fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Header column 2 with no continued label</fo:block>
- </fo:table-cell>
- </fo:table-row>
-</fo:table-header>]]></source-->
- </section>
- <section id="widow-orphan-content-limit">
- <title>fox:orphan-content-limit and fox:widow-content-limit</title>
- <p>
- The two proprietary extension properties, fox:orphan-content-limit and
- fox:widow-content-limit, are used to improve the layout of list-blocks and tables.
- If you have a table with many entries, you don't want a single row to be left over
- on a page. You will want to make sure that at least two or three lines are kept
- together. The properties take an absolute length which specifies the area at the
- beginning (fox:widow-content-limit) or at the end (fox:orphan-content-limit) of a
- table or list-block. The properties are inherited and only have an effect on fo:table
- and fo:list-block. An example: fox:widow-content-limit="3 * 1.2em" would make sure
- the you'll have at least three lines (assuming line-height="1.2") together on a table
- or list-block.
- </p>
- </section>
- </section>
- </body>
-</document>
-
diff --git a/src/documentation/content/xdocs/0.93/fonts.xml b/src/documentation/content/xdocs/0.93/fonts.xml
deleted file mode 100644
index 53d4bd97f..000000000
--- a/src/documentation/content/xdocs/0.93/fonts.xml
+++ /dev/null
@@ -1,298 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
-<document>
- <header>
- <title>Apache FOP: Fonts</title>
- <version>$Revision$</version>
- <authors>
- <person name="Jeremias Märki" email=""/>
- <person name="Tore Engvig" email=""/>
- </authors>
- </header>
- <body>
- <section id="intro">
- <title>Summary</title>
- <note>The FOP Font subsystem is currently undergoing a significant change.
- The details provided here especially related to the generation of FOP Font
- Metrics files and the FOP Font configuration are likely to change substantially
- in the future.
- </note>
- <p>The following table summarizes the font capabilities of the various FOP renderers:</p>
- <table>
- <tr>
- <th>Renderer</th>
- <th>Base-14</th>
- <th>AWT/OS</th>
- <th>Custom</th>
- <th>Custom Embedding</th>
- </tr>
- <tr>
- <td>PDF</td>
- <td>yes</td>
- <td>no</td>
- <td>yes</td>
- <td>yes</td>
- </tr>
- <tr>
- <td>PostScript</td>
- <td>yes</td>
- <td>no</td>
- <td>yes</td>
- <td>yes</td>
- </tr>
- <!--tr> NOT AVAILABLE YET!!!
- <td>PCL</td>
- <td>yes (modified)</td>
- <td>no</td>
- <td>no</td>
- <td>no</td>
- </tr-->
- <tr>
- <td>TXT</td>
- <td>yes (used for layout but not for output)</td>
- <td>no</td>
- <td>yes (used for layout but not for output)</td>
- <td>no</td>
- </tr>
- <tr>
- <td>AWT</td>
- <td>if available from OS</td>
- <td>yes</td>
- <td>yes</td>
- <td>n/a (display only)</td>
- </tr>
- <tr>
- <td>Print</td>
- <td>if available from OS</td>
- <td>yes</td>
- <td>yes</td>
- <td>controlled by OS printer driver</td>
- </tr>
- <tr>
- <td>RTF</td>
- <td>n/a (font metrics not needed)</td>
- <td>n/a</td>
- <td>n/a</td>
- <td>n/a</td>
- </tr>
- <tr>
- <td>MIF</td>
- <td>n/a (font metrics not needed)</td>
- <td>n/a</td>
- <td>n/a</td>
- <td>n/a</td>
- </tr>
- <tr>
- <td>SVG</td>
- <td>if available from OS</td>
- <td>yes</td>
- <td>no</td>
- <td>no</td>
- </tr>
- <tr>
- <td>XML</td>
- <td>yes</td>
- <td>no</td>
- <td>yes</td>
- <td>n/a</td>
- </tr>
- </table>
- </section>
- <section>
- <title>Base-14 Fonts</title>
- <p>The Adobe PDF Specification specifies a set of 14 fonts that must be available to every PDF reader: Helvetica (normal, bold, italic, bold italic), Times (normal, bold, italic, bold italic), Courier (normal, bold, italic, bold italic), Symbol and ZapfDingbats.</p>
- </section>
- <section id="awt">
- <title>AWT/Operating System Fonts</title>
- <p>The AWT family of renderers (AWT, Print, SVG), use the Java AWT libraries for font metric information. Through operating system registration, the AWT libraries know what fonts are available on the system, and the font metrics for each one.</p>
- </section>
- <section id="custom">
- <title>Custom Fonts</title>
- <p>Support for custom fonts is added by creating font metric files (written in XML) from the actual font files, and registering them with FOP. Currently only Type 1 and TrueType fonts can be added.
-More information about fonts can be found at:</p>
- <ul>
- <li><a href="http://partners.adobe.com/asn/developer/type/ftypes.html">Adobe font types</a></li>
- <li><a href="http://partners.adobe.com/asn/developer/technotes/fonts.html">Adobe Font Technote</a>
-</li>
- </ul>
- <section id="type1-metrics">
- <title>Type 1 Font Metrics</title>
- <p>FOP includes PFMReader, which reads the PFM file that normally comes with a Type 1 font, and generates an appropriate font metrics file for it.
-To use it, run the class org.apache.fop.fonts.apps.PFMReader:</p>
- <p>Windows (on JDK 1.4 and later):</p>
- <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>Windows (on JDK 1.3.x):</p>
- <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar;lib\xml-apis.jar;
- lib\xercesImpl.jar;lib\xalan.jar;lib\serializer.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>Unix (on JDK 1.4 and later):</p>
- <source>java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>Unix (on JDK 1.3.1):</p>
- <source>java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar:lib/xml-apis.jar:
- lib/xercesImpl.jar:lib/xalan.jar:lib/serializer.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>PFMReader [options]:</p>
- <ul>
- <li><strong>-fn &lt;fontname&gt;</strong> By default, FOP uses the fontname from the
-.pfm file when embedding the font. Use the "-fn" option to override this name with one you have
-chosen. This may be useful in some cases to ensure that applications using the output document
-(Acrobat Reader for example) use the embedded font instead of a local font with the same
-name.</li>
- </ul>
- <note>The classpath in the above example has been simplified for readability.
-You will have to adjust the classpath to the names of the actual JAR files in the lib directory.
-xml-apis.jar, xercesImpl.jar, xalan.jar and serializer.jar are not necessary for JDK version 1.4 or later.</note>
- <note>The tool will construct some values (FontBBox, StemV and ItalicAngle) based on assumptions and calculations which are only an approximation to the real values.
-FontBBox and Italic Angle can be found in the human-readable part of the PFB file or in the AFM file.
-The PFMReader tool does not yet interpret PFB or AFM files, so if you want to be correct, you may have to adjust the values in the XML file manually.
-The constructed values however appear to have no visible influence.</note>
- </section>
- <section id="truetype-metrics">
- <title>TrueType Font Metrics</title>
- <p>FOP includes TTFReader, which reads the TTF file and generates an appropriate font metrics file for it.
-Use it in a similar manner to PFMReader.
-For example, to create such a metrics file in Windows from the TrueType font at c:\myfonts\cmr10.ttf:</p>
- <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
- org.apache.fop.fonts.apps.TTFReader [options]
- C:\myfonts\cmr10.ttf ttfcm.xml</source>
- <p>TTFReader [options]:</p>
- <ul>
- <li><strong>-d &lt;DEBUG | INFO &gt;</strong> Sets the debug level (default is
-INFO).</li>
- <li><strong>-fn &lt;fontname&gt;</strong> Same as for PFMReader.</li>
- <li><strong>-ttcname &lt;fontname&gt;</strong> If you're reading data from a
-TrueType Collection (.ttc file) you must specify which font from the collection you will read
-metrics from.
-If you read from a .ttc file without this option, the fontnames will be listed for you.</li>
- <li><strong>-enc ansi</strong> Creates a WinAnsi-encoded font metrics file.
-Without this option, a CID-keyed font metrics file is created.
-The table below summarizes the differences between these two encoding options as currently
-used within FOP.
-Please note that this information only applies to TrueType fonts and TrueType collections:</li>
- </ul>
- <table id="ttf-encoding">
- <tr>
- <th>Issue</th>
- <th>WinAnsi</th>
- <th>CID-keyed</th>
- </tr>
- <tr>
- <td>Usable Character Set</td>
- <td>Limited to WinAnsi character set, which is roughly equivalent to iso-8889-1.</td>
- <td>Limited only by the characters in the font itself.</td>
- </tr>
- <tr>
- <td>Embedding the Font</td>
- <td>Optional.</td>
- <td>Mandatory. Not embedding the font produces invalid PDF documents.</td>
- </tr>
- </table>
- <warning>
- You may experience failures with certain TrueType fonts, especially if they don't contain
- the so-called Unicode "cmap" table. TTFReader can currently not deal with font like this.
- </warning>
- </section>
- <section id="truetype-collections-metrics">
- <title>TrueType Collections Font Metrics</title>
- <p>TrueType collections (.ttc files) contain more than one font.
-To create metrics files for these fonts, you must specify which font in the collection should be generated, by using the "-ttcname" option with the TTFReader.</p>
- <p>To get a list of the fonts in a collection, just start the TTFReader as if it were a normal TrueType file (without the -ttcname option).
-It will display all of the font names and exit with an Exception.</p>
- <p>Here is an example of generating a metrics file for a .ttc file:</p>
- <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
- org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho"
- msmincho.ttc msminch.xml</source>
- </section>
- <section id="register">
- <title>Register Fonts with FOP</title>
- <p>You must tell FOP how to find and use the font metrics files by registering them in the <a href="configuration.html">FOP Configuration</a>. Add entries for your custom fonts, regardless of font type, to the configuration file in a manner similar to the following:</p>
- <source><![CDATA[<font metrics-url="file:///C:/myfonts/FTL_____.xml" kerning="yes"
- embed-url="file:///C:/myfonts/FTL_____.pfb">
- <font-triplet name="FrutigerLight" style="normal" weight="normal"/>
-</font>]]></source>
- <note>Review the documentation for <a href="configuration.html">FOP Configuration</a> for instructions on making the FOP configuration available to FOP when it runs. Otherwise, FOP has no way of finding your custom font information.</note>
- <ul>
- <li>
- URLs are used to access the font metric and font files.
- Relative URLs are resolved relative to the font-base property (or base) if available.
- See <a href="configuration.html">FOP: Configuration</a> for more information.
- </li>
- <li>The "kerning" and "embed-url" attributes are optional. Kerning is currently not used at all. If embedding is off, the output will position the text correctly (from the metrics file), but it will not be displayed or printed correctly unless the viewer has the applicable font available to their local system.</li>
- <li>When setting the embed-url attribute for Type 1 fonts, be sure to specify the PFB (actual font data), not PFM (font metrics) file that you used to generate the XML font metrics file.</li>
- <li>
- If relative URLs are specified, they are evaluated relative to the value of the
- "font-base" setting. If there is no "font-base" setting, the fonts are evaluated
- relative to the base directory.
- </li>
- </ul>
- <!--note>Cocoon users will need to setup the config, see FOPSerializer for more information.</note-->
- </section>
- <section id="embedding">
- <title>Embedding</title>
- <note>The PostScript renderer does not yet support TrueType fonts, but can embed Type 1 fonts.</note>
- <note>The font is simply embedded into the PDF file, it is not converted.</note>
- <p>Font embedding is enabled in the userconfig.xml file and controlled by the embed-url attribute.
-If you don't specify the embed-url attribute the font will not be embedded, but will only be referenced.</p>
- <warning>
- Omitting the embed-url attribute for CID-encoded TrueType fonts will currently produce invalid
- PDF files! If you create the XML font metric file using the "-enc ansi" option, you can omit
- the embed-url attribute for TrueType fonts but you're restricted to the WinAnsi character set.
- </warning>
- <p>When FOP embeds a font, it adds a prefix to the fontname to ensure that the name will not match the fontname of an installed font.
-This is helpful with older versions of Acrobat Reader that preferred installed fonts over embedded fonts.</p>
- <p>When embedding PostScript fonts, the entire font is always embedded.</p>
- <p>When embedding TrueType fonts (ttf) or TrueType Collections (ttc), a subset of the original font, containing only the glyphs used, is embedded in the output document.
-Currently, this embedded font contains only the minimum data needed to be embedded in a pdf document, and does not contain any codepage information.
-The PDF document contains indexes to the glyphs in the font instead of to encoded characters.
-While the document will be displayed correctly, the net effect of this is that searching, indexing, and cut-and-paste will not work properly.</p>
- <p>One workaround for this behavior is to use the "-enc ansi" option when generating metrics with TTFReader.
-This will cause the whole font to be embedded in the pdf document.
-Characters will be WinAnsi encoded (as specified in the PDF spec), so you lose the ability to use characters from other character sets.
-See <a href="#ttf-encoding">Table of TTF Encoding Options</a> for more details.</p>
- </section>
- <section id="embedding-base14">
- <title>Explicitely embedding the base 14 fonts</title>
- <p>
- There are cases where you might want to force the embedding of one or more of the base 14 fonts that
- can normally be considered available on the target platform (viewer, printer). One of these cases is
- PDF/A which mandates the embedding of even the base 14 fonts. Embedding a font such as Helvetica or
- Courier is straight-forward. The "Symbol" and "ZapfDingbats" fonts, however, currently present a
- problem because FOP cannot correctly determine the encoding of these two single-byte fonts through
- the PFM file. FOP now correctly interprets the "encoding" value in the XML font metrics file, but the
- PFMReader application writes "UnknownEncoding" to the generated XML file. In order to embed "Symbol"
- and "ZapfDingbats" you have to manually change the XML font metrics file and specify "SymbolEncoding"
- or "ZapfdingbatsEncoding" encoding respectively as the value for the "encoding" element.
- </p>
- <p>Example:</p>
- <source><![CDATA[
-<?xml version="1.0" encoding="UTF-8"?>
-<font-metrics type="TYPE1">
- <font-name>Symbol</font-name>
- <embed/>
- <encoding>SymbolEncoding</encoding>
- <cap-height>673</cap-height>
- <x-height>766</x-height>
- [..]]]></source>
- </section>
- </section>
- </body>
-</document>
diff --git a/src/documentation/content/xdocs/0.93/graphics.xml b/src/documentation/content/xdocs/0.93/graphics.xml
deleted file mode 100644
index beb860223..000000000
--- a/src/documentation/content/xdocs/0.93/graphics.xml
+++ /dev/null
@@ -1,338 +0,0 @@
-<?xml version="1.0" standalone="no"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
-<document>
- <header>
- <title>Apache FOP: Graphics Formats</title>
- <version>$Revision$</version>
- </header>
- <body>
- <section id="support-overview">
- <title>Overview of Graphics Support</title>
- <p>
- The table below summarizes the <em>theoretical</em> support for graphical formats within FOP. In other words, within the constraints of the limitations listed here, these formats <em>should</em> work. However, many of them have not been tested, and there may be limitations that have not yet been discovered or documented. The packages needed to support some formats are not included in the FOP distribution and must be installed separately. Follow the links in the "Support Thru" column for more details.
- </p>
- <table>
- <tr>
- <th>Format</th>
- <th>Type</th>
- <th><a href="#native">FOP native support</a></th>
- <th><a href="#batik">Batik SVG</a></th>
- <th><a href="#batik-codecs">Batik codecs</a></th>
- <th><a href="#imageio">Image I/O</a></th>
- <th><a href="#jai">JAI</a></th>
- <th><a href="#jimi">JIMI</a></th>
- </tr>
- <tr>
- <td><a href="#bmp">BMP</a> (Microsoft Windows Bitmap)</td>
- <td>bitmap</td>
- <td>X</td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td><a href="#eps">EPS</a> (Encapsulated PostScript)</td>
- <td>metafile (both bitmap and vector), probably most frequently used for vector drawings</td>
- <td>(X)</td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td>GIF (Graphics Interchange Format)</td>
- <td>bitmap</td>
- <td>X</td>
- <td></td>
- <td></td>
- <td>X</td>
- <td>X</td>
- <td>X</td>
- </tr>
- <tr>
- <td><a href="#jpeg">JPEG</a> (Joint Photographic Experts Group)</td>
- <td>bitmap</td>
- <td>(X)</td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td><a href="#png">PNG</a> (Portable Network Graphic)</td>
- <td>bitmap</td>
- <td></td>
- <td></td>
- <td>X</td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td><a href="#svg">SVG</a> (Scalable Vector Graphics)</td>
- <td>vector (with embedded bitmaps)</td>
- <td></td>
- <td>X</td>
- <td></td>
- <td></td>
- <td></td>
- <td></td>
- </tr>
- <tr>
- <td><a href="#tiff">TIFF</a> (Tag Image Format File)</td>
- <td>bitmap</td>
- <td>(X)</td>
- <td></td>
- <td>X</td>
- <td></td>
- <td>X</td>
- <td></td>
- <!--td><a href="#native">FOP native</a> or <a href="#jai">JAI</a>, depending on the subformat. See <a href="#tiff">TIFF</a> for more details.(JIMI also supports TIFF, but this has not been implemented within FOP).</td-->
- </tr>
- </table>
- <note>"(X)" means restricted support. Please see the details below.</note>
- </section>
- <section id="packages">
- <title>Graphics Packages</title>
- <section id="native">
- <title>FOP Native</title>
- <p>
- FOP has native ability to handle some graphic file formats.
- </p>
- </section>
- <section id="batik-codecs">
- <title>Batik codecs</title>
- <p>
- Apache Batik contains codecs for PNG and TIFF access. FOP can use these.
- </p>
- </section>
- <section id="imageio">
- <title>Image I/O (JDK 1.4 or higher)</title>
- <p>
- For JDKs 1.4 or higher, FOP provides a wrapper to load images through the
- <a class="fork" href="http://java.sun.com/j2se/1.4.2/docs/guide/imageio/index.html">JDK's Image I/O API</a> (JSR 015).
- Image I/O allows to dynamically add additional image codecs. An example of such an add-on library are the
- <a class="fork" href="http://java.sun.com/products/java-media/jai/">JAI Image I/O Tools</a> available from Sun.
- </p>
- </section>
- <section id="jimi">
- <title>JIMI</title>
- <p>
- Because of licensing issues, the JIMI image library is not included in the FOP distribution. First, <a class="fork" href="http://java.sun.com/products/jimi">download</a> and install it.
-Then, copy the file "JimiProClasses.zip" from the archive to {fop-install-dir}/lib/jimi-1.0.jar. Please note that FOP binary distributions are compiled with JIMI support, so there is no need for you to build FOP to add the support. If jimi-1.0.jar is installed in the right place, it will automatically be used by FOP, otherwise it will not.
- </p>
- </section>
- <section id="jai">
- <title>JAI (Java Advanced Imaging API)</title>
- <warning>JAI support is available for Release 0.20.5 and later. The comments in this section do not apply to releases earlier than 0.20.5.</warning>
- <p>
- FOP has been compiled with JAI support, but JAI is not included in the FOP distribution.
-To use it, install <a href="http://java.sun.com/products/java-media/jai">JAI</a>, then copy the jai_core.jar and the jai_codec.jar files to {fop-install-dir}/lib.
-JAI is much faster than JIMI, but is not available for all platforms. See <a href="http://java.sun.com/products/java-media/jai/forDevelopers/jaifaq.html#platforms">What platforms are supported?</a> on the JAI FAQ page for more details.
- </p>
- </section>
- <section id="batik">
- <title>Batik</title>
- <p>Current FOP distributions include a distribution of the Apache <a class="fork" href="ext:batik">Batik</a> version 1.6.
-It is automatically installed with FOP.
-Because Batik's API changes frequently, it is highly recommended that you use the version that ships with FOP, at least when running FOP.</p>
- <warning>Batik must be run in a graphical environment.</warning>
- <p>Batik must be run in a graphical environment.
-It uses AWT classes for rendering SVG, which in turn require an X server on Unixish systems.
-If you run a server without X, or if you can't connect to the X server due to security restrictions or policies (a so-called "headless" environment), SVG rendering will fail.</p>
- <p>Here are some workarounds:</p>
- <ul>
- <li>If you are using JDK 1.4, start it with the <code>-Djava.awt.headless=true</code> command line option.</li>
- <li>Install an X server which provides an in-memory framebuffer without actually using a screen device or any display hardware. One example is Xvfb.</li>
- <li>Install a toolkit which emulates AWT without the need for an underlying X server. One example is the <a href="http://www.eteks.com/pja/en">PJA toolkit</a>, which is free and comes with detailed installation instructions.</li>
- </ul>
- </section>
- </section>
- <section id="bmp">
- <title>BMP</title>
- <p>FOP native support for BMP images is limited to the RGB color-space.</p>
- </section>
- <section id="eps">
- <title>EPS</title>
- <p>FOP provides support for two output targets:</p>
- <ul>
- <li>PostScript (full support).</li>
- <li>
- PDF (partial support). Due to the lack of a built-in PostScript interpreter, FOP
- can only embed the EPS file into the PDF. Acrobat Reader will not currently display
- the EPS (it doesn't have a PostScript interpreter, either) but it will be shown
- correctly when you print the PDF on a PostScript-capable printer. PostScript devices
- (including GhostScript) will render the EPS correctly.
- </li>
- </ul>
- <p>
- Other output targets can't be supported at the moment because
- FOP lacks a PostScript interpreter. Furthermore, FOP is not able
- to parse the preview bitmaps sometimes contained in EPS files.
- </p>
- </section>
- <section id="jpeg">
- <title>JPEG</title>
- <p>FOP native support of JPEG does not include all variants, especially those containing unusual color lookup tables and color profiles.
-If you have trouble with a JPEG image in FOP, try opening it with an image processing program (such as Photoshop or Gimp) and then saving it.
-Specifying 24-bit color output may also help.
-For the PDF and PostScript renderers most JPEG images can be passed through without decompression.
-User reports indicate that grayscale, RGB, and CMYK color-spaces are all rendered properly.
- </p>
- </section>
- <section id="png">
- <title>PNG</title>
- <p>If using JAI for PNG support, only RGB and RGBA color-spaces are supported for FOP rendering.</p>
- </section>
- <section id="svg">
- <title>SVG</title>
- <section id="svg-intro">
- <title>Introduction</title>
- <p>FOP uses <a href="#batik">Batik</a> for SVG support.
-This format can be handled as an <code>fo:instream-foreign-object</code> or in a separate
-file referenced with <code>fo:external-graphic</code>.</p>
- <note>
-Batik's SVG Rasterizer utility may also be used to convert standalone SVG
-documents into PDF. For more information please see the
-<a href="http://xml.apache.org/batik/svgrasterizer.html">SVG Rasterizer documentation</a>
-on the Batik site.
- </note>
- </section>
- <section id="svg-pdf-graphics">
- <title>Placing SVG Graphics into PDF</title>
- <p>
-The SVG is rendered into PDF by using PDF commands to draw and fill
-lines and curves. This means that the graphical objects created with
-this remain as vector graphics.
- </p>
- <p>
-There are a number of SVG things that cannot be converted directly into
-PDF. Parts of the graphic such as effects, patterns and images are inserted
-into the PDF as a raster graphic. The resolution of this graphic may not
-be ideal depending on the FOP dpi (72dpi) and the scaling for that graphic.
-We hope to improve this in the future.</p>
- <p>
-Currently transparency is not supported in PDF so many svg images that
-contain effects or graphics with transparent areas will not be displayed
-correctly.
- </p>
- </section>
- <section id="svg-pdf-text">
- <title>Placing SVG Text into PDF</title>
- <p>If possible, Batik will use normal PDF text when inserting text. It does
-this by checking if the text can be drawn normally and the font is
-supported. This example svg <a href="../dev/svg/text.svg">text.svg</a> /
-<!--link href="../dev/svg/text.pdf"-->text.pdf<!--/link-->
-shows how various types and effects with text are handled.
-Note that tspan and outlined text are not yet implemented.</p>
- <p>
-Otherwise, text is converted and drawn as a set of shapes by batik, using the stroking text painter.
-This means that a typical character will
-have about 10 curves (each curve consists of at least 20 characters).
-This can make the pdf files large and when the pdf is viewed the
-viewer does not normally draw those fine curves very well (turning on
-Smooth Line Art in the Acrobat preferences will fix this).
-If the text is inserted into the PDF using the inbuilt text commands
-for PDF it will use a single character.
- </p>
- <p>Note that because SVG text can be rendered as either text or a vector graphic, you may need to consider settings in your viewer for both.
-The Acrobat viewer has both "smooth line art" and "smooth text" settings that may need to be set for SVG images to be displayed nicely on your screen (see Edit / Preferences / Display).
-This setting will not affect the printing of your document, which should be OK in any case, but will only affect the quality of the screen display.</p>
- </section>
- <section id="svg-scaling">
- <title>Scaling</title>
- <p>Currently, SVG images are rendered with the dimensions specified <em>in the SVG file</em>, within the viewport specified in the fo:external-graphic element.
-For everything to work properly, the two should be equal.
-The SVG standard leaves this issue as an implementation detail.
-FOP will probably implement a scaling mechanism in the future.</p>
- </section>
- <section id="svg-problems">
- <title>Known Problems</title>
- <ul>
- <li>
-soft mask transparency is combined with white so that it looks better
-on pdf 1.3 viewers but this causes the soft mask to be slightly lighter
-or darker on pdf 1.4 viewers
- </li>
- <li>
-there is some problem with a gradient inside a pattern causing a pdf
-error when viewed in acrobat 5
- </li>
- <li>
-text is not always handled correctly, it may select the wrong font
-especially if characters have multiple fonts in the font list
- </li>
- <li>
-more pdf text handling could be implemented
-It could draw the string using the attributed character iterator
-to handle tspans and other simple changes of text.
- </li>
- <li>
-JPEG images are not inserted directly into the pdf document
-This area has not been implemented yet since the appropriate
-method in batik is static
- </li>
- <li>
-Uniform transparency for images and other svg elements that are converted
-into a raster graphic are not drawn properly in PDF. The image is opaque.
- </li>
- </ul>
- </section>
- </section>
- <section id="tiff">
- <title>TIFF</title>
- <p>FOP-native TIFF support is limited to PDF and PostScript output only. Also, according to user reports, FOP's native support for TIFF is limited to images with the following characteristics (all must be true for successful rendering):</p>
- <ul>
- <li>single channel images (i.e., bi-level and grayscale only)</li>
- <li>uncompressed images, or images using CCITT T.4, CCITT T.6, or JPEG compression</li>
- <li>images using white-is-zero encoding in the TIFF PhotometricInterpretation tag</li>
- </ul>
- <p><em>JAI:</em> Supports RGB and RGBA only for FOP rendering.</p>
- </section>
- <section id="resolution">
- <title>Graphics Resolution</title>
- <p>Some bitmapped image file formats store a dots-per-inch (dpi) or other resolution value. Since PDF and most output formats do not have a concept of resolution, but only of absolute image units (i.e. pixels) FOP ignores the resolution values as well. Instead, FOP uses the dimensions of the image as specified in the fo:external-graphic element to render the image:</p>
- <ul>
- <li>If no dimensions are given, FOP uses a default value of 72 dpi to compute the graphic's dimensions. For example, suppose a graphic 300 pixels wide and 400 pixels high. FOP will render the graphic at 4.167 inches wide, 5.555 inches high, with an apparent resolution of 72 dpi.</li>
- <li>If only one dimension is given, FOP by default uses the same aspect ratio to compute the other dimension (to avoid the appearance of stretching). For example, suppose a graphic 300 pixels wide and 400 pixels high, for which content-width = ".5in". FOP will compute the content-height = .667 inches, and will render the graphic at that size, with an apparent resolution of 600 dpi.</li>
- <li>If both dimensions are given, FOP simply renders the image in that space. For example, suppose a graphic 300 pixels wide and 400 pixels high, for which content-width = "3in" and content-height = "4in". FOP will render the graphic at that size, with an apparent resolution of 100 dpi.</li>
- </ul>
- <p>If you need a higher apparent output resolution for bitmapped images, first make sure that at least one dimension of the image is defined in your XSL-FO input. Apart from that, resolution problems are in the image file itself, and must be corrected there: use or create a higher-resolution image file.</p>
- <note>The explanation above describes only the basic default behavior. There are other attributes of the fo:external-graphic element that can affect the behavior described above.</note>
- </section>
- <section id="caching">
- <title>Image caching</title>
- <p>
- FOP caches images between runs. The URL is used as a key to identify images which means that when
- a particular URL appears again, the image is taken from the cache. If you have a servlet that
- generates a different image each time it is called with the same URL you need to use a constantly
- changing dummy parameter on the URL to avoid caching.
- </p>
- <p>
- The image cache has been improved considerably in the redesigned code. Therefore, a resetCache() method
- has become unnecessary. If you still experience OutOfMemoryErrors, please notify us.
- </p>
- </section>
- </body>
-</document>
diff --git a/src/documentation/content/xdocs/0.94/index.xml b/src/documentation/content/xdocs/0.94/index.xml
index ba5b1af15..9bf46ccf5 100644
--- a/src/documentation/content/xdocs/0.94/index.xml
+++ b/src/documentation/content/xdocs/0.94/index.xml
@@ -32,7 +32,7 @@
</p>
<p>
This fifth release contains many bug fix release and new features compared
- to 0.92beta. To see what has changed since the last release, please visit the
+ to 0.93. To see what has changed since the last release, please visit the
<a href="changes_0.94.html">Changes Page</a> and the <a href="releaseNotes_0.94.html">Release Notes</a>.
</p>
</section>
diff --git a/src/documentation/content/xdocs/0.93/anttask.xml b/src/documentation/content/xdocs/0.95/anttask.xml
index 44550c3d7..44550c3d7 100644
--- a/src/documentation/content/xdocs/0.93/anttask.xml
+++ b/src/documentation/content/xdocs/0.95/anttask.xml
diff --git a/src/documentation/content/xdocs/0.93/compiling.xml b/src/documentation/content/xdocs/0.95/compiling.xml
index 76d7b214f..57761429f 100644
--- a/src/documentation/content/xdocs/0.93/compiling.xml
+++ b/src/documentation/content/xdocs/0.95/compiling.xml
@@ -41,7 +41,7 @@
<section id="env-jdk">
<title>JDK</title>
<p>
- Building FOP requires a minimum Java Development Kit (JDK/SDK) of 1.3
+ Building FOP requires a minimum Java Development Kit (JDK/SDK) of 1.4
(A Java Runtime Environment is not sufficient).
</p>
</section>
@@ -59,7 +59,7 @@
<p>
The build script uses <a href="ext:ant">Apache Ant</a>, a popular
Java-based build tool, which usually requires that the environment variable JAVA_HOME point to
- your local JDK root directory. This is true even if you use JDK 1.2 or above, which normally
+ your local JDK root directory. This is true even if you use JDK 1.4 or above, which normally
does not need this setting.
</p>
</section>
@@ -103,7 +103,8 @@
needed, but may be helpful if you are having problems with the build process itself.
</li>
<li>
- <strong>javadocs</strong>: Generates javadocs. This creates the FOP API documentation.
+ <strong>javadocs</strong>: Creates the FOP API documentation.
+ <note>A minimum JDK version of 1.4.2 is required for generating the javadocs.</note>
</li>
</ul>
<p>To run the build:</p>
diff --git a/src/documentation/content/xdocs/0.93/configuration.xml b/src/documentation/content/xdocs/0.95/configuration.xml
index ed96c3eb7..e82a6e862 100644
--- a/src/documentation/content/xdocs/0.93/configuration.xml
+++ b/src/documentation/content/xdocs/0.95/configuration.xml
@@ -64,19 +64,21 @@
<tr>
<th>Element</th>
<th>Data Type (for the value)</th>
+ <th>Description</th>
<th>Default Value</th>
</tr>
<tr>
<td>base</td>
<td>URL or directory</td>
<td>Specifies the base URL based on which relative URL will be resolved.</td>
+ <td>current directory</td>
</tr>
<tr>
<td>font-base</td>
<td>URL or directory</td>
<td>Specifies the base URL based on which relative font URLs will be resolved.
- If not specified defaults to the base URL above.
</td>
+ <td>base URL/directory (above)</td>
</tr>
<tr>
<td>hyphenation-base</td>
@@ -85,6 +87,7 @@
files will be resolved. If not specified, support for user-supplied hyphenation
patterns remains disabled.
</td>
+ <td>disabled</td>
</tr>
<tr>
<td>source-resolution</td>
@@ -93,6 +96,7 @@
Resolution in dpi (dots per inch) which is used internally to determine the pixel
size for SVG images and bitmap images without resolution information.
</td>
+ <td>72 dpi</td>
</tr>
<tr>
<td>target-resolution</td>
@@ -102,6 +106,17 @@
images generated by bitmap renderers (such as the TIFF renderer) and by bitmaps
generated by Apache Batik for filter effects and such.
</td>
+ <td>72 dpi</td>
+ </tr>
+ <tr>
+ <td>strict-configuration</td>
+ <td>Boolean (true, false)</td>
+ <td>
+ Setting this option to 'true' will cause FOP to strictly verify the contents of the
+ FOP configuration file to ensure that defined resources (such as fonts and base
+ URLs/directories) are valid and available to FOP. Any errors found will cause FOP to
+ immediately raise an exception.</td>
+ <td>false</td>
</tr>
<tr>
<td>strict-validation</td>
@@ -111,6 +126,7 @@
for example, you're allowed to specify a border on a region-body which is supported
by some FO implementations but is non-standard. Note that such a border would
currently have no effect in Apache FOP.</td>
+ <td>true</td>
</tr>
<tr>
<td>break-indent-inheritance</td>
@@ -124,6 +140,7 @@
the desired behaviour and because the behaviour among the commercial implementations
varies. The default for this option (i.e. false) is to behave exactly like the
specification describes.</td>
+ <td>false</td>
</tr>
<tr>
<td>default-page-settings</td>
@@ -132,11 +149,31 @@
Specifies the default width and height of a page if "auto" is specified
for either or both values. Use "height" and "width" attributes on the
default-page-settings element to specify the two values.</td>
+ <td>"height" 11 inches, "width" 8.26 inches</td>
+ </tr>
+ <tr>
+ <td>use-cache</td>
+ <td>boolean (true, false)</td>
+ <td>All fonts information that has been gathered as a result of "directory"
+ or "auto-detect" font configurations will be cached for future rendering runs.
+ This setting should improve performance on systems where
+ fonts have been configured using the "directory" or "auto-detect" tag mechanisms.
+ By default this option is switched on.</td>
+ <td>true</td>
+ </tr>
+ <tr>
+ <td>cache-file</td>
+ <td>String</td>
+ <td>This options specifies the file/directory path of the fop cache file.
+ This option can also be specified on the command-line using the -cache option.
+ This file is currently only used to cache font triplet information for future reference.</td>
+ <td>${base}/conf/fop.cache</td>
</tr>
<tr>
<td>renderers</td>
<td>(see text below)</td>
<td>Contains the configuration for each renderer. See below.</td>
+ <td>N/A</td>
</tr>
</table>
<p>
@@ -145,6 +182,12 @@
<source><![CDATA[
<fop version="1.0">
+ <!-- Strict user configuration -->
+ <strict-configuration>true</strict-configuration>
+
+ <!-- Strict FO validation -->
+ <strict-validation>true</strict-validation>
+
<!-- Base URL for resolving relative URLs -->
<base>./</base>
@@ -234,7 +277,23 @@
<output-profile>C:\FOP\Color\EuropeISOCoatedFOGRA27.icc</output-profile>
<fonts....
- </renderer>]]></source>
+ </renderer>]]></source>
+ <p>
+ Some people don't have high requirements on color fidelity but instead want the smallest
+ PDF file sizes possible. In this case it's possible to disable the default sRGB color space
+ which XSL-FO requires. This will cause RGB colors to be generated as device-specific RGB.
+ Please note that this option is unavailable (and will cause an error) if you enable
+ PDF/A or PDF/X functionality or if you specify an output profile. This setting will make the
+ PDF about 4KB smaller. To disable the sRGB color space add the following setting:
+ </p>
+ <source><![CDATA[
+ <renderer mime="application/pdf">
+ <filterList...
+
+ <disable-srgb-colorspace>true</disable-srgb-colorspace>
+
+ <fonts....
+ </renderer>]]></source>
</section>
<section id="ps-renderer">
<title>Special Settings for the PostScript Renderer</title>
@@ -268,7 +327,7 @@
offered by Java.
</p>
<p>
- Additionally, there are certain settings that control who the renderer handles various elements.
+ Additionally, there are certain settings that control how the renderer handles various elements.
</p>
<source><![CDATA[<renderer mime="application/vnd.hp-PCL">
<rendering>quality</rendering>
@@ -290,10 +349,10 @@
</section>
</section>
- <section>
- <title>When it does not work</title>
+ <section>
+ <title>When it does not work</title>
- <p>FOP searches the configuration file for the information it
+ <p>FOP searches the configuration file for the information it
expects, at the position it expects. When that information is not
present, FOP will not complain, it will just continue. When there is
other information in the file, FOP will not complain, it will just
@@ -301,14 +360,14 @@ ignore it. That means that when your configuration information is in
the file but in a different XML element, or in a different XML path,
than FOP expects, it will be silently ignored.</p>
- <p>Check the following possibilities:</p>
+ <p>Check the following possibilities:</p>
- <ul>
- <li>The format of the configuration file has changed
+ <ul>
+ <li>The format of the configuration file has changed
considerably between FOP 0.20.5 and FOP 1.0 and its beta versions. Did
you convert your file to the new format?</li>
- <li>The FOP distribution contains a schema for configuration
+ <li>The FOP distribution contains a schema for configuration
files, at src/foschema/fop-configuration.xsd. Did you validate your
configuration file against it? Add the following schema location to
the <code>schema</code> element:
@@ -323,13 +382,13 @@ and run the configuration file through a validating schema
parser. Note that the schema cannot detect all errors, and that it is
stricter about the order of some elements than FOP itself is.</li>
- <li>Run FOP in debug mode (command line option
+ <li>Run FOP in debug mode (command line option
<code>-d</code>). This makes FOP report which configuration
information it finds. Check if FOP finds what you expect.</li>
- </ul>
+ </ul>
- </section>
+ </section>
</body>
</document>
diff --git a/src/documentation/content/xdocs/0.93/embedding.xml b/src/documentation/content/xdocs/0.95/embedding.xml
index 00d57c75e..b2c802db7 100644
--- a/src/documentation/content/xdocs/0.93/embedding.xml
+++ b/src/documentation/content/xdocs/0.95/embedding.xml
@@ -166,7 +166,7 @@ try {
<title>Logging</title>
<p>
Logging is now a little different than it was in FOP 0.20.5. We've switched from
- Avalon Logging to <a href="ext:jakarta/commons/logging">Jakarta Commons Logging</a>.
+ Avalon Logging to <a href="ext:commons-logging">Jakarta Commons Logging</a>.
While with Avalon Logging the loggers were directly given to FOP, FOP now retrieves
its logger(s) through a statically available LogFactory. This is similar to the
general pattern that you use when you work with Apache Log4J directly, for example.
@@ -187,10 +187,10 @@ try {
which documents what we're going to build.
</note>
<p>
- By default, <a href="ext:jakarta/commons/logging">Jakarta Commons Logging</a> uses
+ By default, <a href="ext:commons-logging">Jakarta Commons Logging</a> uses
JDK logging (available in JDKs 1.4 or higher) as its backend. You can configure Commons
Logging to use an alternative backend, for example Log4J. Please consult the
- <a href="ext:jakarta/commons/logging">documentation for Jakarta Commons Logging</a> on
+ <a href="ext:commons-logging">documentation for Jakarta Commons Logging</a> on
how to configure alternative backends.
</p>
</section>
@@ -293,6 +293,13 @@ try {
</li>
<li>
<p>
+ The <strong>hyphenation base URL</strong> to use when resolving relative URLs for
+ hyphenation patterns. Example:
+ </p>
+ <source>fopFactory.setHyphenBaseURL("file:///C:/Temp/hyph");</source>
+ </li>
+ <li>
+ <p>
Disable <strong>strict validation</strong>. When disabled FOP is less strict about the rules
established by the XSL-FO specification. Example:
</p>
diff --git a/src/documentation/content/xdocs/0.95/extensions.xml b/src/documentation/content/xdocs/0.95/extensions.xml
new file mode 100644
index 000000000..483866e61
--- /dev/null
+++ b/src/documentation/content/xdocs/0.95/extensions.xml
@@ -0,0 +1,234 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
+<document>
+ <header>
+ <title>Standard FOP Extensions</title>
+ <version>$Revision$</version>
+ </header>
+ <body>
+ <p>
+ By "extension", we mean any data that can be placed in the input XML document that
+ is not addressed by the XSL-FO standard.
+ By having a mechanism for supporting extensions, FOP is able to add features that
+ are not covered in the specification.
+ </p>
+ <p>
+ The extensions documented here are included with FOP, and are automatically available
+ to you. If you wish to add an extension of your own to FOP, please see the
+ <a href="../dev/extensions.html">Developers' Extension Page</a>.
+ </p>
+ <note>All extensions require the correct use of an appropriate namespace in your input document.</note>
+ <section id="svg">
+ <title>SVG</title>
+ <p>
+ Please see the <a href="graphics.html#svg">SVG documentation</a> for more details.
+ </p>
+ </section>
+ <section id="fo-extensions">
+ <title>FO Extensions</title>
+ <section id="fox-namespace">
+ <title>Namespace</title>
+ <p>
+ By convention, FO extensions in FOP use the "fox" namespace prefix.
+ To use any of the FO extensions, add a namespace entry for
+ <code>http://xml.apache.org/fop/extensions</code> to the root element:
+ </p>
+ <source><![CDATA[<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xmlns:fox="http://xmlgraphics.apache.org/fop/extensions">]]></source>
+ </section>
+ <section id="bookmarks">
+ <title>PDF Bookmarks</title>
+ <p>
+ In previous versions of Apache FOP there was a <code>fox:outline</code> element
+ which was used to create outlines in PDF files. The redesigned code makes use
+ of the new <a href="http://www.w3.org/TR/xsl11/#fo_bookmark-tree">bookmark feature defined in the latest XSL 1.1 working draft</a>.
+ </p>
+ </section>
+ <section id="named-destinations">
+ <title>Anchors or Named Destinations</title>
+ <p>Use the fox:destination element to define "named destinations" inside a PDF document.
+These are useful as fragment identifiers, e.g. "http://server/document.pdf#anchor-name".
+fox:destination elements can be placed almost anywhere in the fo document, including a child of
+root, a block-level element, or an inline-level element.
+For the destination to actually work, it must correspond to an "id" attribute on some fo element
+within the document. In other words, the "id" attribute actually creates the "view" within the
+PDF document. The fox:destination simply gives that view an independent name.
+</p>
+ <source><![CDATA[<fox:destination internal-destination="table-of-contents"/>
+...
+<fo:block id="table-of-contents">Table of Contents</fo:block>]]></source>
+ <warning>It is possible that in some future release of FOP, <em>all </em>elements with
+"id" attributes will generate named-destinations, which will eliminate the need for
+fox:destination.</warning>
+ </section>
+ <section id="table-continue-label">
+ <title>Table Continuation Label</title>
+ <p>This extension element hasn't been reimplemented for the redesigned code, yet.</p>
+ <!--p>Use the fox:continued-label element to create content in table-header and
+table-footer cells that will appear only on pages after the first page that the table
+appears. fox:continued-label is itself inline content, and is a container of fo:inline
+content. This content will be laid out only if the table does not fit on a single page and flows
+to following pages. Here is an example of FO code creating such a table-header:</p>
+<source><![CDATA[<fo:table-header>
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:block>Header column 1 with continued label
+ <fox:continued-label><fo:inline> (cont.)</fo:inline></fox:continued-label>
+ </fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>Header column 2 with no continued label</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+</fo:table-header>]]></source-->
+ </section>
+ <section id="widow-orphan-content-limit">
+ <title>fox:orphan-content-limit and fox:widow-content-limit</title>
+ <p>
+ The two proprietary extension properties, fox:orphan-content-limit and
+ fox:widow-content-limit, are used to improve the layout of list-blocks and tables.
+ If you have a table with many entries, you don't want a single row to be left over
+ on a page. You will want to make sure that at least two or three lines are kept
+ together. The properties take an absolute length which specifies the area at the
+ beginning (fox:widow-content-limit) or at the end (fox:orphan-content-limit) of a
+ table or list-block. The properties are inherited and only have an effect on fo:table
+ and fo:list-block. An example: fox:widow-content-limit="3 * 1.2em" would make sure
+ the you'll have at least three lines (assuming line-height="1.2") together on a table
+ or list-block.
+ </p>
+ </section>
+ <section id="external-document">
+ <title>fox:external-document</title>
+ <note>
+ This feature is incomplete. Support for multi-page documents will be added shortly.
+ At the moment, only single-page images will work. And this will not work with RTF output.
+ </note>
+ <p>
+ This is a proprietary extension element which allows to add whole images as pages to
+ an FO document. For example, if you have a scanned document or a fax as multi-page TIFF
+ file, you can append or insert this document using the <code>fox:external-document</code>
+ element. Each page of the external document will create one full page in the target
+ format.
+ </p>
+ <p>
+ The <code>fox:external-document</code> element is structurally a peer to
+ <code>fo:page-sequence</code>, so wherever you can put an <code>fo:page-sequence</code>
+ you could also place a <code>fox:external-document</code>.
+ Therefore, the specified contents for <code>fo:root</code> change to:
+ </p>
+ <p>
+ <code>
+ (layout-master-set, declarations?, bookmark-tree?, (page-sequence|page-sequence-wrapper|fox:external-document|fox:destination)+)
+ </code>
+ </p>
+ <section>
+ <title>Specification</title>
+ <p>
+ The <code>fox:external-document</code> extension formatting object is used to specify
+ how to create a (sub-)sequence of pages within a document. The content of these pages
+ comes from the individual subimages/pages of an image or paged document (for example:
+ multi-page TIFF in the form of faxes or scanned documents, or PDF files). The
+ formatting object creates the necessary areas to display one image per page.
+ </p>
+ <p>
+ In terms of page numbers, the behaviour is the same as for
+ <code>fo:page-sequence</code>. The placement of the image inside the page is similar
+ to that of <code>fo:external-graphic</code> or <code>fo:instream-foreign-object</code>,
+ i.e. the viewport (and therefore the page size) is defined by either the intrinsic
+ size of the image or by the size properties that apply to this formatting object.
+ </p>
+ <p>Content: EMPTY</p>
+ <p>The following properties apply to this formatting object:</p>
+ <ul>
+ <li>(Common Accessibility Properties) (not implemented, yet)</li>
+ <li>(Common Aural Properties) (not implemented, yet)</li>
+ <li>block-progression-dimension</li>
+ <li>content-height</li>
+ <li>content-type</li>
+ <li>content-width</li>
+ <li>display-align</li>
+ <li>height</li>
+ <li>id</li>
+ <li>inline-progression-dimension</li>
+ <li>overflow</li>
+ <li>pages: &lt;page-set&gt; (see below) (not implemented, yet)</li>
+ <li>reference-orientation</li>
+ <li>scaling</li>
+ <li>scaling-method</li>
+ <li>src</li>
+ <li>text-align</li>
+ <li>width</li>
+ </ul>
+ <p>
+ Datatype "page-set": Value: auto | &lt;integer-range&gt;,
+ Default: "auto" which means all pages/subimages of the document.
+ &lt;integer-range&gt; allows values such as "7" or "1-3"
+ </p>
+ <note>
+ <code>fox:external-document</code> is not suitable for concatenating FO documents.
+ For this, XInclude is recommended.
+ </note>
+ </section>
+ </section>
+ <section id="transform">
+ <title>Free-form Transformation for fo:block-container</title>
+ <p>
+ For <code>fo:block-container</code> elements whose <code>absolute-position</code> set to
+ "absolute" or "fixed" you can use the extension attribute <code>fox:transform</code>
+ to apply a free-form transformation to the whole block-container. The content of the
+ <code>fox:transform</code> attribute is the same as for
+ <a href="http://www.w3.org/TR/SVG/coords.html#TransformAttribute">SVG's transform attribute</a>.
+ The transformation specified here is performed in addition to other implicit
+ transformations of the block-container (resulting from top, left and other properties)
+ and after them.
+ </p>
+ <p>
+ Examples: <code>fox:transform="rotate(45)"</code> would rotate the block-container
+ by 45 degrees clock-wise around its upper-left corner.
+ <code>fox:transform="translate(10000,0)"</code> would move the block-container to the
+ right by 10 points (=10000 millipoints, FOP uses millipoints internally!).
+ </p>
+ <note>
+ This extension attribute doesn't work for all output formats! It's currently only
+ supported for PDF, PS and Java2D-based renderers.
+ </note>
+ </section>
+ <section id="color-functions">
+ <title>Color functions</title>
+ <p>
+ XSL-FO supports specifying color using the rgb(), rgb-icc() and system-color() functions.
+ Apache FOP provides additional color functions for special use cases. Please note that
+ using these functions compromises the interoperability of an FO document.
+ </p>
+ <section id="color-function-cmyk">
+ <title>cmyk()</title>
+ <p><code>color cmyk(numeric, numeric, numeric, numeric)</code></p>
+ <p>
+ This function will construct a color in device-specific CMYK color space. The numbers
+ must be between 0.0 and 1.0. For output formats that don't support device-specific
+ color space the CMYK value is converted to an sRGB value.
+ </p>
+ </section>
+ </section>
+
+ </section>
+ </body>
+</document>
+
diff --git a/src/documentation/content/xdocs/0.95/fonts.xml b/src/documentation/content/xdocs/0.95/fonts.xml
new file mode 100644
index 000000000..423eaad11
--- /dev/null
+++ b/src/documentation/content/xdocs/0.95/fonts.xml
@@ -0,0 +1,410 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
+<document>
+ <header>
+ <title>Apache FOP: Fonts</title>
+ <version>$Revision$</version>
+ <authors>
+ <person name="Jeremias Märki" email=""/>
+ <person name="Tore Engvig" email=""/>
+ <person name="Adrian Cumiskey" email=""/>
+ <person name="Max Berger" email=""/>
+ </authors>
+ </header>
+ <body>
+ <section id="intro">
+ <title>Summary</title>
+ <p>The following table summarizes the font capabilities of the various FOP renderers:</p>
+ <table>
+ <tr>
+ <th>Renderer</th>
+ <th>Base-14</th>
+ <th>AWT/OS</th>
+ <th>Custom</th>
+ <th>Custom Embedding</th>
+ </tr>
+ <tr>
+ <td>PDF</td>
+ <td>yes</td>
+ <td>no</td>
+ <td>yes</td>
+ <td>yes</td>
+ </tr>
+ <tr>
+ <td>PostScript</td>
+ <td>yes</td>
+ <td>no</td>
+ <td>yes</td>
+ <td>yes</td>
+ </tr>
+ <tr>
+ <td>PCL</td>
+ <td>yes (modified)</td>
+ <td>yes (painted as bitmaps)</td>
+ <td>yes (painted as bitmaps)</td>
+ <td>no</td>
+ </tr>
+ <tr>
+ <td>AFP</td>
+ <td>no</td>
+ <td>no</td>
+ <td>yes</td>
+ <td>yes</td>
+ </tr>
+ <tr>
+ <td>Java2D/AWT/Bitmap</td>
+ <td>if available from OS</td>
+ <td>yes</td>
+ <td>yes</td>
+ <td>n/a (display only)</td>
+ </tr>
+ <tr>
+ <td>Print</td>
+ <td>if available from OS</td>
+ <td>yes</td>
+ <td>yes</td>
+ <td>controlled by OS printer driver</td>
+ </tr>
+ <tr>
+ <td>RTF</td>
+ <td>n/a (font metrics not needed)</td>
+ <td>n/a</td>
+ <td>n/a</td>
+ <td>n/a</td>
+ </tr>
+ <tr>
+ <td>TXT</td>
+ <td>yes (used for layout but not for output)</td>
+ <td>no</td>
+ <td>yes (used for layout but not for output)</td>
+ <td>no</td>
+ </tr>
+ <!--tr> NOT AVAILABLE
+ <td>MIF</td>
+ <td>n/a (font metrics not needed)</td>
+ <td>n/a</td>
+ <td>n/a</td>
+ <td>n/a</td>
+ </tr-->
+ <!--tr> NOT AVAILABLE
+ <td>SVG</td>
+ <td>if available from OS</td>
+ <td>yes</td>
+ <td>no</td>
+ <td>no</td>
+ </tr-->
+ <tr>
+ <td>XML</td>
+ <td>yes</td>
+ <td>no</td>
+ <td>yes</td>
+ <td>n/a</td>
+ </tr>
+ </table>
+ </section>
+ <section>
+ <title>Base-14 Fonts</title>
+ <p>
+ The Adobe PostScript and PDF Specification specify a set of 14 fonts that must be
+ available to every PostScript interpreter and PDF reader:
+ Helvetica (normal, bold, italic, bold italic),
+ Times (normal, bold, italic, bold italic),
+ Courier (normal, bold, italic, bold italic),
+ Symbol and ZapfDingbats.
+ </p>
+ <p>
+ Please note that recent versions of Adobe Acrobat Reader replace
+ "Helvetica" with "Arial" and "Times" with "Times New Roman" internally.
+ GhostScript replaces "Helvetica" with "Nimbus Sans L" and "Times" with
+ "Nimbus Roman No9 L". Other document viewers may do similar font
+ substitutions. If you need to make sure that there are no such
+ substitutions, you need to specify an explicit font and embed it in
+ the target document.
+ </p>
+ </section>
+ <section>
+ <title>Missing Fonts</title>
+ <p>
+ When FOP does not have a specific font at its disposal (because it's
+ not installed in the operating system or set up in FOP's configuration),
+ the font is replaced with "any". "any" is internally mapped to the
+ Base-14 font "Times" (see above).
+ </p>
+ </section>
+ <section id="awt">
+ <title>Java2D/AWT/Operating System Fonts</title>
+ <p>
+ The Java2D family of renderers (Java2D, AWT, Print, TIFF, PNG), use the
+ Java AWT subsystem for font metric information. Through operating system
+ registration, the AWT subsystem knows what fonts are available on the system,
+ and the font metrics for each one.
+ </p>
+ <p>
+ When working with one of these output formats and you're missing a font, just
+ install it in your operating system and they should be available for these
+ renderers. Please note that this is not true for other output formats such as
+ PDF or PostScript.
+ </p>
+ </section>
+
+ <section id="custom">
+ <title>Custom Fonts</title>
+ <p>
+ Support for custom fonts is highly output format dependent (see above table).
+ This section shows how to add Type 1 and TrueType fonts to the PDF, PostScript and
+ Java2D-based renderers. Other renderers (like AFP) support other font formats. Details
+ in this case can be found on the page about <a href="output.html">output formats</a>.
+ </p>
+ <p>
+ Prior to FOP version 0.94, it was always necessary to create an XML font metrics file
+ if you wanted to add a custom font. This unconvenient step has been removed and in
+ addition to that, FOP supports auto-registration of fonts, i.e. FOP can find fonts
+ installed in your operating system or can scan user-specified directories for fonts.
+ Font registration via XML font metrics file is still supported and is still necessary
+ if you want to use a TrueType Collection (*.ttc). Direct support for TrueType
+ collections may be added later. Furthermore, the XML font metrics files are still
+ required if you don't want to embed, but only reference a font.
+ </p>
+ <p>
+ Basic information about fonts can be found at:
+ </p>
+ <ul>
+ <li><a href="http://partners.adobe.com/asn/developer/type/ftypes.html">Adobe font types</a></li>
+ <li><a href="http://partners.adobe.com/asn/developer/technotes/fonts.html">Adobe Font Technote</a></li>
+ </ul>
+ </section>
+
+ <section id="basics">
+ <title>Basic font configuration</title>
+ <p>
+ If you want FOP to use custom fonts, you need to tell it where to find them. This
+ is done in the configuration file and once per renderer (because each output format
+ is a little different). In the basic form, you can either tell FOP to find your
+ operating system fonts or you can specify directories that it will search for
+ support fonts. These fonts will then automatically be registered.
+ </p>
+ <source><![CDATA[
+<fonts>
+ <!-- register all the fonts found in a directory -->
+ <directory>C:\MyFonts1</directory>
+
+ <!-- register all the fonts found in a directory
+ and all of its sub directories (use with care) -->
+ <directory recursive="true">C:\MyFonts2</directory>
+
+ <!-- automatically detect operating system installed fonts -->
+ <auto-detect/>
+</fonts>]]></source>
+ <note>
+ Review the documentation for <a href="configuration.html">FOP Configuration</a>
+ for instructions on making the FOP configuration available to FOP when it runs.
+ Otherwise, FOP has no way of finding your custom font information. It is currently
+ not possible to easily configure fonts from Java code.
+ </note>
+ </section>
+
+ <section id="advanced">
+ <title>Advanced font configuration</title>
+ <p>
+ The instructions found above should be sufficient for most users. Below are some
+ additional instructions in case the basic font configuration doesn't lead to
+ the desired results.
+ </p>
+ <section id="type1-metrics">
+ <title>Type 1 Font Metrics</title>
+ <p>FOP includes PFMReader, which reads the PFM file that normally comes with a Type 1 font, and generates an appropriate font metrics file for it.
+ To use it, run the class org.apache.fop.fonts.apps.PFMReader:</p>
+ <p>Windows:</p>
+ <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
+ org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
+ <p>Unix:</p>
+ <source>java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar
+ org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
+ <p>PFMReader [options]:</p>
+ <ul>
+ <li><strong>-fn &lt;fontname&gt;</strong> By default, FOP uses the fontname from the
+ .pfm file when embedding the font. Use the "-fn" option to override this name with one you have
+ chosen. This may be useful in some cases to ensure that applications using the output document
+ (Acrobat Reader for example) use the embedded font instead of a local font with the same
+ name.</li>
+ </ul>
+ <note>The classpath in the above example has been simplified for readability.
+ You will have to adjust the classpath to the names of the actual JAR files in the lib directory.
+ xml-apis.jar, xercesImpl.jar, xalan.jar and serializer.jar are not necessary for JDK version 1.4 or later.</note>
+ <note>The tool will construct some values (FontBBox, StemV and ItalicAngle) based on assumptions and calculations which are only an approximation to the real values.
+ FontBBox and Italic Angle can be found in the human-readable part of the PFB file or in the AFM file.
+ The PFMReader tool does not yet interpret PFB or AFM files, so if you want to be correct, you may have to adjust the values in the XML file manually.
+ The constructed values however appear to have no visible influence.</note>
+ </section>
+ <section id="truetype-metrics">
+ <title>TrueType Font Metrics</title>
+ <p>FOP includes TTFReader, which reads the TTF file and generates an appropriate font metrics file for it.
+ Use it in a similar manner to PFMReader.
+ For example, to create such a metrics file in Windows from the TrueType font at c:\myfonts\cmr10.ttf:</p>
+ <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
+ org.apache.fop.fonts.apps.TTFReader [options]
+ C:\myfonts\cmr10.ttf ttfcm.xml</source>
+ <p>TTFReader [options]:</p>
+ <ul>
+ <li><strong>-d &lt;DEBUG | INFO &gt;</strong> Sets the debug level (default is
+ INFO).</li>
+ <li><strong>-fn &lt;fontname&gt;</strong> Same as for PFMReader.</li>
+ <li><strong>-ttcname &lt;fontname&gt;</strong> If you're reading data from a
+ TrueType Collection (.ttc file) you must specify which font from the collection you will read
+ metrics from.
+ If you read from a .ttc file without this option, the fontnames will be listed for you.</li>
+ <li><strong>-enc ansi</strong> Creates a WinAnsi-encoded font metrics file.
+ Without this option, a CID-keyed font metrics file is created.
+ The table below summarizes the differences between these two encoding options as currently
+ used within FOP.
+ Please note that this information only applies to TrueType fonts and TrueType collections:</li>
+ </ul>
+ <table id="ttf-encoding">
+ <tr>
+ <th>Issue</th>
+ <th>WinAnsi</th>
+ <th>CID-keyed</th>
+ </tr>
+ <tr>
+ <td>Usable Character Set</td>
+ <td>Limited to WinAnsi character set, which is roughly equivalent to iso-8889-1.</td>
+ <td>Limited only by the characters in the font itself.</td>
+ </tr>
+ <tr>
+ <td>Embedding the Font</td>
+ <td>Optional.</td>
+ <td>Mandatory. Not embedding the font produces invalid PDF documents.</td>
+ </tr>
+ </table>
+ <warning>
+ You may experience failures with certain TrueType fonts, especially if they don't contain
+ the so-called Unicode "cmap" table. TTFReader can currently not deal with font like this.
+ </warning>
+ </section>
+ <section id="truetype-collections-metrics">
+ <title>TrueType Collections Font Metrics</title>
+ <p>TrueType collections (.ttc files) contain more than one font.
+ To create metrics files for these fonts, you must specify which font in the collection should be generated, by using the "-ttcname" option with the TTFReader.</p>
+ <p>To get a list of the fonts in a collection, just start the TTFReader as if it were a normal TrueType file (without the -ttcname option).
+ It will display all of the font names and exit with an Exception.</p>
+ <p>Here is an example of generating a metrics file for a .ttc file:</p>
+ <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
+ org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho"
+ msmincho.ttc msminch.xml</source>
+ </section>
+ <section id="register">
+ <title>Register Fonts with FOP</title>
+ <p>You must tell FOP how to find and use the font metrics files by registering them in the <a href="configuration.html">FOP Configuration</a>. Add entries for your custom fonts, regardless of font type, to the configuration file in a manner similar to the following:</p>
+ <source><![CDATA[
+<fonts>
+ <!-- register a particular font -->
+ <font metrics-url="file:///C:/myfonts/FTL_____.xml" kerning="yes"
+ embed-url="file:///C:/myfonts/FTL_____.pfb">
+ <font-triplet name="FrutigerLight" style="normal" weight="normal"/>
+ </font>
+
+ <!-- register all the fonts found in a directory -->
+ <directory>C:\MyFonts1</directory>
+
+ <!-- register all the fonts found in a directory
+ and all of its sub directories (use with care) -->
+ <directory recursive="true">C:\MyFonts2</directory>
+
+ <!-- automatically detect operating system installed fonts -->
+ <auto-detect/>
+</fonts>]]></source>
+ <ul>
+ <li>
+ URLs are used to access the font metric and font files.
+ Relative URLs are resolved relative to the font-base property (or base) if available.
+ See <a href="configuration.html">FOP: Configuration</a> for more information.
+ </li>
+ <li>The "metrics-url" attribute is generally not necessary except if you run into problems with certain fonts.</li>
+ <li>Either an "embed-url" or a "metrics-url" must be specified for font tag configurations.</li>
+ <li>The font "kerning" attribute is optional. Default is "true".</li>
+ <li>If embedding is off (i.e. embed-url is not set), the output will position the text correctly (from the metrics file), but it will not be displayed or printed correctly unless the viewer has the applicable font available to their local system.</li>
+ <li>When setting the "embed-url" attribute for Type 1 fonts, be sure to specify the PFB (actual font data), not PFM (font metrics) file that you used to generate the XML font metrics file.</li>
+ <li>The fonts "directory" tag can be used to register fonts contained within a single or list of directory paths. The "recursive" attribute can be specified to recursively add fonts from all sub directories.</li>
+ <li>The fonts "auto-detect" tag can be used to automatically register fonts that are found to be installed on the native operating system.</li>
+ <li>Fonts registered with "font" tag configurations override fonts found by means of "directory" tag definitions.</li>
+ <li>Fonts found as a result of a "directory" tag configuration override fonts found as a result of the "auto-detect" tag being specified.</li>
+ <li>
+ If relative URLs are specified, they are evaluated relative to the value of the
+ "font-base" setting. If there is no "font-base" setting, the fonts are evaluated
+ relative to the base directory.
+ </li>
+ </ul>
+ <!--note>Cocoon users will need to setup the config, see FOPSerializer for more information.</note-->
+ </section>
+ <section id="autodetect">
+ <title>Auto-Detect and auto-embedd feature</title>
+ <p>When the "auto-detect" flag is set in the configuration, FOP will automatically search for fonts in the default paths for your operating system.</p>
+ <p>FOP will also auto-detect fonts which are available in the classpath, if they are described as "application/x-font" in the MANIFEST.MF file. For example, if your .jar file contains font/myfont.ttf:</p>
+ <source>Manifest-Version: 1.0
+
+ Name: font/myfont.ttf
+ Content-Type: application/x-font</source>
+ <p>This feature allows you to create JAR files containing fonts. The JAR files can be added to fop by providem them in the classpath, e.g. copying them into the lib/ directory.</p>
+ </section>
+ <section id="embedding">
+ <title>Embedding</title>
+ <note>The PostScript renderer does not yet support TrueType fonts, but can embed Type 1 fonts.</note>
+ <note>The font is simply embedded into the PDF file, it is not converted.</note>
+ <p>Font embedding is enabled in the userconfig.xml file and controlled by the embed-url attribute.
+ If you don't specify the embed-url attribute the font will not be embedded, but will only be referenced.</p>
+ <warning>
+ Omitting the embed-url attribute for CID-encoded TrueType fonts will currently produce invalid
+ PDF files! If you create the XML font metric file using the "-enc ansi" option, you can omit
+ the embed-url attribute for TrueType fonts but you're restricted to the WinAnsi character set.
+ </warning>
+ <p>When FOP embeds a font, it adds a prefix to the fontname to ensure that the name will not match the fontname of an installed font.
+ This is helpful with older versions of Acrobat Reader that preferred installed fonts over embedded fonts.</p>
+ <p>When embedding PostScript fonts, the entire font is always embedded.</p>
+ <p>When embedding TrueType fonts (ttf) or TrueType Collections (ttc), a subset of the
+ original font, containing only the glyphs used, is embedded in the output document.</p>
+ </section>
+ <!-- The following section should no longer be required
+ <section id="embedding-base14">
+ <title>Explicitly embedding the base 14 fonts</title>
+ <p>
+ There are cases where you might want to force the embedding of one or more of the base 14 fonts that
+ can normally be considered available on the target platform (viewer, printer). One of these cases is
+ <a href="pdfa.html">PDF/A</a> which mandates the embedding of even the base 14 fonts. Embedding a font such as Helvetica or
+ Courier is straight-forward. The "Symbol" and "ZapfDingbats" fonts, however, currently present a
+ problem because FOP cannot correctly determine the encoding of these two single-byte fonts through
+ the PFM file. FOP now correctly interprets the "encoding" value in the XML font metrics file, but the
+ PFMReader application writes "UnknownEncoding" to the generated XML file. In order to embed "Symbol"
+ and "ZapfDingbats" you have to manually change the XML font metrics file and specify "SymbolEncoding"
+ or "ZapfdingbatsEncoding" encoding respectively as the value for the "encoding" element.
+ </p>
+ <p>Example:</p>
+ <source><![CDATA[
+<?xml version="1.0" encoding="UTF-8"?>
+<font-metrics type="TYPE1">
+ <font-name>Symbol</font-name>
+ <embed/>
+ <encoding>SymbolEncoding</encoding>
+ <cap-height>673</cap-height>
+ <x-height>766</x-height>
+ [..]]]></source>
+ </section-->
+ </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/0.93/fotree/disabled-testcases.xml b/src/documentation/content/xdocs/0.95/fotree/disabled-testcases.xml
index 196eafcc4..f6f78dcf7 100644
--- a/src/documentation/content/xdocs/0.93/fotree/disabled-testcases.xml
+++ b/src/documentation/content/xdocs/0.95/fotree/disabled-testcases.xml
@@ -18,11 +18,6 @@
<!-- $Id$ -->
<disabled-testcases>
<testcase>
- <name>demo test failure</name>
- <file>demo-test-failure.fo</file>
- <description></description>
- </testcase>
- <testcase>
<name>Markers and core function evaluation</name>
<file>from-table-column_marker.fo</file>
<description>The code currently evaluates this function according to the column in which the
diff --git a/src/documentation/content/xdocs/0.95/graphics.xml b/src/documentation/content/xdocs/0.95/graphics.xml
new file mode 100644
index 000000000..31e54d8fd
--- /dev/null
+++ b/src/documentation/content/xdocs/0.95/graphics.xml
@@ -0,0 +1,551 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
+<document>
+ <header>
+ <title>Apache FOP: Graphics Formats</title>
+ <version>$Revision$</version>
+ </header>
+ <body>
+ <section id="introduction">
+ <title>Introduction</title>
+ <p>
+ After the Apache FOP 0.94 release, the image handling subsystem has been rewritten in
+ order to improve the range of supported images and image subtypes, to lower the
+ overall memory consumption when handling images, to produce smaller output files and to
+ increase the performance in certain areas. Of course, this causes a few changes most of
+ which the user will probably not notice. The most important changes are:
+ </p>
+ <ul>
+ <li>
+ The image libraries Jimi and JAI are no longer supported. Instead, Apache FOP uses the
+ Image I/O API that was introduced with Java 1.4 for all bitmap codecs.
+ </li>
+ <li>
+ Some bitmap images are no longer converted to a standardized 24 bit RGB image but are
+ instead handled in their native format.
+ </li>
+ <li>
+ A plug-in mechanism offers a possibility to add support for new formats without changing
+ the FOP's source code.
+ </li>
+ </ul>
+ <p>
+ The actual <a href="http://xmlgraphics.apache.org/commons/image-loader.html">image loading framework</a>
+ no longer resides in Apache FOP, but was instead placed in
+ <a href="ext:xmlgraphics.apache.org/commons/">XML Graphics Commons</a>.
+ </p>
+ </section>
+ <section id="support-overview">
+ <title>Overview of Graphics Support</title>
+ <p>
+ The table below summarizes the <em>theoretical</em> support for graphical formats
+ within FOP. In other words, within the constraints of the limitations listed here,
+ these formats <em>should</em> work. However, many of them have not been tested,
+ and there may be limitations that have not yet been discovered or documented.
+ The packages needed to support some formats are not included in the FOP distribution
+ and must be installed separately. Follow the links in the "Support Through" columns
+ for more details.
+ </p>
+ <table>
+ <tr>
+ <th rowspan="2">Format</th>
+ <th rowspan="2">Type</th>
+ <th colspan="3">Support Through</th>
+ </tr>
+ <tr>
+ <th><a href="#native">Apache FOP (native)</a></th>
+ <th><a href="#batik">Apache Batik</a></th>
+ <th><a href="#imageio">Image I/O</a></th>
+ </tr>
+ <tr>
+ <td><a href="#bmp">BMP</a> (Microsoft Windows Bitmap)</td>
+ <td>bitmap</td>
+ <td></td>
+ <td></td>
+ <td>X [1]</td>
+ </tr>
+ <tr>
+ <td><a href="#emf">EMF</a> (Windows Enhanced Metafile)</td>
+ <td>vector (with embedded bitmaps)</td>
+ <td>(X)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><a href="#eps">EPS</a> (Encapsulated PostScript)</td>
+ <td>metafile (both bitmap and vector), most frequently used for vector drawings</td>
+ <td>(X)</td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GIF (Graphics Interchange Format)</td>
+ <td>bitmap</td>
+ <td></td>
+ <td></td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#jpeg">JPEG</a> (Joint Photographic Experts Group)</td>
+ <td>bitmap</td>
+ <td>(X)</td>
+ <td></td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#png">PNG</a> (Portable Network Graphic)</td>
+ <td>bitmap</td>
+ <td></td>
+ <td></td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#svg">SVG</a> (Scalable Vector Graphics)</td>
+ <td>vector (with embedded bitmaps)</td>
+ <td></td>
+ <td>X</td>
+ <td></td>
+ </tr>
+ <tr>
+ <td><a href="#tiff">TIFF</a> (Tag Image Format File)</td>
+ <td>bitmap</td>
+ <td>(X)</td>
+ <td></td>
+ <td>X [1]</td>
+ </tr>
+ <tr>
+ <td><a href="#wmf">WMF</a> (Windows Metafile)</td>
+ <td>vector (with embedded bitmaps)</td>
+ <td></td>
+ <td>(X)</td>
+ <td></td>
+ </tr>
+ </table>
+ <p>
+ Legend:
+ </p>
+ <ul>
+ <li>"(X)" means restricted support. Please see the details below.</li>
+ <li>
+ [1]: Requires the presence of <a href="http://jai-imageio.dev.java.net/">JAI Image I/O Tools</a>
+ (or an equivalent Image I/O compatible codec) in the classpath. JAI Image I/O Tools also
+ adds support for JPEG 2000, WBMP, RAW and PNM. Other Image I/O codecs may provide
+ support for additional formats.
+ </li>
+ </ul>
+ <note>
+ <a href="http://jai-imageio.dev.java.net/">JAI Image I/O Tools</a> is not the same as the
+ <a href="http://java.sun.com/javase/technologies/desktop/media/jai/">JAI library</a>! The
+ former simply exposes JAI's codecs using the Image&nbsp;I/O API but does not include all
+ the image manipulation functionality.
+ </note>
+ <section id="format-map">
+ <title>Map of supported image formats by output format</title>
+ <p>
+ Not all image formats are supported for all output formats! For example, while you can
+ use EPS (Encapsulated PostScript) files when you generate PostScript output, this format
+ will not be supported by any other output format. Here's an overview of which image
+ formats are supported by which output format:
+ </p>
+ <table>
+ <tr>
+ <th>Image Format</th>
+ <th>PDF</th>
+ <th>PostScript</th>
+ <th>Java2D, PNG, TIFF, AWT</th>
+ <th>PCL</th>
+ <th>AFP</th>
+ <th>RTF</th>
+ </tr>
+ <tr>
+ <td><a href="#bmp">BMP</a> (Microsoft Windows Bitmap)</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#emf">EMF</a> (Windows Enhanced Metafile)</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td>X [1]</td>
+ </tr>
+ <tr>
+ <td><a href="#eps">EPS</a> (Encapsulated PostScript)</td>
+ <td></td>
+ <td>X [1]</td>
+ <td></td>
+ <td></td>
+ <td></td>
+ <td></td>
+ </tr>
+ <tr>
+ <td>GIF (Graphics Interchange Format)</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#jpeg">JPEG</a> (Joint Photographic Experts Group)</td>
+ <td>X [1]</td>
+ <td>X [1]</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X [1]</td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#png">PNG</a> (Portable Network Graphic)</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#svg">SVG</a> (Scalable Vector Graphics)</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#tiff">TIFF</a> (Tag Image Format File)</td>
+ <td>X [2]</td>
+ <td>X [2]</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X [2]</td>
+ <td>X</td>
+ </tr>
+ <tr>
+ <td><a href="#wmf">WMF</a> (Windows Metafile)</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ <td>X</td>
+ </tr>
+ </table>
+ <p>
+ Legend:
+ </p>
+ <ul>
+ <li>
+ [1]: Supported without the need to decode the image.
+ </li>
+ <li>
+ [2]: Supported without the need to decode the image, but only for certain subtypes.
+ </li>
+ </ul>
+ </section>
+ </section>
+ <section id="packages">
+ <title>Graphics Packages</title>
+ <section id="native">
+ <title>XML Graphics Commons Native</title>
+ <p>
+ <a href="ext:xmlgraphics.apache.org/commons">XML Graphics Commons</a> supports a number
+ of graphic file formats natively as basic functionality: all bitmap formats for which
+ there are Image I/O codecs available (JPEG, PNG, GIF, TIFF, etc.), EPS and EMF.
+ </p>
+ </section>
+ <section id="fop-native">
+ <title>FOP Native</title>
+ <p>
+ FOP has no native image plug-ins for the image loading framework of its own but currently
+ hosts the Batik-dependent SVG and WMF plug-ins until they can be moved to
+ <a href="ext:xmlgraphics.apache.org/batik">Apache Batik</a>.
+ </p>
+ </section>
+ <section id="batik">
+ <title>Apache Batik</title>
+ <p>
+ <a href="ext:xmlgraphics.apache.org/batik">Apache Batik</a> will later receive the
+ SVG and WMF plug-ins for the image loading framework that are currently hosted inside
+ FOP.
+ </p>
+ <p>
+ Current FOP distributions include a distribution of the
+ <a class="fork" href="ext:xmlgraphics.apache.org/batik">Apache Batik</a>.
+ Because Batik's API changes frequently, it is highly recommended that you use the
+ version that ships with FOP, at least when running FOP.
+ </p>
+ <warning>Batik must be run in a graphical environment.</warning>
+ <p>
+ Batik must be run in a graphical environment.
+ It uses AWT classes for rendering SVG, which in turn require an X server on Unixish
+ systems. If you run a server without X, or if you can't connect to the X server due to
+ security restrictions or policies (a so-called "headless" environment), SVG rendering
+ will fail.
+ </p>
+ <p>Here are some workarounds:</p>
+ <ul>
+ <li>
+ Start Java with the <code>-Djava.awt.headless=true</code> command line option.
+ </li>
+ <li>
+ Install an X server which provides an in-memory framebuffer without actually using a
+ screen device or any display hardware. One example is Xvfb.
+ </li>
+ <li>
+ Install a toolkit which emulates AWT without the need for an underlying X server. One
+ example is the <a href="http://www.eteks.com/pja/en">PJA toolkit</a>, which is free
+ and comes with detailed installation instructions.
+ </li>
+ </ul>
+ </section>
+ </section>
+ <section id="image-formats">
+ <title>Details on image formats</title>
+ <section id="bmp">
+ <title>BMP</title>
+ <p>
+ BMP images are supported through an Image I/O codec. There may be limitations of the
+ codec which are outside the control of Apache FOP.
+ </p>
+ </section>
+ <section id="emf">
+ <title>EMF</title>
+ <p>
+ Windows Enhanced Metafiles (EMF) are only supported in RTF output where they are
+ embedded without decoding.
+ </p>
+ </section>
+ <section id="eps">
+ <title>EPS</title>
+ <p>Apache FOP allows to use EPS files when generating PostScript output only.</p>
+ <p>
+ Other output targets can't be supported at the moment because
+ FOP lacks a PostScript interpreter. Furthermore, FOP is currently not able
+ to parse the preview bitmaps sometimes contained in EPS files.
+ </p>
+ </section>
+ <section id="gif">
+ <title>GIF</title>
+ <p>
+ GIF images are supported through an Image&nbsp;I/O codec. Transparency is supported but
+ not guaranteed to work with every output format.
+ </p>
+ </section>
+ <section id="jpeg">
+ <title>JPEG</title>
+ <p>
+ FOP native support (i.e. the handling of undecoded images) of JPEG does not include all
+ variants, especially those containing unusual color lookup tables and color profiles.
+ If you have trouble with a JPEG image in FOP, try opening it with an image processing
+ program (such as Photoshop or Gimp) and then saving it. Specifying 24-bit color output
+ may also help. For the PDF and PostScript renderers most JPEG images can be passed
+ through without decompression. User reports indicate that grayscale, RGB, and
+ CMYK color spaces are all rendered properly. However, for other output formats, the
+ JPEG images have to be decompressed. Tests have shown that there are some limitation
+ in some Image&nbsp;I/O codecs concerning images in the CMYK color space. Work-arounds are
+ in place but may not always work as expected.
+ </p>
+ </section>
+ <section id="png">
+ <title>PNG</title>
+ <p>
+ PNG images are supported through an Image&nbsp;I/O codec. Transparency is supported but
+ not guaranteed to work with every output format.
+ </p>
+ </section>
+ <section id="svg">
+ <title>SVG</title>
+ <section id="svg-intro">
+ <title>Introduction</title>
+ <p>FOP uses <a href="#batik"> Apache Batik</a> for SVG support.
+ This format can be handled as an <code>fo:instream-foreign-object</code> or in a separate
+ file referenced with <code>fo:external-graphic</code>.</p>
+ <note>
+ Batik's SVG Rasterizer utility may also be used to convert standalone SVG
+ documents into PDF. For more information please see the
+ <a href="http://xmlgraphics.apache.org/batik/svgrasterizer.html">SVG Rasterizer documentation</a>
+ on the Batik site.
+ </note>
+ </section>
+ <section id="svg-pdf-graphics">
+ <title>Placing SVG Graphics into PDF</title>
+ <p>
+ The SVG is rendered into PDF by using PDF commands to draw and fill
+ lines and curves. This means that the graphical objects created with
+ this remain as vector graphics. The same applies to PostScript output.
+ For other output formats the SVG graphic may be converted to a bitmap
+ image.
+ </p>
+ <p>
+ There are a number of SVG things that cannot be converted directly into
+ PDF. Parts of the graphic such as effects, patterns and images are inserted
+ into the PDF as a raster graphic. The resolution of these raster images can
+ be controlled through the "target resolution" setting in the
+ <a href="configuration.html">configuration</a>.</p>
+ <p>
+ Currently transparency is limited in PDF so many SVG images that
+ contain effects or graphics with transparent areas may not be displayed
+ correctly.
+ </p>
+ </section>
+ <section id="svg-pdf-text">
+ <title>Placing SVG Text into PDF and PostScript</title>
+ <p>If possible, Batik will use normal PDF or PostScript text when inserting text. It does
+ this by checking if the text can be drawn normally and the font is
+ supported. This example svg <a href="../dev/svg/text.svg">text.svg</a> /
+ <!--link href="../dev/svg/text.pdf"-->text.pdf<!--/link-->
+ shows how various types and effects with text are handled.
+ Note that tspan and outlined text are not yet implemented.</p>
+ <p>
+ Otherwise, text is converted and drawn as a set of shapes by Batik, using the
+ stroking text painter. This means that a typical character will
+ have about 10 curves (each curve consists of at least 20 characters).
+ This can make the output files large and when it is viewed the
+ viewer may not normally draw those fine curves very well (In Adobe Acrobat, turning on
+ "Smooth Line Art" in the preferences will fix this). Copy/paste functionality
+ will not be supported in this case.
+ If the text is inserted into the output file using the inbuilt text commands
+ it will use a single character.
+ </p>
+ <p>
+ Note that because SVG text can be rendered as either text or a vector graphic, you
+ may need to consider settings in your viewer for both. The Acrobat viewer has both
+ "smooth line art" and "smooth text" settings that may need to be set for SVG images
+ to be displayed nicely on your screen (see Edit / Preferences / Display).
+ This setting will not affect the printing of your document, which should be OK in
+ any case, but will only affect the quality of the screen display.</p>
+ </section>
+ <section id="svg-scaling">
+ <title>Scaling</title>
+ <p>
+ Currently, SVG images are rendered with the dimensions specified <em>in the SVG
+ file</em>, within the viewport specified in the fo:external-graphic element.
+ For everything to work properly, the two should be equal. The SVG standard leaves
+ this issue as an implementation detail. Additional scaling options are available
+ through XSL-FO means.
+ </p>
+ <p>
+ If you use pixels to specify the size of an SVG graphic the "source resolution" setting
+ in the <a href="configuration.html">configuration</a> will be used to determine the
+ size of a pixel. The use of pixels to specify sizes is discouraged as they may
+ be interpreted differently in different environments.
+ </p>
+ </section>
+ <section id="svg-problems">
+ <title>Known Problems</title>
+ <ul>
+ <li>
+ Soft mask transparency is combined with white so that it looks better
+ on PDF 1.3 viewers but this causes the soft mask to be slightly lighter
+ or darker on PDF 1.4 viewers.
+ </li>
+ <li>
+ There is some problem with a gradient inside a pattern which may cause a PDF
+ error when viewed in Acrobat 5.
+ </li>
+ <li>
+ Text is not always handled correctly, it may select the wrong font
+ especially if characters have multiple fonts in the font list.
+ </li>
+ <li>
+ Uniform transparency for images and other SVG elements that are converted
+ into a raster graphic are not drawn properly in PDF. The image is opaque.
+ </li>
+ </ul>
+ </section>
+ </section>
+ <section id="tiff">
+ <title>TIFF</title>
+ <p>
+ FOP can embed TIFF images without decompression into PDF, PostScript and AFP if they
+ have either CCITT T.4, CCITT T.6, or JPEG compression. Otherwise, a TIFF-capable
+ Image&nbsp;I/O codec is necessary for decoding the image.
+ </p>
+ <p>
+ There may be some limitation concerning images in the CMYK color space.
+ </p>
+ </section>
+ <section id="wmf">
+ <title>WMF</title>
+ <p>
+ Windows Metafiles (WMF) are supported through classes in
+ <a href="ext:xmlgraphics.apache.org/batik">Apache Batik</a>. At the moment, support
+ for this format is experimental and may not always work as expected.
+ </p>
+ </section>
+ </section>
+ <section id="resolution">
+ <title>Graphics Resolution</title>
+ <p>
+ Some bitmapped image file formats store a dots-per-inch (dpi) or other resolution
+ values. FOP tries to use this resolution information whenever possible to determine
+ the image's intrinsic size. This size is used during the layout process when it is not
+ superseded by an explicit size on fo:external-graphic (content-width and content-height
+ properties).
+ </p>
+ <p>
+ Please note that not all images contain resolution information. If it's not available
+ the source resolution set on the FopFactory (or through the user configuration XML) is used.
+ The default here is 72 dpi.
+ </p>
+ <p>
+ Bitmap images are generally embedded into the output format at their original resolution
+ (as is). No resampling of the image is performed. Explicit resampling is on our wishlist,
+ but hasn't been implemented, yet. Bitmaps included in SVG graphics may be resampled to
+ the resolution specified in the "target resolution" setting in the
+ <a href="configuration.html">configuration</a> if SVG filters are applied. This can be
+ used as a work-around to resample images in FO documents.
+ </p>
+ </section>
+ <section id="page-selection">
+ <title>Page selection for multi-page formats</title>
+ <p>
+ Some image formats such as TIFF support multiple pages/sub-images per file. You can
+ select a particular page using a special URI fragment in the form:
+ &lt;uri&gt;#page=&lt;nr&gt;
+ (for example: <code>http://localhost/images/myimage.tiff#page=3</code>)
+ </p>
+ </section>
+ <section id="caching">
+ <title>Image caching</title>
+ <p>
+ FOP caches images between runs. There is one cache per FopFactory instance. The URI is
+ used as a key to identify images which means that when a particular URI appears again,
+ the image is taken from the cache. If you have a servlet that generates a different
+ image each time it is called with the same URI you need to use a constantly
+ changing dummy parameter on the URI to avoid caching.
+ </p>
+ <p>
+ The image cache has been improved considerably in the redesigned code. Therefore, a
+ resetCache() method like in earlier versions of FOP has become unnecessary. If you
+ still experience OutOfMemoryErrors, please notify us.
+ </p>
+ </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/0.93/hyphenation.xml b/src/documentation/content/xdocs/0.95/hyphenation.xml
index ed97c6868..ed97c6868 100644
--- a/src/documentation/content/xdocs/0.93/hyphenation.xml
+++ b/src/documentation/content/xdocs/0.95/hyphenation.xml
diff --git a/src/documentation/content/xdocs/0.93/index.xml b/src/documentation/content/xdocs/0.95/index.xml
index 3542e1d5f..3bc718b34 100644
--- a/src/documentation/content/xdocs/0.93/index.xml
+++ b/src/documentation/content/xdocs/0.95/index.xml
@@ -19,22 +19,22 @@
<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V2.0//EN" "http://forrest.apache.org/dtd/document-v20.dtd">
<document>
<header>
- <title>Apache FOP Version 0.93</title>
+ <title>Apache FOP Version 0.95</title>
<version>$Revision$</version>
</header>
<body>
<section id="intro">
<title>Introduction</title>
<p>
- The Apache FOP team is proud to present to you this production quality release. It has taken
- over three years to get this far and over two years without a new release from the FOP
- project. We're still in the process of adding new features. We welcome any feedback you
+ The Apache FOP team is proud to present to you this production quality release.
+ We're still in the process of adding new features. We welcome any feedback you
might have and even more, any other form of help to get the project forward.
</p>
<p>
- This fourth release contains many bug fix release and new features compared
- to 0.92beta. To see what has changed since the last release, please visit the
- <a href="changes_0.93.html">Changes Page</a> and the <a href="releaseNotes_0.93.html">Release Notes</a>.
+ This sixth release contains many bug fix release and new features compared
+ to 0.94. To see what has changed since the last release, please visit the
+ <a href="changes_0.95.html">Changes Page</a> and the
+ <a href="releaseNotes_0.95.html">Release Notes</a>.
</p>
</section>
<section id="upgrading">
diff --git a/src/documentation/content/xdocs/0.93/intermediate.xml b/src/documentation/content/xdocs/0.95/intermediate.xml
index 4744185aa..4744185aa 100644
--- a/src/documentation/content/xdocs/0.93/intermediate.xml
+++ b/src/documentation/content/xdocs/0.95/intermediate.xml
diff --git a/src/documentation/content/xdocs/0.93/known-issues.xml b/src/documentation/content/xdocs/0.95/known-issues.xml
index 25af2a217..6e28e3fb7 100644
--- a/src/documentation/content/xdocs/0.93/known-issues.xml
+++ b/src/documentation/content/xdocs/0.95/known-issues.xml
@@ -21,17 +21,9 @@
MIF and SVG output support have not been restored, yet.
</known-issue>
<known-issue>
- Java2D/AWT support has been improved, but some problems remain,
- for example with block-containers.
- </known-issue>
- <known-issue>
Auto table layout is not implemented, yet.
</known-issue>
<known-issue>
- The collapsing border model on tables is not implemented, yet. Please
- use border-collapse="separate" for now.
- </known-issue>
- <known-issue>
Footnotes may overlap with text of the region-body in multi-column
documents.
</known-issue>
@@ -57,22 +49,9 @@
There are several small problems around white space handling.
</known-issue>
<known-issue>
- Images currently don't shrink so they fit on a page when they are
- too big and shrinking is allowed to happen.
- </known-issue>
- <known-issue>
- inline-container may not work as expected.
- </known-issue>
- <known-issue>
- letter-spacing and word-spacing properties may not work as expected.
- </known-issue>
- <known-issue>
leaders with leader-pattern="use-content" may not work as expected.
</known-issue>
<known-issue>
- keep-with-previous doesn't work inside tables and lists, yet.
- </known-issue>
- <known-issue>
If two consecutive pages don't have the same available width, the
content currently isn't properly fit into the available space on
the new page.
@@ -85,18 +64,7 @@
table-body, table-header, table-footer and table-row.
</known-issue>
<known-issue>
- The backgrounds of table-body, table-header, table-footer and
- table-column are not painted, yet.
- </known-issue>
- <known-issue>
- Border and padding conditionality are not supported on table-cells, yet.
- </known-issue>
- <known-issue>
Column balancing in multi-column documents may not work as expected
(<a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=36356">Bugzilla #36356</a>)
</known-issue>
- <known-issue>
- Internal basic-links don't point to the exact location on a page, yet, as they
- did in 0.20.5. Currently you land in the upper left corner of the page.
- </known-issue>
</known-issues>
diff --git a/src/documentation/content/xdocs/0.93/knownissues_overview.xml b/src/documentation/content/xdocs/0.95/knownissues_overview.xml
index 0f91bb482..7247e6b79 100644
--- a/src/documentation/content/xdocs/0.93/knownissues_overview.xml
+++ b/src/documentation/content/xdocs/0.95/knownissues_overview.xml
@@ -46,25 +46,23 @@
<section>
<title>FO Tree</title>
<p>
- This section lists currently disabled test cases in the test suite for the FO tree tests.
- The data for this section comes from
- <a href="http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/test/fotree/disabled-testcases.xml">test/fotree/disabled-testcases.xml</a>.
+ This section lists disabled test cases in the test suite for the FO tree tests, at the time
+ of the release.
</p>
- <xi:include href="cocoon://knownissues-raw-fotree_0.93.xml#xpointer(/document/body/*)"/>
+ <xi:include href="cocoon://knownissues-raw-fotree_0.95.xml#xpointer(/document/body/*)"/>
</section>
<section>
<title>Layout Engine</title>
<p>
- This section lists currently disabled test cases in the test suite for the layout engine tests.
- The data for this section comes from
- <a href="http://svn.apache.org/repos/asf/xmlgraphics/fop/trunk/test/layoutengine/disabled-testcases.xml">test/layoutengine/disabled-testcases.xml</a>.
+ This section lists disabled test cases in the test suite for the layout engine tests, at the
+ time of the release.
</p>
- <xi:include href="cocoon://knownissues-raw-layoutengine_0.93.xml#xpointer(/document/body/*)"/>
+ <xi:include href="cocoon://knownissues-raw-layoutengine_0.95.xml#xpointer(/document/body/*)"/>
</section>
<section>
<title>Other known issues</title>
<p>This section lists other known issues.</p>
- <xi:include href="cocoon://knownissues-raw-static_0.93.xml#xpointer(/document/body/*)"/>
+ <xi:include href="cocoon://knownissues-raw-static_0.95.xml#xpointer(/document/body/*)"/>
</section>
</section>
</body>
diff --git a/src/documentation/content/xdocs/0.93/layoutengine/disabled-testcases.xml b/src/documentation/content/xdocs/0.95/layoutengine/disabled-testcases.xml
index cdaaaa741..b4de16ef4 100644
--- a/src/documentation/content/xdocs/0.93/layoutengine/disabled-testcases.xml
+++ b/src/documentation/content/xdocs/0.95/layoutengine/disabled-testcases.xml
@@ -27,13 +27,6 @@
nominal line.</description>
</testcase>
<testcase>
- <name>Bugzilla #36391: reference-orientation</name>
- <file>block-container_reference-orientation_bug36391.xml</file>
- <description>There's a problem involving nested block-containers
- and reference-orientation 180/-180.</description>
- <reference>http://issues.apache.org/bugzilla/show_bug.cgi?id=36391</reference>
- </testcase>
- <testcase>
<name>Auto-height block-containers produce fences</name>
<file>block-container_space-before_space-after_3.xml</file>
<description>Block-containers with no height currently don't
@@ -48,8 +41,8 @@
<testcase>
<name>Hyphenation with preserved linefeeds</name>
<file>block_hyphenation_linefeed_preserve.xml</file>
- <description>When hyphenation is enabled and linefeeds are preserved linefeeds
- are painted as '#' and the text is output multiple times.</description>
+ <description>When hyphenation is enabled and linefeeds are preserved,
+ the text is output multiple times.</description>
</testcase>
<testcase>
<name>linefeed-treatment</name>
@@ -105,12 +98,6 @@
regions.</description>
</testcase>
<testcase>
- <name>Footnotes swallowed in hyphenated fo:inlines</name>
- <file>footnote_in_inline.xml</file>
- <description>getChangedKnuthElements probably loses the footnote
- layout manager somewhere along the way.</description>
- </testcase>
- <testcase>
<name>Footnotes swallowed in lists</name>
<file>footnote_in_list.xml</file>
<description>Element lists for lists are created by combining the
@@ -129,11 +116,6 @@
<reference>http://issues.apache.org/bugzilla/show_bug.cgi?id=37579</reference>
</testcase>
<testcase>
- <name>keeps on inlines NYI</name>
- <file>inline_keep-together.xml</file>
- <description>Keeps are not implemented in inline-level elements, yet.</description>
- </testcase>
- <testcase>
<name>NPE for table inside an inline</name>
<file>inline_block_nested_3.xml</file>
<description>Placing a table as a child of an fo:inline produces a
@@ -251,54 +233,6 @@
<description>Column balancing doesn't work as expected.</description>
</testcase>
<testcase>
- <name>No background-images on table-body</name>
- <file>table-body_background-image.xml</file>
- <description>The backgrounds of table-body, table-header,
- table-footer and table-column are not painted, yet.</description>
- </testcase>
- <testcase>
- <name>Collapsing Border Model NYI</name>
- <file>table_border-collapse_collapse_1.xml</file>
- <description>Border-collapse="collapse" is not yet
- implemented.</description>
- </testcase>
- <testcase>
- <name>Collapsing Border Model NYI</name>
- <file>table_border-collapse_collapse_2.xml</file>
- <description>Border-collapse="collapse" is not yet
- implemented.</description>
- </testcase>
- <testcase>
- <name>Problems with border and padding on tables</name>
- <file>table_border_padding.xml</file>
- <description>The element list seems to not be fully correct, yet, causing
- the layout to look odd.</description>
- </testcase>
- <testcase>
- <name>keep-with-previous doesn't work inside tables</name>
- <file>table-cell_block_keep-with-previous.xml</file>
- <description>Keep-with-previous doesn't work inside tables and
- lists, yet.</description>
- </testcase>
- <testcase>
- <name>Border and padding conditionality is NYI on table-cells</name>
- <file>table-cell_border_padding_conditionality.xml</file>
- <description>Border and padding conditionality are not supported
- on table-cells, yet.</description>
- </testcase>
- <testcase>
- <name>No background-images on table-header</name>
- <file>table-header_background-image.xml</file>
- <description>The backgrounds of table-body, table-header,
- table-footer and table-column are not painted, yet.</description>
- </testcase>
- <testcase>
- <name>keep-with-previous doesn't work on table-rows</name>
- <file>table-row_keep-with-previous.xml</file>
- <description>Keep-with-previous doesn't work inside tables and
- lists, yet.</description>
- </testcase>
- <testcase>
<name>table-cell empty area with marker.xml</name>
<file>table-cell_empty_area_with_marker.xml</file>
<description>A table-cell producing an empty area does currently not add any markers to a page.
@@ -312,17 +246,15 @@
case should be revisited.</description>
</testcase>
<testcase>
- <name>fo:wrapper around block-level content</name>
- <file>wrapper_block.xml</file>
- <description>A ClassCastException occurs when fo:wrapper directly surrounds a
- block-level element because its layout manager is written to handle only
- inline content.</description>
+ <name>fo:wrapper around block-level content (with id)</name>
+ <file>wrapper_block_id.xml</file>
+ <description>"id" attributes on fo:wrapper around block-level content don't get
+ added to the area tree.</description>
</testcase>
<testcase>
- <name>Bugzilla #40230: invalid extra page break</name>
- <file>block_break-after_bug40230.xml</file>
- <description>Currently an extra page is created even if there is nothing
- after a block with break-after="page"</description>
- <reference>http://issues.apache.org/bugzilla/show_bug.cgi?id=40230</reference>
+ <name>Soft hyphen with normal hyphenation enabled</name>
+ <file>block_shy_linebreaking_hyph.xml</file>
+ <description>A soft hyphen should be a preferred as break compared to a
+ normal hyphenation point but is not.</description>
</testcase>
</disabled-testcases>
diff --git a/src/documentation/content/xdocs/0.93/output.xml b/src/documentation/content/xdocs/0.95/output.xml
index fdc37931d..628df1248 100644
--- a/src/documentation/content/xdocs/0.93/output.xml
+++ b/src/documentation/content/xdocs/0.95/output.xml
@@ -48,6 +48,35 @@
The net effect is that the layout of a given FO document can be quite different between
renderers that do not use the same font information.
</p>
+ <p>
+ Theoretically, there's some potential to make the output of the PDF/PS renderers match
+ the output of the Java2D-based renderers. If FOP used the font metrics from its own
+ font subsystem but still used Java2D for text painting in the Java2D-based renderers,
+ this could probably be achieved. However, this approach hasn't been implemented, yet.
+ </p>
+ <p>
+ With a work-around, it is possible to match the PDF/PS output in a Java2D-based
+ renderer pretty closely. The clue is to use the
+ <a href="intermediate.html">intermediate format</a>. The trick is to layout the
+ document using FOP's own font subsystem but then render the document using Java2D.
+ Here are the necessary steps (using the command-line):
+ </p>
+ <ol>
+ <li>
+ Produce an IF file: <code>fop -fo myfile.fo -at application/pdf myfile.at.xml</code><br/>
+ Specifying "application/pdf" for the "-at" parameter causes FOP to use FOP's own
+ font subsystem (which is used by the PDF renderer). Note that no PDF file is created
+ in this step.
+ </li>
+ <li>Render to a PDF file: <code>fop -atin myfile.at.xml -pdf myfile.pdf</code></li>
+ <li>Render to a Java2D-based renderer:
+ <ul>
+ <li><code>fop -atin myfile.at.xml -print</code></li>
+ <li><code>fop -atin myfile.at.xml -awt</code></li>
+ <li><code>fop -atin myfile.at.xml -tiff myfile.tiff</code></li>
+ </ul>
+ </li>
+ </ol>
</section>
<section id="general-direct-output">
<title>Output to a Printer or Other Device</title>
@@ -105,7 +134,7 @@ out = proc.getOutputStream();]]></source>
<section id="pdf-postprocess">
<title>Post-processing</title>
<p>
- FOP does not currently support several desirable PDF features: XMP metadata and watermarks.
+ FOP does not currently support several desirable PDF features: watermarks and signatures.
One workaround is to use Adobe Acrobat (the full version, not the Reader) to process
the file manually or with scripting that it supports.
</p>
@@ -199,8 +228,54 @@ out = proc.getOutputStream();]]></source>
support for most text and layout.
Images and SVG are not fully supported, yet. Currently, the PostScript
renderer generates PostScript Level 3 with most DSC comments. Actually,
- the only Level 3 feature used is FlateDecode, everything else is Level 2.
+ the only Level 3 features used are the FlateDecode and DCTDecode
+ filter (the latter is used for 1:1 embedding of JPEG images), everything
+ else is Level 2.
</p>
+ <section id="ps-configuration">
+ <title>Configuration</title>
+ <p>
+ The PostScript renderer configuration currently allows the following settings:
+ </p>
+<source><![CDATA[<renderer mime="application/postscript">
+ <auto-rotate-landscape>false</auto-rotate-landscape>
+ <language-level>3</language-level>
+ <optimize-resources>false</optimize-resources>
+ <safe-set-page-device>false</safe-set-page-device>
+ <dsc-compliant>true</dsc-compliant>
+</renderer>]]></source>
+ <p>
+ The default value for the "auto-rotate-landscape" setting is "false". Setting it
+ to "true" will automatically rotate landscape pages and will mark them as landscape.
+ </p>
+ <p>
+ The default value for the "language-level" setting is "3". This setting specifies
+ the PostScript language level which should be used by FOP. Set this to "2"
+ only if you don't have a Level 3 capable interpreter.
+ </p>
+ <p>
+ The default value for the "optimize-resources" setting is "false". Setting it
+ to "true" will produce the PostScript file in two steps. A temporary file will be
+ written first which will then be processed to add only the fonts which were really
+ used and images are added to the stream only once as PostScript forms. This will
+ reduce file size but can potentially increase the memory needed in the interpreter
+ to process.
+ </p>
+ <p>
+ The default value for the "safe-set-page-device" setting is "false". Setting it
+ to "true" will cause the renderer to invoke a postscript macro which guards against
+ the possibility of invalid/unsupported postscript key/values being issued to the
+ implementing postscript page device.
+ </p>
+ <p>
+ The default value for the "dsc-compliant" setting is "true". Setting it
+ to "false" will break DSC compliance by minimizing the number of setpagedevice
+ calls in the postscript document output. This feature may be useful when unwanted
+ blank pages are experienced in your postscript output. This problem is caused by
+ the particular postscript implementation issuing unwanted postscript subsystem
+ initgraphics/erasepage calls on each setpagedevice call.
+ </p>
+ </section>
<section id="ps-limitations">
<title>Limitations</title>
<ul>
@@ -283,6 +358,7 @@ out = proc.getOutputStream();]]></source>
<source><![CDATA[<renderer mime="application/vnd.hp-PCL">
<rendering>quality</rendering>
<text-rendering>bitmap</text-rendering>
+ <disable-pjl>false</disable-pjl>
</renderer>]]></source>
<p>
The default value for the "rendering" setting is "speed" which causes borders
@@ -298,6 +374,12 @@ out = proc.getOutputStream();]]></source>
to "bitmap" which causes all text to be rendered as bitmaps.
</p>
<p>
+ The default value for the "disable-pjl" setting is "false". This means that
+ the PCL renderer usually generates PJL commands before and after the document
+ in order to switch a printer into PCL language. PJL commands can be disabled
+ if you set this value to "true".
+ </p>
+ <p>
You can control the output resolution for the PCL using the "target resolution"
setting on the FOUserAgent. The actual value will be rounded up to the next
supported PCL resolution. Currently, only 300 and 600 dpi are supported which
@@ -498,6 +580,13 @@ out = proc.getOutputStream();]]></source>
<font-triplet name="Courier" style="normal" weight="bold"/>
</font>]]></source>
</section>
+ <section id="afp-renderer-resolution-config">
+ <title>Output Resolution</title>
+ <p>By default the AFP Renderer creates output with a resolution of 240 dpi.
+ This can be overridden by the &lt;renderer-resolution/&gt; configuration element. Example:</p>
+ <source><![CDATA[
+ <renderer-resolution>240</renderer-resolution>]]></source>
+ </section>
<section id="afp-image-config">
<title>Images</title>
<p>By default the AFP Renderer converts all images to 8 bit grey level.
@@ -560,8 +649,7 @@ out = proc.getOutputStream();]]></source>
</section>
<section id="afp-tag-logical-element">
<title>Tag Logical Element Extension</title>
- <p>The tag-logical-element extension element allows to injects TLEs into the AFP output stream. Example:
- Example:</p>
+ <p>The tag-logical-element extension element allows to injects TLEs into the AFP output stream. Example:</p>
<source><![CDATA[
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
xmlns:afp="http://xmlgraphics.apache.org/fop/extensions/afp">
@@ -577,6 +665,24 @@ out = proc.getOutputStream();]]></source>
The name and value attributes are mandatory.
</p>
</section>
+ <section id="afp-no-operation">
+ <title>No Operation Extension</title>
+ <p>The no-operation extension provides the ability to carry up to 32K of comments or any other type
+ of unarchitected data into the AFP output stream. Example:</p>
+ <source><![CDATA[
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format"
+ xmlns:afp="http://xmlgraphics.apache.org/fop/extensions/afp">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="simple">
+ <afp:no-operation name="My NOP">insert up to 32k of character data here!</afp:no-operation>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+]]></source>
+ <p>The no-operation extension element can only occur within a simple-page-master.
+ Multiple no-operation extension elements within a simple-page-master are allowed.
+ The name attribute is mandatory.
+ </p>
+ </section>
</section>
</section>
<section id="rtf">
@@ -584,10 +690,19 @@ out = proc.getOutputStream();]]></source>
<p>
JFOR, an open source XSL-FO to RTF converter has been integrated into Apache FOP.
This will create an RTF (rich text format) document that will
- attempt to contain as much information from the fo document as
- possible. The RTF output follows Microsoft's RTF specifications
+ attempt to contain as much information from the XSL-FO document as
+ possible. It should be noted that is not possible (due to RTF's limitations) to map all
+ XSL-FO features to RTF. For complex documents, the RTF output will never reach the feature
+ level from PDF, for example. Thus, using RTF output is only recommended for simple documents
+ such as letters.
+ </p>
+ <p>
+ The RTF output follows Microsoft's RTF specifications
and produces best results on Microsoft Word.
</p>
+ <note>RTF output is currently unmaintained and lacks many features compared to other output
+ formats. Using other editable formats like Open Document Format, instead of producing XSL-FO
+ then RTF through FOP, might give better results.</note>
</section>
<section id="xml">
<title>XML (Area Tree XML)</title>
@@ -662,8 +777,8 @@ out = proc.getOutputStream();]]></source>
<fonts><!-- described elsewhere --></fonts>
</renderer>]]></source>
<p>
- The default value for the "compression" setting is "PackBits" which is a
- widely supported RLE compression scheme for TIFF. The set of compression
+ The default value for the "compression" setting is "PackBits" which
+ which is a widely supported RLE compression scheme for TIFF. The set of compression
names to be used here matches the set that the Image I/O API uses. Note that
not all compression schemes may be available during runtime. This depends on the
actual codecs being available. Here is a list of possible values:
@@ -770,3 +885,4 @@ out = proc.getOutputStream();]]></source>
</body>
</document>
+
diff --git a/src/documentation/content/xdocs/0.93/pdfa.xml b/src/documentation/content/xdocs/0.95/pdfa.xml
index 64bd5dc91..1b3b75561 100644
--- a/src/documentation/content/xdocs/0.93/pdfa.xml
+++ b/src/documentation/content/xdocs/0.95/pdfa.xml
@@ -129,5 +129,31 @@ Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent);
activated at the same time.
</p>
</section>
+ <section id="interoperability">
+ <title>Interoperability</title>
+ <p>
+ There has been some confusion about the namespace for the PDF/A indicator in the XMP
+ metadata. At least three variants have been seen in the wild:
+ </p>
+ <table>
+ <tr>
+ <td>http://www.aiim.org/pdfa/ns/id.html</td>
+ <td><strong>obsolete</strong>, from an early draft of ISO-19005-1, used by Adobe Acrobat 7.x</td>
+ </tr>
+ <tr>
+ <td>http://www.aiim.org/pdfa/ns/id</td>
+ <td><strong>obsolete</strong>, found in the original ISO 19005-1:2005 document</td>
+ </tr>
+ <tr>
+ <td>http://www.aiim.org/pdfa/ns/id/</td>
+ <td><strong>correct</strong>, found in the technical corrigendum 1 of ISO 19005-1:2005</td>
+ </tr>
+ </table>
+ <p>
+ If you get an error validating a PDF/A file in Adobe Acrobat 7.x it doesn't mean that
+ FOP did something wrong. It's Acrobat that is at fault. This is fixed in Adobe Acrobat 8.x
+ which uses the correct namespace as described in the technical corrigendum 1.
+ </p>
+ </section>
</body>
</document>
diff --git a/src/documentation/content/xdocs/0.93/pdfencryption.xml b/src/documentation/content/xdocs/0.95/pdfencryption.xml
index f68eae437..cda301aab 100644
--- a/src/documentation/content/xdocs/0.93/pdfencryption.xml
+++ b/src/documentation/content/xdocs/0.95/pdfencryption.xml
@@ -29,10 +29,6 @@
<body>
<section>
<title>Overview</title>
- <warning>
- PDF Encryption is available in Release 0.20.5 and later. The comments on this page do
- not apply to releases earlier than 0.20.5.
- </warning>
<p>
FOP supports encryption of PDF output, thanks to Patrick
C. Lankswert. This feature is commonly used to prevent
@@ -208,15 +204,10 @@ Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent);
</p>
<ol>
<li>
- Download the binary distribution for your JDK version. If you have JDK
- 1.3 or earlier you must also download a JCE from the same page.
- </li>
- <li>
Unpack the distribution. Add the jar file to your classpath. A
convenient way to use the jar on Linux is to simply drop it into the
FOP lib directory, it will be automatically picked up by
- <code>fop.sh</code>. If you have JDK 1.3 or earlier don't forget to
- install the JCE as well.
+ <code>fop.sh</code>.
</li>
<li>
Open the <code>java.security</code> file and add<br/>
diff --git a/src/documentation/content/xdocs/0.93/pdfx.xml b/src/documentation/content/xdocs/0.95/pdfx.xml
index cf796c74d..cf796c74d 100644
--- a/src/documentation/content/xdocs/0.93/pdfx.xml
+++ b/src/documentation/content/xdocs/0.95/pdfx.xml
diff --git a/src/documentation/content/xdocs/0.93/running.xml b/src/documentation/content/xdocs/0.95/running.xml
index 3e852ea98..38e31cc6c 100644
--- a/src/documentation/content/xdocs/0.93/running.xml
+++ b/src/documentation/content/xdocs/0.95/running.xml
@@ -28,21 +28,24 @@
<title>System Requirements</title>
<p>The following software must be installed:</p>
<ul>
- <li>Java 1.3.x or later Runtime Environment.</li>
+ <li>
+ Java 1.4.x or later Runtime Environment.
+ <ul>
+ <li>
+ Many JREs >=1.4 contain older JAXP implementations (which often contain bugs). It's
+ usually a good idea to replace them with a current implementation.
+ </li>
+ </ul>
+ </li>
<li>
Apache FOP. The <a href="../download.html">FOP distribution</a> includes all libraries that you will
need to run a basic FOP installation. These can be found in the [fop-root]/lib directory. These
libraries include the following:
<ul>
- <li>
- A JAXP-compatible XML Parser (FOP comes with <a class="fork" href="ext:xerces">Apache Xerces-J</a>).
- </li>
- <li>
- A JAXP-compatible XSLT Processor (FOP comes with <a class="fork" href="ext:xalan">Apache Xalan-J</a>).
- </li>
+ <li><a class="fork" href="ext:xmlgraphics.apache.org/commons">Apache XML Graphics Commons</a>, an shared library for Batik and FOP.</li>
<li><a class="fork" href="ext:batik">Apache Batik</a>, an SVG library.</li>
- <li><a class="fork" href="ext:jakarta/commons/logging">Apache Jakarta Commons Logging</a>, a logger abstraction kit.</li>
- <li><a class="fork" href="ext:jakarta/commons/io">Apache Jakarta Commons IO</a>, a library with I/O utilities.</li>
+ <li><a class="fork" href="ext:commons-logging">Apache Commons Logging</a>, a logger abstraction kit.</li>
+ <li><a class="fork" href="ext:commons-io">Apache Commons IO</a>, a library with I/O utilities.</li>
<li><a class="fork" href="ext:excalibur/framework">Apache Excalibur/Avalon Framework</a>, for XML configuration handling.</li>
</ul>
</li>
@@ -50,7 +53,8 @@
<p>The following software is optional, depending on your needs:</p>
<ul>
<li>
- Graphics libraries. Support for some graphics formats requires additional packages. See
+ Graphics libraries. Generally, FOP contains direct support for the most important
+ bitmap image formats (including PNG, JPEG and GIF). See
<a href="graphics.html">FOP: Graphics Formats</a> for details.
</li>
<li>
@@ -178,7 +182,7 @@ Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl
Fop foo.fo -awt]]></source>
<p>
PDF encryption is only available if FOP was compiled with encryption support
- <strong>and</strong> if compatible encryption support is availabe at run time.
+ <strong>and</strong> if compatible encryption support is available at run time.
Currently, only the JCE is supported. Check the <a href="pdfencryption.html">Details</a>.
</p>
</section>
@@ -220,25 +224,27 @@ Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl
<title>FOP's dynamical classpath construction</title>
<p>If FOP is started without a proper classpath, it tries to
- add its dependencies dynamically. FOP uses the current working
- directory as the base directory for its search. If the base
- directory is called <code>build</code>, then its parent
- directory becomes the base directory.</p>
+ add its dependencies dynamically. If the system property
+ <code>fop.home</code> contains the name of a directory, then
+ FOP uses that directory as the base directory for its
+ search. Otherwise the current working directory is the base
+ directory. If the base directory is called <code>build</code>,
+ then its parent directory becomes the base directory.</p>
<p>FOP expects to find <code>fop.jar</code> in the
- <code>build</code> subdirectory of the base directory, and
- adds it to the classpath. Subsequently FOP adds all
- <code>jar</code> files in the lib directory to the
- classpath. The lib directory is either the <code>lib</code>
- subdirectory of the base directory, or, if that does not
- exist, the base directory itself.</p>
+ <code>build</code> subdirectory of the base directory, and
+ adds it to the classpath. Subsequently FOP adds all
+ <code>jar</code> files in the lib directory to the
+ classpath. The lib directory is either the <code>lib</code>
+ subdirectory of the base directory, or, if that does not
+ exist, the base directory itself.</p>
<p>If the system property <code>fop.optional.lib</code>
- contains the name of a directory, then all <code>jar</code>
- files in that directory are also added to the classpath. See
- the methods <code>getJARList</code> and
- <code>checkDependencies</code> in
- <code>org.apache.fop.cli.Main</code>.</p>
+ contains the name of a directory, then all <code>jar</code>
+ files in that directory are also added to the classpath. See
+ the methods <code>getJARList</code> and
+ <code>checkDependencies</code> in
+ <code>org.apache.fop.cli.Main</code>.</p>
</section>
</section>
@@ -299,7 +305,7 @@ Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl
<ul>
<li>
Increase memory available to the JVM. See
- <a href="http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html">the -Xmx option</a>
+ <a href="http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/java.html">the -Xmx option</a>
for more information.
<warning>
It is usually unwise to increase the memory allocated to the JVM beyond the amount of
@@ -335,11 +341,6 @@ Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl
This can be substantial if the page sequence contains lots of FO elements.
</li>
</ul>
- <p>
- One of FOP's stated design goals is to be able to process input of arbitrary size.
- Addressing this goal is one of the prime motivations behind the
- <a href="../dev/index.html">FOP Redesign</a>.
- </p>
</section>
<section id="problems">
<title>Problems</title>
diff --git a/src/documentation/content/xdocs/0.93/servlets.xml b/src/documentation/content/xdocs/0.95/servlets.xml
index cecbcaa60..07c22312d 100644
--- a/src/documentation/content/xdocs/0.93/servlets.xml
+++ b/src/documentation/content/xdocs/0.95/servlets.xml
@@ -161,7 +161,7 @@ public void init() throws ServletException {
<ul>
<li>
Instead of java.io.ByteArrayOutputStream consider using the ByteArrayOutputStream
- implementation from the <a href="ext:jakarta/commons/io">Jakarta Commons IO project</a> which allocates less memory.
+ implementation from the <a href="ext:commons-io">Jakarta Commons IO project</a> which allocates less memory.
The full class name is: <code>org.apache.commons.io.output.ByteArrayOutputStream</code>
</li>
<li>
@@ -177,6 +177,71 @@ public void init() throws ServletException {
apply here, too.
</p>
</section>
+ <section id="uriresolver">
+ <title>Accessing resources in your web application</title>
+ <p>
+ Often, you will want to use resources (stylesheets, images etc.) which are bundled with
+ your web application. FOP provides a URIResolver implementation that lets you access
+ files via the Servlet's ServletContext. The class is called
+ <code>org.apache.fop.servlet.ServletContextURIResolver</code>.
+ </p>
+ <p>
+ Here's how to set it up in your servlet. Instantiate a new instance in the servlet's
+ init() method:
+ </p>
+ <source><![CDATA[
+ /** URIResolver for use by this servlet */
+ protected URIResolver uriResolver;
+
+ public void init() throws ServletException {
+ this.uriResolver = new ServletContextURIResolver(getServletContext());
+ [..]
+ }]]></source>
+ <p>
+ The ServletContextURIResolver reacts on URIs beginning with "servlet-context:". If you
+ want to access an image in a subdirectory of your web application, you could, for
+ example, use: "servlet-context:/images/myimage.png". Don't forget the leading slash
+ after the colon!
+ </p>
+ <p>
+ Further down, you can use the URIResolver for various things:
+ </p>
+ <ul>
+ <li>
+ With the Transformer (JAXP/XSLT) so things like document() functions can resolver
+ "servlet-context:" URIs.
+ </li>
+ <li>
+ With the FopFactory so every resource FOP loads can be loaded using a "servlet-context:"
+ URI.
+ </li>
+ <li>
+ You can the ServletContextURIResolver yourself in your servlet code to access
+ stylesheets or XML files bundled with your web application.
+ </li>
+ </ul>
+ <p>
+ Here are some example snippets:
+ </p>
+ <source><![CDATA[
+//Setting up the JAXP TransformerFactory
+this.transFactory = TransformerFactory.newInstance();
+this.transFactory.setURIResolver(this.uriResolver);
+
+[..]
+
+//Setting up the FOP factory
+this.fopFactory = FopFactory.newInstance();
+this.fopFactory.setURIResolver(this.uriResolver);
+
+[..]
+
+//The stylesheet for the JAXP Transfomer
+Source xsltSrc = this.uriResolver.resolve(
+ "servlet-context:/xslt/mystylesheet.xsl", null);
+Transformer transformer = this.transFactory.newTransformer(xsltSrc);
+transformer.setURIResolver(this.uriResolver);]]></source>
+ </section>
</section>
<section id="ie">
<title>Notes on Microsoft Internet Explorer</title>
diff --git a/src/documentation/content/xdocs/0.93/upgrading.xml b/src/documentation/content/xdocs/0.95/upgrading.xml
index 0f04e63b2..77925fbf8 100644
--- a/src/documentation/content/xdocs/0.93/upgrading.xml
+++ b/src/documentation/content/xdocs/0.95/upgrading.xml
@@ -31,7 +31,10 @@
</p>
<ul>
<li>
- More than half of the codebase has been rewritten over the last three years. With version 0.93 the code has reached <strong>production level</strong>.
+ More than half of the codebase has been rewritten over the
+ last four years. With version 0.93 the code has reached
+ <strong>production level</strong>, and continues to improve with
+ version 0.94 and 0.95.
</li>
<li>
The API of FOP has changed considerably and is not
@@ -52,13 +55,12 @@
src/foschema/fop-configuration.xsd.
</li>
<li>
- If you are using font metrics files for version 0.20.5 or
- 0.92 or earlier, you have to regenerate them in the new
- format. The new format is characterized by a version
- attribute on the top-level font-metrics element, whose value
- is 2.0. The absence of a version attribute will be
- interpreted as version 1.0, and such metrics files will no
- longer be parsed.
+ Beginning with version 0.94 you can skip the generation of
+ font metric files and remove the "font-metrics" attribute
+ in the font configuration. The font metrics files are, for
+ the moment, still required if you use a TrueType Collection (*.ttc)
+ and in that case you need to regenerate the font metrics file
+ if yours are from a FOP version before 0.93.
</li>
<li>
<p>
@@ -76,18 +78,13 @@
</li>
<li>
Extensions and Renderers written for version 0.20.5 will not work with the new code! The new FOP
- extension for <a href="http://barcode4j.krysalis.org">Barcode4J</a> will be available in
+ extension for <a href="http://barcode4j.krysalis.org">Barcode4J</a> is available since
January 2007.
</li>
<li>
- The PCL Renderer and the MIF Handler have not been resurrected, yet! They are currently non-functional
+ The SVG Renderer and the MIF Handler have not been resurrected, yet! They are currently non-functional
and hope for someone to step up and reimplement them.
</li>
- <li>
- By looking at the <a href="../compliance.html">Compliance page</a> you might get the impression
- that the new code is much more advanced than version 0.20.5. That's true but there may still
- be a few things that may not be handled as gracefully by the new code as by version 0.20.5.
- </li>
</ul>
</section>
<section id="issues">
@@ -95,7 +92,8 @@
<p>
When you use your existing FO files or XML/XSL files which work fine with FOP version
0.20.5 against this FOP version some things may not work as expected. The following
- list will hopefully help you to identify and correct those problems.
+ list will hopefully help you to identify and correct those problems. This does not mean
+ that the new FOP is at fault. Quite the opposite actually! See below:
</p>
<ul>
<li>
@@ -103,10 +101,6 @@
trouble. It may contain the necessary information to understand and resolve the problem.
</li>
<li>
- Not all 0.20.5 output formats are supported. PDF and Postscript should be fully supported.
- See <a href="output.html">Output Targets</a> for a more complete description.
- </li>
- <li>
As stated above empty table cells <code>&lt;fo:table-cell&gt;&lt;/fo:table-cell&gt;</code>
are not allowed by the specification. The same applies to empty <code>static-content</code>
and <code>block-container</code> elements, for example.
@@ -123,12 +117,8 @@
</li>
<li>
The <code>fox:outline</code> extension is not implemented in this version anymore.
- It has been superseded by the new bookmark elements from XSL-FO 1.1.
- </li>
- <li>
- The <code>fox:destination</code> extension is also not implemented in this version
- although it may be added in the future. See also
- <a href="http://issues.apache.org/bugzilla/show_bug.cgi?id=37157">Bug 37157</a>.
+ It has been superseded by the new bookmark elements from XSL-FO 1.1. So please
+ update your stylesheets accordingly.
</li>
</ul>
</section>
diff --git a/src/documentation/content/xdocs/compliance.ihtml b/src/documentation/content/xdocs/compliance.ihtml
index 27ca74a63..2b25b89d7 100644
--- a/src/documentation/content/xdocs/compliance.ihtml
+++ b/src/documentation/content/xdocs/compliance.ihtml
@@ -1,5 +1,5 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
- "http://www.w3.org/TR/html4/loose.dtd">
+"http://www.w3.org/TR/html4/loose.dtd">
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
@@ -16,5936 +16,7488 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+
<html>
<head>
<title>Apache FOP Compliance Page</title>
</head>
-<body>
+<body>
<h1>W3C XSL-FO 1.0 Standard</h1>
- <p>
- One of FOP's design goals is conformance to the
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/">W3C XSL-FO 1.0 standard</a>, which specifies three levels
- of "conformance": basic, extended, and complete. Although FOP does not currently conform to
- any of these levels, it is nevertheless a useful work-in-progress for many applications.
- The information presented here demonstrates FOP's progress toward the goal of conformance,
- which progress consists of implementation of specific objects and properties in the standard.
- The information presented is useful not only to the developers as a sort of "to do" list,
- but also for setting proper expectations for users and potential users.
- </p>
- <p>
- In the tables below, "yes" (green background) indicates conformance, "no" (red background)
- indicates a lack of conformance, "partial" (greyish background) indicates partial conformance,
- and "na" indicates that the item is "not applicable" to FOP usually because FOP supports only
- visual media.
- </p>
+
+ <p>One of FOP's design goals is conformance to the <a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/">W3C XSL-FO 1.0 standard</a>, which specifies three
+ levels of "conformance": basic, extended, and complete. Although FOP does not currently conform
+ to any of these levels, it is nevertheless a useful work-in-progress for many applications. The
+ information presented here demonstrates FOP's progress toward the goal of conformance, which
+ progress consists of implementation of specific objects and properties in the standard. The
+ information presented is useful not only to the developers as a sort of "to do" list, but also
+ for setting proper expectations for users and potential users.</p>
+
+ <p>In the tables below, "yes" (green background) indicates conformance, "no" (red background)
+ indicates a lack of conformance, "partial" (greyish background) indicates partial conformance,
+ and "na" indicates that the item is "not applicable" to FOP usually because FOP supports only
+ visual media.</p>
+
<h2><a href="#fo-object-section">XSL-FO Object Support</a></h2>
+
<ul class="minitoc">
- <li>
- <strong><a href="#fo-object-decl-section">Declarations and Pagination and Layout Formatting Objects</a>: </strong><a href="#fo-object-root">root</a>, <a href="#fo-object-declarations">declarations</a>, <a href="#fo-object-color-profile">color-profile</a>, <a href="#fo-object-page-sequence">page-sequence</a>, <a href="#fo-object-layout-master-set">layout-master-set</a>, <a href="#fo-object-page-sequence-master">page-sequence-master</a>, <a href="#fo-object-single-page-master-reference">single-page-master-reference</a>, <a href="#fo-object-repeatable-page-master-reference">repeatable-page-master-reference</a>, <a href="#fo-object-repeatable-page-master-alternatives">repeatable-page-master-alternatives</a>, <a href="#fo-object-conditional-page-master-reference">conditional-page-master-reference</a>, <a href="#fo-object-simple-page-master">simple-page-master</a>, <a href="#fo-object-region-body">region-body</a>, <a href="#fo-object-region-before">region-before</a>, <a href="#fo-object-region-after">region-after</a>, <a href="#fo-object-region-start">region-start</a>, <a href="#fo-object-region-end">region-end</a>, <a href="#fo-object-flow">flow</a>, <a href="#fo-object-static-content">static-content</a>, <a href="#fo-object-title">title</a>
- </li>
- <li>
- <strong><a href="#fo-object-block-section">Block Formatting Objects</a>: </strong><a href="#fo-object-block">block</a>, <a href="#fo-object-block-container">block-container</a>
- </li>
- <li>
- <strong><a href="#fo-object-inline-section">Inline Formatting Objects</a>: </strong><a href="#fo-object-bidi-override">bidi-override</a>, <a href="#fo-object-character">character</a>, <a href="#fo-object-initial-property-set">initial-property-set</a>, <a href="#fo-object-external-graphic">external-graphic</a>, <a href="#fo-object-instream-foreign-object">instream-foreign-object</a>, <a href="#fo-object-inline">inline</a>, <a href="#fo-object-inline-container">inline-container</a>, <a href="#fo-object-leader">leader</a>, <a href="#fo-object-page-number">page-number</a>, <a href="#fo-object-page-number-citation">page-number-citation</a>
- </li>
- <li>
- <strong><a href="#fo-object-table-section">Table Formatting Objects</a>: </strong><a href="#fo-object-table-and-caption">table-and-caption</a>, <a href="#fo-object-table">table</a>, <a href="#fo-object-table-column">table-column</a>, <a href="#fo-object-table-caption">table-caption</a>, <a href="#fo-object-table-header">table-header</a>, <a href="#fo-object-table-footer">table-footer</a>, <a href="#fo-object-table-body">table-body</a>, <a href="#fo-object-table-row">table-row</a>, <a href="#fo-object-table-cell">table-cell</a>
- </li>
- <li>
- <strong><a href="#fo-object-list-section">List Formatting Objects</a>: </strong><a href="#fo-object-list-block">list-block</a>, <a href="#fo-object-list-item">list-item</a>, <a href="#fo-object-list-item-body">list-item-body</a>, <a href="#fo-object-list-item-label">list-item-label</a>
- </li>
- <li>
- <strong><a href="#fo-object-link-section">Link and Multi Formatting Objects</a>: </strong><a href="#fo-object-basic-link">basic-link</a>, <a href="#fo-object-multi-switch">multi-switch</a>, <a href="#fo-object-multi-case">multi-case</a>, <a href="#fo-object-multi-toggle">multi-toggle</a>, <a href="#fo-object-multi-properties">multi-properties</a>, <a href="#fo-object-multi-property-set">multi-property-set</a>
- </li>
- <li>
- <strong><a href="#fo-object-bookmarks-section">Formatting Objects for Bookmarks</a>: </strong><a href="#fo-object-bookmark-tree">bookmark-tree</a>, <a href="#fo-object-bookmark">bookmark</a>, <a href="#fo-object-bookmark-title">bookmark-title</a>
- </li>
- <li>
- <strong><a href="#fo-object-outofline-section">Out-of-line Formatting Objects</a>: </strong><a href="#fo-object-float">float</a>, <a href="#fo-object-footnote">footnote</a>, <a href="#fo-object-footnote-body">footnote-body</a>
- </li>
- <li>
- <strong><a href="#fo-object-other-section">Other Formatting Objects</a>: </strong><a href="#fo-object-wrapper">wrapper</a>, <a href="#fo-object-marker">marker</a>, <a href="#fo-object-retrieve-marker">retrieve-marker</a>
- </li>
- </ul>
- <h2><a href="#fo-property-section">XSL-FO Property Support</a></h2>
- <ul>
- <li>
- <strong><a href="#fo-property-commonaccess-section">Common Accessibility Properties</a>: </strong><a href="#fo-property-source-document">source-document</a>, <a href="#fo-property-role">role</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonabspos-section">Common Absolute Position Properties</a>: </strong><a href="#fo-property-absolute-position">absolute-position</a>, <a href="#fo-property-top">top</a>, <a href="#fo-property-right">right</a>, <a href="#fo-property-bottom">bottom</a>, <a href="#fo-property-left">left</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonaural-section">Common Aural Properties</a>: </strong><a href="#fo-property-azimuth">azimuth</a>, <a href="#fo-property-cue-after">cue-after</a>, <a href="#fo-property-cue-before">cue-before</a>, <a href="#fo-property-elevation">elevation</a>, <a href="#fo-property-pause-after">pause-after</a>, <a href="#fo-property-pause-before">pause-before</a>, <a href="#fo-property-pitch">pitch</a>, <a href="#fo-property-pitch-range">pitch-range</a>, <a href="#fo-property-play-during">play-during</a>, <a href="#fo-property-richness">richness</a>, <a href="#fo-property-speak">speak</a>, <a href="#fo-property-speak-header">speak-header</a>, <a href="#fo-property-speak-numeral">speak-numeral</a>, <a href="#fo-property-speak-punctuation">speak-punctuation</a>, <a href="#fo-property-speech-rate">speech-rate</a>, <a href="#fo-property-stress">stress</a>, <a href="#fo-property-voice-family">voice-family</a>, <a href="#fo-property-volume">volume</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonenv-section">Common Border, Padding, and Background Properties</a>: </strong><a href="#fo-property-background-attachment">background-attachment</a>, <a href="#fo-property-background-color">background-color</a>, <a href="#fo-property-background-image">background-image</a>, <a href="#fo-property-background-repeat">background-repeat</a>, <a href="#fo-property-background-position-horizontal">background-position-horizontal</a>, <a href="#fo-property-background-position-vertical">background-position-vertical</a>, <a href="#fo-property-border-before-color">border-before-color</a>, <a href="#fo-property-border-before-style">border-before-style</a>, <a href="#fo-property-border-before-width">border-before-width</a>, <a href="#fo-property-border-after-color">border-after-color</a>, <a href="#fo-property-border-after-style">border-after-style</a>, <a href="#fo-property-border-after-width">border-after-width</a>, <a href="#fo-property-border-start-color">border-start-color</a>, <a href="#fo-property-border-start-style">border-start-style</a>, <a href="#fo-property-border-start-width">border-start-width</a>, <a href="#fo-property-border-end-color">border-end-color</a>, <a href="#fo-property-border-end-style">border-end-style</a>, <a href="#fo-property-border-end-width">border-end-width</a>, <a href="#fo-property-border-top-color">border-top-color</a>, <a href="#fo-property-border-top-style">border-top-style</a>, <a href="#fo-property-border-top-width">border-top-width</a>, <a href="#fo-property-border-bottom-color">border-bottom-color</a>, <a href="#fo-property-border-bottom-style">border-bottom-style</a>, <a href="#fo-property-border-bottom-width">border-bottom-width</a>, <a href="#fo-property-border-left-color">border-left-color</a>, <a href="#fo-property-border-left-style">border-left-style</a>, <a href="#fo-property-border-left-width">border-left-width</a>, <a href="#fo-property-border-right-color">border-right-color</a>, <a href="#fo-property-border-right-style">border-right-style</a>, <a href="#fo-property-border-right-width">border-right-width</a>, <a href="#fo-property-padding-before">padding-before</a>, <a href="#fo-property-padding-after">padding-after</a>, <a href="#fo-property-padding-start">padding-start</a>, <a href="#fo-property-padding-end">padding-end</a>, <a href="#fo-property-padding-top">padding-top</a>, <a href="#fo-property-padding-bottom">padding-bottom</a>, <a href="#fo-property-padding-left">padding-left</a>, <a href="#fo-property-padding-right">padding-right</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonfont-section">Common Font Properties</a>: </strong><a href="#fo-property-font-family">font-family</a>, <a href="#fo-property-font-selection-strategy">font-selection-strategy</a>, <a href="#fo-property-font-size">font-size</a>, <a href="#fo-property-font-stretch">font-stretch</a>, <a href="#fo-property-font-size-adjust">font-size-adjust</a>, <a href="#fo-property-font-style">font-style</a>, <a href="#fo-property-font-variant">font-variant</a>, <a href="#fo-property-font-weight">font-weight</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonhyphen-section">Common Hyphenation Properties</a>: </strong><a href="#fo-property-country">country</a>, <a href="#fo-property-language">language</a>, <a href="#fo-property-script">script</a>, <a href="#fo-property-hyphenate">hyphenate</a>, <a href="#fo-property-hyphenation-character">hyphenation-character</a>, <a href="#fo-property-hyphenation-push-character-count">hyphenation-push-character-count</a>, <a href="#fo-property-hyphenation-remain-character-count">hyphenation-remain-character-count</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonmarginblock-section">Common Margin Properties - Block</a>: </strong><a href="#fo-property-margin-top">margin-top</a>, <a href="#fo-property-margin-bottom">margin-bottom</a>, <a href="#fo-property-margin-left">margin-left</a>, <a href="#fo-property-margin-right">margin-right</a>, <a href="#fo-property-space-before">space-before</a>, <a href="#fo-property-space-after">space-after</a>, <a href="#fo-property-start-indent">start-indent</a>, <a href="#fo-property-end-indent">end-indent</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonmargininline-section">Common Margin Properties - Inline</a>: </strong><a href="#fo-property-space-end">space-end</a>, <a href="#fo-property-space-start">space-start</a>
- </li>
- <li>
- <strong><a href="#fo-property-commonrelpos-section">Common Relative Position Properties</a>: </strong><a href="#fo-property-relative-position">relative-position</a>
- </li>
- <li>
- <strong><a href="#fo-property-areaalign-section">Area Alignment Properties</a>: </strong><a href="#fo-property-alignment-adjust">alignment-adjust</a>, <a href="#fo-property-alignment-baseline">alignment-baseline</a>, <a href="#fo-property-baseline-shift">baseline-shift</a>, <a href="#fo-property-display-align">display-align</a>, <a href="#fo-property-dominant-baseline">dominant-baseline</a>, <a href="#fo-property-relative-align">relative-align</a>
- </li>
- <li>
- <strong><a href="#fo-property-areadim-section">Area Dimension Properties</a>: </strong><a href="#fo-property-block-progression-dimension">block-progression-dimension</a>, <a href="#fo-property-content-height">content-height</a>, <a href="#fo-property-content-width">content-width</a>, <a href="#fo-property-height">height</a>, <a href="#fo-property-inline-progression-dimension">inline-progression-dimension</a>, <a href="#fo-property-max-height">max-height</a>, <a href="#fo-property-max-width">max-width</a>, <a href="#fo-property-min-height">min-height</a>, <a href="#fo-property-min-width">min-width</a>, <a href="#fo-property-scaling">scaling</a>, <a href="#fo-property-scaling-method">scaling-method</a>, <a href="#fo-property-width">width</a>
- </li>
- <li>
- <strong><a href="#fo-property-blockandline-section">Block and Line-related Properties</a>: </strong><a href="#fo-property-hyphenation-keep">hyphenation-keep</a>, <a href="#fo-property-hyphenation-ladder-count">hyphenation-ladder-count</a>, <a href="#fo-property-last-line-end-indent">last-line-end-indent</a>, <a href="#fo-property-line-height">line-height</a>, <a href="#fo-property-line-height-shift-adjustment">line-height-shift-adjustment</a>, <a href="#fo-property-line-stacking-strategy">line-stacking-strategy</a>, <a href="#fo-property-linefeed-treatment">linefeed-treatment</a>, <a href="#fo-property-white-space-treatment">white-space-treatment</a>, <a href="#fo-property-text-align">text-align</a>, <a href="#fo-property-text-align-last">text-align-last</a>, <a href="#fo-property-text-indent">text-indent</a>, <a href="#fo-property-white-space-collapse">white-space-collapse</a>, <a href="#fo-property-wrap-option">wrap-option</a>
- </li>
- <li>
- <strong><a href="#fo-property-char-section">Character Properties</a>: </strong><a href="#fo-property-character">character</a>, <a href="#fo-property-letter-spacing">letter-spacing</a>, <a href="#fo-property-suppress-at-line-break">suppress-at-line-break</a>, <a href="#fo-property-text-decoration">text-decoration</a>, <a href="#fo-property-text-shadow">text-shadow</a>, <a href="#fo-property-text-transform">text-transform</a>, <a href="#fo-property-treat-as-word-space">treat-as-word-space</a>, <a href="#fo-property-word-spacing">word-spacing</a>
- </li>
- <li>
- <strong><a href="#fo-property-color-section">Color-related Properties</a>: </strong><a href="#fo-property-color">color</a>, <a href="#fo-property-color-profile-name">color-profile-name</a>, <a href="#fo-property-rendering-intent">rendering-intent</a>
- </li>
- <li>
- <strong><a href="#fo-property-float-section">Float-related Properties</a>: </strong><a href="#fo-property-clear">clear</a>, <a href="#fo-property-float">float</a>, <a href="#fo-property-intrusion-displace">intrusion-displace</a>
- </li>
- <li>
- <strong><a href="#fo-property-keepsbreaks-section">Keeps and Breaks Properties</a>: </strong><a href="#fo-property-break-after">break-after</a>, <a href="#fo-property-break-before">break-before</a>, <a href="#fo-property-keep-together">keep-together</a>, <a href="#fo-property-keep-with-next">keep-with-next</a>, <a href="#fo-property-keep-with-previous">keep-with-previous</a>, <a href="#fo-property-orphans">orphans</a>, <a href="#fo-property-widows">widows</a>
- </li>
- <li>
- <strong><a href="#fo-property-layout-section">Layout-related Properties</a>: </strong><a href="#fo-property-clip">clip</a>, <a href="#fo-property-overflow">overflow</a>, <a href="#fo-property-reference-orientation">reference-orientation</a>, <a href="#fo-property-span">span</a>
- </li>
- <li>
- <strong><a href="#fo-property-leader-section">Leader and Rule Properties</a>: </strong><a href="#fo-property-leader-alignment">leader-alignment</a>, <a href="#fo-property-leader-pattern">leader-pattern</a>, <a href="#fo-property-leader-pattern-width">leader-pattern-width</a>, <a href="#fo-property-leader-length">leader-length</a>, <a href="#fo-property-rule-style">rule-style</a>, <a href="#fo-property-rule-thickness">rule-thickness</a>
- </li>
- <li>
- <strong><a href="#fo-property-dynamiceffects-section">Properties for Dynamic Effects Formatting Objects</a>: </strong><a href="#fo-property-active-state">active-state</a>, <a href="#fo-property-auto-restore">auto-restore</a>, <a href="#fo-property-case-name">case-name</a>, <a href="#fo-property-case-title">case-title</a>, <a href="#fo-property-destination-placement-offset">destination-placement-offset</a>, <a href="#fo-property-external-destination">external-destination</a>, <a href="#fo-property-indicate-destination">indicate-destination</a>, <a href="#fo-property-internal-destination">internal-destination</a>, <a href="#fo-property-show-destination">show-destination</a>, <a href="#fo-property-starting-state">starting-state</a>, <a href="#fo-property-switch-to">switch-to</a>, <a href="#fo-property-target-presentation-context">target-presentation-context</a>, <a href="#fo-property-target-processing-context">target-processing-context</a>, <a href="#fo-property-target-stylesheet">target-stylesheet</a>
- </li>
- <li>
- <strong><a href="#fo-property-markers-section">Properties for Markers</a>: </strong><a href="#fo-property-marker-class-name">marker-class-name</a>, <a href="#fo-property-retrieve-class-name">retrieve-class-name</a>, <a href="#fo-property-retrieve-position">retrieve-position</a>, <a href="#fo-property-retrieve-boundary">retrieve-boundary</a>
- </li>
- <li>
- <strong><a href="#fo-property-numberstring-section">Properties for Number to String Conversion</a>: </strong><a href="#fo-property-format">format</a>, <a href="#fo-property-grouping-separator">grouping-separator</a>, <a href="#fo-property-grouping-size">grouping-size</a>, <a href="#fo-property-letter-value">letter-value</a>
- </li>
- <li>
- <strong><a href="#fo-property-pagination-section">Pagination and Layout Properties</a>: </strong><a href="#fo-property-blank-or-not-blank">blank-or-not-blank</a>, <a href="#fo-property-column-count">column-count</a>, <a href="#fo-property-column-gap">column-gap</a>, <a href="#fo-property-extent">extent</a>, <a href="#fo-property-flow-name">flow-name</a>, <a href="#fo-property-force-page-count">force-page-count</a>, <a href="#fo-property-initial-page-number">initial-page-number</a>, <a href="#fo-property-master-name">master-name</a>, <a href="#fo-property-master-reference">master-reference</a>, <a href="#fo-property-maximum-repeats">maximum-repeats</a>, <a href="#fo-property-media-usage">media-usage</a>, <a href="#fo-property-odd-or-even">odd-or-even</a>, <a href="#fo-property-page-height">page-height</a>, <a href="#fo-property-page-position">page-position</a>, <a href="#fo-property-page-width">page-width</a>, <a href="#fo-property-precedence">precedence</a>, <a href="#fo-property-region-name">region-name</a>
- </li>
- <li>
- <strong><a href="#fo-property-table-section">Table Properties</a>: </strong><a href="#fo-property-border-after-precedence">border-after-precedence</a>, <a href="#fo-property-border-before-precedence">border-before-precedence</a>, <a href="#fo-property-border-collapse">border-collapse</a>, <a href="#fo-property-border-end-precedence">border-end-precedence</a>, <a href="#fo-property-border-separation">border-separation</a>, <a href="#fo-property-border-start-precedence">border-start-precedence</a>, <a href="#fo-property-caption-side">caption-side</a>, <a href="#fo-property-column-number">column-number</a>, <a href="#fo-property-column-width">column-width</a>, <a href="#fo-property-empty-cells">empty-cells</a>, <a href="#fo-property-ends-row">ends-row</a>, <a href="#fo-property-number-columns-repeated">number-columns-repeated</a>, <a href="#fo-property-number-columns-spanned">number-columns-spanned</a>, <a href="#fo-property-number-rows-spanned">number-rows-spanned</a>, <a href="#fo-property-starts-row">starts-row</a>, <a href="#fo-property-table-layout">table-layout</a>, <a href="#fo-property-table-omit-footer-at-break">table-omit-footer-at-break</a>, <a href="#fo-property-table-omit-header-at-break">table-omit-header-at-break</a>
- </li>
- <li>
- <strong><a href="#fo-property-writingmode-section">Writing-mode-related Properties</a>: </strong><a href="#fo-property-direction">direction</a>, <a href="#fo-property-glyph-orientation-horizontal">glyph-orientation-horizontal</a>, <a href="#fo-property-glyph-orientation-vertical">glyph-orientation-vertical</a>, <a href="#fo-property-text-altitude">text-altitude</a>, <a href="#fo-property-text-depth">text-depth</a>, <a href="#fo-property-unicode-bidi">unicode-bidi</a>, <a href="#fo-property-writing-mode">writing-mode</a>
- </li>
- <li>
- <strong><a href="#fo-property-misc-section">Miscellaneous Properties</a>: </strong><a href="#fo-property-content-type">content-type</a>, <a href="#fo-property-id">id</a>, <a href="#fo-property-provisional-label-separation">provisional-label-separation</a>, <a href="#fo-property-provisional-distance-between-starts">provisional-distance-between-starts</a>, <a href="#fo-property-ref-id">ref-id</a>, <a href="#fo-property-score-spaces">score-spaces</a>, <a href="#fo-property-src">src</a>, <a href="#fo-property-visibility">visibility</a>, <a href="#fo-property-z-index">z-index</a>
- </li>
- <li>
- <strong><a href="#fo-property-shorthand-section">Shorthand Properties</a>: </strong><a href="#fo-property-background">background</a>, <a href="#fo-property-background-position">background-position</a>, <a href="#fo-property-border">border</a>, <a href="#fo-property-border-bottom">border-bottom</a>, <a href="#fo-property-border-color">border-color</a>, <a href="#fo-property-border-left">border-left</a>, <a href="#fo-property-border-right">border-right</a>, <a href="#fo-property-border-style">border-style</a>, <a href="#fo-property-border-spacing">border-spacing</a>, <a href="#fo-property-border-top">border-top</a>, <a href="#fo-property-border-width">border-width</a>, <a href="#fo-property-cue">cue</a>, <a href="#fo-property-font">font</a>, <a href="#fo-property-margin">margin</a>, <a href="#fo-property-padding">padding</a>, <a href="#fo-property-page-break-after">page-break-after</a>, <a href="#fo-property-page-break-before">page-break-before</a>, <a href="#fo-property-page-break-inside">page-break-inside</a>, <a href="#fo-property-pause">pause</a>, <a href="#fo-property-position">position</a>, <a href="#fo-property-size">size</a>, <a href="#fo-property-vertical-align">vertical-align</a>, <a href="#fo-property-white-space">white-space</a>, <a href="#fo-property-xml:lang">xml:lang</a>
- </li>
+ <li><strong><a href="#fo-object-decl-section">Declarations and Pagination and Layout Formatting
+ Objects</a>:</strong>
+ <a href="#fo-object-root">root</a>,
+ <a href="#fo-object-declarations">declarations</a>,
+ <a href="#fo-object-color-profile">color-profile</a>,
+ <a href="#fo-object-page-sequence">page-sequence</a>,
+ <a href="#fo-object-layout-master-set">layout-master-set</a>,
+ <a href="#fo-object-page-sequence-master">page-sequence-master</a>,
+ <a href="#fo-object-single-page-master-reference">single-page-master-reference</a>,
+ <a href="#fo-object-repeatable-page-master-reference">repeatable-page-master-reference</a>,
+ <a href="#fo-object-repeatable-page-master-alternatives">repeatable-page-master-alternatives</a>,
+ <a href="#fo-object-conditional-page-master-reference">conditional-page-master-reference</a>,
+ <a href="#fo-object-simple-page-master">simple-page-master</a>,
+ <a href="#fo-object-region-body">region-body</a>,
+ <a href="#fo-object-region-before">region-before</a>,
+ <a href="#fo-object-region-after">region-after</a>,
+ <a href="#fo-object-region-start">region-start</a>,
+ <a href="#fo-object-region-end">region-end</a>,
+ <a href="#fo-object-flow">flow</a>,
+ <a href="#fo-object-static-content">static-content</a>,
+ <a href="#fo-object-title">title</a></li>
+
+ <li><strong><a href="#fo-object-block-section">Block Formatting Objects</a>:</strong>
+ <a href="#fo-object-block">block</a>,
+ <a href="#fo-object-block-container">block-container</a></li>
+
+ <li><strong><a href="#fo-object-inline-section">Inline Formatting Objects</a>:</strong>
+ <a href="#fo-object-bidi-override">bidi-override</a>,
+ <a href="#fo-object-character">character</a>,
+ <a href="#fo-object-initial-property-set">initial-property-set</a>,
+ <a href="#fo-object-external-graphic">external-graphic</a>,
+ <a href="#fo-object-instream-foreign-object">instream-foreign-object</a>,
+ <a href="#fo-object-inline">inline</a>,
+ <a href="#fo-object-inline-container">inline-container</a>,
+ <a href="#fo-object-leader">leader</a>,
+ <a href="#fo-object-page-number">page-number</a>,
+ <a href="#fo-object-page-number-citation">page-number-citation</a></li>
+
+ <li><strong><a href="#fo-object-table-section">Table Formatting Objects</a>:</strong>
+ <a href="#fo-object-table-and-caption">table-and-caption</a>,
+ <a href="#fo-object-table">table</a>,
+ <a href="#fo-object-table-column">table-column</a>,
+ <a href="#fo-object-table-caption">table-caption</a>,
+ <a href="#fo-object-table-header">table-header</a>,
+ <a href="#fo-object-table-footer">table-footer</a>,
+ <a href="#fo-object-table-body">table-body</a>,
+ <a href="#fo-object-table-row">table-row</a>,
+ <a href="#fo-object-table-cell">table-cell</a></li>
+
+ <li><strong><a href="#fo-object-list-section">List Formatting Objects</a>:</strong>
+ <a href="#fo-object-list-block">list-block</a>,
+ <a href="#fo-object-list-item">list-item</a>,
+ <a href="#fo-object-list-item-body">list-item-body</a>,
+ <a href="#fo-object-list-item-label">list-item-label</a></li>
+
+ <li><strong><a href="#fo-object-link-section">Link and Multi Formatting Objects</a>:</strong>
+ <a href="#fo-object-basic-link">basic-link</a>,
+ <a href="#fo-object-multi-switch">multi-switch</a>,
+ <a href="#fo-object-multi-case">multi-case</a>,
+ <a href="#fo-object-multi-toggle">multi-toggle</a>,
+ <a href="#fo-object-multi-properties">multi-properties</a>,
+ <a href="#fo-object-multi-property-set">multi-property-set</a></li>
+
+ <li><strong><a href="#fo-object-bookmarks-section">Formatting Objects for
+ Bookmarks</a>:</strong>
+ <a href="#fo-object-bookmark-tree">bookmark-tree</a>,
+ <a href="#fo-object-bookmark">bookmark</a>,
+ <a href="#fo-object-bookmark-title">bookmark-title</a></li>
+
+ <li><strong><a href="#fo-object-outofline-section">Out-of-line Formatting Objects</a>:</strong>
+ <a href="#fo-object-float">float</a>,
+ <a href="#fo-object-footnote">footnote</a>,
+ <a href="#fo-object-footnote-body">footnote-body</a></li>
+
+ <li><strong><a href="#fo-object-other-section">Other Formatting Objects</a>:</strong>
+ <a href="#fo-object-wrapper">wrapper</a>,
+ <a href="#fo-object-marker">marker</a>,
+ <a href="#fo-object-retrieve-marker">retrieve-marker</a></li>
+ </ul>
+
+ <h2><a href="#fo-property-section">XSL-FO Property Support</a></h2>
+
+ <ul>
+ <li><strong><a href="#fo-property-commonaccess-section">Common Accessibility
+ Properties</a>:</strong>
+ <a href="#fo-property-source-document">source-document</a>,
+ <a href="#fo-property-role">role</a></li>
+
+ <li><strong><a href="#fo-property-commonabspos-section">Common Absolute Position
+ Properties</a>:</strong>
+ <a href="#fo-property-absolute-position">absolute-position</a>,
+ <a href="#fo-property-top">top</a>,
+ <a href="#fo-property-right">right</a>,
+ <a href="#fo-property-bottom">bottom</a>,
+ <a href="#fo-property-left">left</a></li>
+
+ <li><strong><a href="#fo-property-commonaural-section">Common Aural Properties</a>:</strong>
+ <a href="#fo-property-azimuth">azimuth</a>,
+ <a href="#fo-property-cue-after">cue-after</a>,
+ <a href="#fo-property-cue-before">cue-before</a>,
+ <a href="#fo-property-elevation">elevation</a>,
+ <a href="#fo-property-pause-after">pause-after</a>,
+ <a href="#fo-property-pause-before">pause-before</a>,
+ <a href="#fo-property-pitch">pitch</a>,
+ <a href="#fo-property-pitch-range">pitch-range</a>,
+ <a href="#fo-property-play-during">play-during</a>,
+ <a href="#fo-property-richness">richness</a>,
+ <a href="#fo-property-speak">speak</a>,
+ <a href="#fo-property-speak-header">speak-header</a>,
+ <a href="#fo-property-speak-numeral">speak-numeral</a>,
+ <a href="#fo-property-speak-punctuation">speak-punctuation</a>,
+ <a href="#fo-property-speech-rate">speech-rate</a>,
+ <a href="#fo-property-stress">stress</a>,
+ <a href="#fo-property-voice-family">voice-family</a>,
+ <a href="#fo-property-volume">volume</a></li>
+
+ <li><strong><a href="#fo-property-commonenv-section">Common Border, Padding, and Background
+ Properties</a>:</strong>
+ <a href="#fo-property-background-attachment">background-attachment</a>,
+ <a href="#fo-property-background-color">background-color</a>,
+ <a href="#fo-property-background-image">background-image</a>,
+ <a href="#fo-property-background-repeat">background-repeat</a>,
+ <a href="#fo-property-background-position-horizontal">background-position-horizontal</a>,
+ <a href="#fo-property-background-position-vertical">background-position-vertical</a>,
+ <a href="#fo-property-border-before-color">border-before-color</a>,
+ <a href="#fo-property-border-before-style">border-before-style</a>,
+ <a href="#fo-property-border-before-width">border-before-width</a>,
+ <a href="#fo-property-border-after-color">border-after-color</a>,
+ <a href="#fo-property-border-after-style">border-after-style</a>,
+ <a href="#fo-property-border-after-width">border-after-width</a>,
+ <a href="#fo-property-border-start-color">border-start-color</a>,
+ <a href="#fo-property-border-start-style">border-start-style</a>,
+ <a href="#fo-property-border-start-width">border-start-width</a>,
+ <a href="#fo-property-border-end-color">border-end-color</a>,
+ <a href="#fo-property-border-end-style">border-end-style</a>,
+ <a href="#fo-property-border-end-width">border-end-width</a>,
+ <a href="#fo-property-border-top-color">border-top-color</a>,
+ <a href="#fo-property-border-top-style">border-top-style</a>,
+ <a href="#fo-property-border-top-width">border-top-width</a>,
+ <a href="#fo-property-border-bottom-color">border-bottom-color</a>,
+ <a href="#fo-property-border-bottom-style">border-bottom-style</a>,
+ <a href="#fo-property-border-bottom-width">border-bottom-width</a>,
+ <a href="#fo-property-border-left-color">border-left-color</a>,
+ <a href="#fo-property-border-left-style">border-left-style</a>,
+ <a href="#fo-property-border-left-width">border-left-width</a>,
+ <a href="#fo-property-border-right-color">border-right-color</a>,
+ <a href="#fo-property-border-right-style">border-right-style</a>,
+ <a href="#fo-property-border-right-width">border-right-width</a>,
+ <a href="#fo-property-padding-before">padding-before</a>,
+ <a href="#fo-property-padding-after">padding-after</a>,
+ <a href="#fo-property-padding-start">padding-start</a>,
+ <a href="#fo-property-padding-end">padding-end</a>,
+ <a href="#fo-property-padding-top">padding-top</a>,
+ <a href="#fo-property-padding-bottom">padding-bottom</a>,
+ <a href="#fo-property-padding-left">padding-left</a>,
+ <a href="#fo-property-padding-right">padding-right</a></li>
+
+ <li><strong><a href="#fo-property-commonfont-section">Common Font Properties</a>:</strong>
+ <a href="#fo-property-font-family">font-family</a>,
+ <a href="#fo-property-font-selection-strategy">font-selection-strategy</a>,
+ <a href="#fo-property-font-size">font-size</a>,
+ <a href="#fo-property-font-stretch">font-stretch</a>,
+ <a href="#fo-property-font-size-adjust">font-size-adjust</a>,
+ <a href="#fo-property-font-style">font-style</a>,
+ <a href="#fo-property-font-variant">font-variant</a>,
+ <a href="#fo-property-font-weight">font-weight</a></li>
+
+ <li><strong><a href="#fo-property-commonhyphen-section">Common Hyphenation
+ Properties</a>:</strong>
+ <a href="#fo-property-country">country</a>,
+ <a href="#fo-property-language">language</a>,
+ <a href="#fo-property-script">script</a>,
+ <a href="#fo-property-hyphenate">hyphenate</a>,
+ <a href="#fo-property-hyphenation-character">hyphenation-character</a>,
+ <a href="#fo-property-hyphenation-push-character-count">hyphenation-push-character-count</a>,
+ <a href="#fo-property-hyphenation-remain-character-count">hyphenation-remain-character-count</a></li>
+
+ <li><strong><a href="#fo-property-commonmarginblock-section">Common Margin Properties -
+ Block</a>:</strong>
+ <a href="#fo-property-margin-top">margin-top</a>,
+ <a href="#fo-property-margin-bottom">margin-bottom</a>,
+ <a href="#fo-property-margin-left">margin-left</a>,
+ <a href="#fo-property-margin-right">margin-right</a>,
+ <a href="#fo-property-space-before">space-before</a>,
+ <a href="#fo-property-space-after">space-after</a>,
+ <a href="#fo-property-start-indent">start-indent</a>,
+ <a href="#fo-property-end-indent">end-indent</a></li>
+
+ <li><strong><a href="#fo-property-commonmargininline-section">Common Margin Properties -
+ Inline</a>:</strong>
+ <a href="#fo-property-space-end">space-end</a>,
+ <a href="#fo-property-space-start">space-start</a></li>
+
+ <li><strong><a href="#fo-property-commonrelpos-section">Common Relative Position
+ Properties</a>:</strong> <a href="#fo-property-relative-position">relative-position</a></li>
+
+ <li><strong><a href="#fo-property-areaalign-section">Area Alignment Properties</a>:</strong>
+ <a href="#fo-property-alignment-adjust">alignment-adjust</a>,
+ <a href="#fo-property-alignment-baseline">alignment-baseline</a>,
+ <a href="#fo-property-baseline-shift">baseline-shift</a>,
+ <a href="#fo-property-display-align">display-align</a>,
+ <a href="#fo-property-dominant-baseline">dominant-baseline</a>,
+ <a href="#fo-property-relative-align">relative-align</a></li>
+
+ <li><strong><a href="#fo-property-areadim-section">Area Dimension Properties</a>:</strong>
+ <a href="#fo-property-block-progression-dimension">block-progression-dimension</a>,
+ <a href="#fo-property-content-height">content-height</a>,
+ <a href="#fo-property-content-width">content-width</a>,
+ <a href="#fo-property-height">height</a>,
+ <a href="#fo-property-inline-progression-dimension">inline-progression-dimension</a>,
+ <a href="#fo-property-max-height">max-height</a>,
+ <a href="#fo-property-max-width">max-width</a>,
+ <a href="#fo-property-min-height">min-height</a>,
+ <a href="#fo-property-min-width">min-width</a>,
+ <a href="#fo-property-scaling">scaling</a>,
+ <a href="#fo-property-scaling-method">scaling-method</a>,
+ <a href="#fo-property-width">width</a></li>
+
+ <li><strong><a href="#fo-property-blockandline-section">Block and Line-related
+ Properties</a>:</strong>
+ <a href="#fo-property-hyphenation-keep">hyphenation-keep</a>,
+ <a href="#fo-property-hyphenation-ladder-count">hyphenation-ladder-count</a>,
+ <a href="#fo-property-last-line-end-indent">last-line-end-indent</a>,
+ <a href="#fo-property-line-height">line-height</a>,
+ <a href="#fo-property-line-height-shift-adjustment">line-height-shift-adjustment</a>,
+ <a href="#fo-property-line-stacking-strategy">line-stacking-strategy</a>,
+ <a href="#fo-property-linefeed-treatment">linefeed-treatment</a>,
+ <a href="#fo-property-white-space-treatment">white-space-treatment</a>,
+ <a href="#fo-property-text-align">text-align</a>,
+ <a href="#fo-property-text-align-last">text-align-last</a>,
+ <a href="#fo-property-text-indent">text-indent</a>,
+ <a href="#fo-property-white-space-collapse">white-space-collapse</a>,
+ <a href="#fo-property-wrap-option">wrap-option</a></li>
+
+ <li><strong><a href="#fo-property-char-section">Character Properties</a>:</strong>
+ <a href="#fo-property-character">character</a>,
+ <a href="#fo-property-letter-spacing">letter-spacing</a>,
+ <a href="#fo-property-suppress-at-line-break">suppress-at-line-break</a>,
+ <a href="#fo-property-text-decoration">text-decoration</a>,
+ <a href="#fo-property-text-shadow">text-shadow</a>,
+ <a href="#fo-property-text-transform">text-transform</a>,
+ <a href="#fo-property-treat-as-word-space">treat-as-word-space</a>,
+ <a href="#fo-property-word-spacing">word-spacing</a></li>
+
+ <li><strong><a href="#fo-property-color-section">Color-related Properties</a>:</strong>
+ <a href="#fo-property-color">color</a>,
+ <a href="#fo-property-color-profile-name">color-profile-name</a>,
+ <a href="#fo-property-rendering-intent">rendering-intent</a></li>
+
+ <li><strong><a href="#fo-property-float-section">Float-related Properties</a>:</strong>
+ <a href="#fo-property-clear">clear</a>,
+ <a href="#fo-property-float">float</a>,
+ <a href="#fo-property-intrusion-displace">intrusion-displace</a></li>
+
+ <li><strong><a href="#fo-property-keepsbreaks-section">Keeps and Breaks
+ Properties</a>:</strong>
+ <a href="#fo-property-break-after">break-after</a>,
+ <a href="#fo-property-break-before">break-before</a>,
+ <a href="#fo-property-keep-together">keep-together</a>,
+ <a href="#fo-property-keep-with-next">keep-with-next</a>,
+ <a href="#fo-property-keep-with-previous">keep-with-previous</a>,
+ <a href="#fo-property-orphans">orphans</a>,
+ <a href="#fo-property-widows">widows</a></li>
+
+ <li><strong><a href="#fo-property-layout-section">Layout-related Properties</a>:</strong>
+ <a href="#fo-property-clip">clip</a>,
+ <a href="#fo-property-overflow">overflow</a>,
+ <a href="#fo-property-reference-orientation">reference-orientation</a>,
+ <a href="#fo-property-span">span</a></li>
+
+ <li><strong><a href="#fo-property-leader-section">Leader and Rule Properties</a>:</strong>
+ <a href="#fo-property-leader-alignment">leader-alignment</a>,
+ <a href="#fo-property-leader-pattern">leader-pattern</a>,
+ <a href="#fo-property-leader-pattern-width">leader-pattern-width</a>,
+ <a href="#fo-property-leader-length">leader-length</a>,
+ <a href="#fo-property-rule-style">rule-style</a>,
+ <a href="#fo-property-rule-thickness">rule-thickness</a></li>
+
+ <li><strong><a href="#fo-property-dynamiceffects-section">Properties for Dynamic Effects
+ Formatting Objects</a>:</strong>
+ <a href="#fo-property-active-state">active-state</a>,
+ <a href="#fo-property-auto-restore">auto-restore</a>,
+ <a href="#fo-property-case-name">case-name</a>,
+ <a href="#fo-property-case-title">case-title</a>,
+ <a href="#fo-property-destination-placement-offset">destination-placement-offset</a>,
+ <a href="#fo-property-external-destination">external-destination</a>,
+ <a href="#fo-property-indicate-destination">indicate-destination</a>,
+ <a href="#fo-property-internal-destination">internal-destination</a>,
+ <a href="#fo-property-show-destination">show-destination</a>,
+ <a href="#fo-property-starting-state">starting-state</a>,
+ <a href="#fo-property-switch-to">switch-to</a>,
+ <a href="#fo-property-target-presentation-context">target-presentation-context</a>,
+ <a href="#fo-property-target-processing-context">target-processing-context</a>,
+ <a href="#fo-property-target-stylesheet">target-stylesheet</a></li>
+
+ <li><strong><a href="#fo-property-markers-section">Properties for Markers</a>:</strong>
+ <a href="#fo-property-marker-class-name">marker-class-name</a>,
+ <a href="#fo-property-retrieve-class-name">retrieve-class-name</a>,
+ <a href="#fo-property-retrieve-position">retrieve-position</a>,
+ <a href="#fo-property-retrieve-boundary">retrieve-boundary</a></li>
+
+ <li><strong><a href="#fo-property-numberstring-section">Properties for Number to String
+ Conversion</a>:</strong>
+ <a href="#fo-property-format">format</a>,
+ <a href="#fo-property-grouping-separator">grouping-separator</a>,
+ <a href="#fo-property-grouping-size">grouping-size</a>,
+ <a href="#fo-property-letter-value">letter-value</a></li>
+
+ <li><strong><a href="#fo-property-pagination-section">Pagination and Layout
+ Properties</a>:</strong>
+ <a href="#fo-property-blank-or-not-blank">blank-or-not-blank</a>,
+ <a href="#fo-property-column-count">column-count</a>,
+ <a href="#fo-property-column-gap">column-gap</a>,
+ <a href="#fo-property-extent">extent</a>,
+ <a href="#fo-property-flow-name">flow-name</a>,
+ <a href="#fo-property-force-page-count">force-page-count</a>,
+ <a href="#fo-property-initial-page-number">initial-page-number</a>,
+ <a href="#fo-property-master-name">master-name</a>,
+ <a href="#fo-property-master-reference">master-reference</a>,
+ <a href="#fo-property-maximum-repeats">maximum-repeats</a>,
+ <a href="#fo-property-media-usage">media-usage</a>,
+ <a href="#fo-property-odd-or-even">odd-or-even</a>,
+ <a href="#fo-property-page-height">page-height</a>,
+ <a href="#fo-property-page-position">page-position</a>,
+ <a href="#fo-property-page-width">page-width</a>,
+ <a href="#fo-property-precedence">precedence</a>,
+ <a href="#fo-property-region-name">region-name</a></li>
+
+ <li><strong><a href="#fo-property-table-section">Table Properties</a>:</strong>
+ <a href="#fo-property-border-after-precedence">border-after-precedence</a>,
+ <a href="#fo-property-border-before-precedence">border-before-precedence</a>,
+ <a href="#fo-property-border-collapse">border-collapse</a>,
+ <a href="#fo-property-border-end-precedence">border-end-precedence</a>,
+ <a href="#fo-property-border-separation">border-separation</a>,
+ <a href="#fo-property-border-start-precedence">border-start-precedence</a>,
+ <a href="#fo-property-caption-side">caption-side</a>,
+ <a href="#fo-property-column-number">column-number</a>,
+ <a href="#fo-property-column-width">column-width</a>,
+ <a href="#fo-property-empty-cells">empty-cells</a>,
+ <a href="#fo-property-ends-row">ends-row</a>,
+ <a href="#fo-property-number-columns-repeated">number-columns-repeated</a>,
+ <a href="#fo-property-number-columns-spanned">number-columns-spanned</a>,
+ <a href="#fo-property-number-rows-spanned">number-rows-spanned</a>,
+ <a href="#fo-property-starts-row">starts-row</a>,
+ <a href="#fo-property-table-layout">table-layout</a>,
+ <a href="#fo-property-table-omit-footer-at-break">table-omit-footer-at-break</a>,
+ <a href="#fo-property-table-omit-header-at-break">table-omit-header-at-break</a></li>
+
+ <li><strong><a href="#fo-property-writingmode-section">Writing-mode-related
+ Properties</a>:</strong>
+ <a href="#fo-property-direction">direction</a>,
+ <a href="#fo-property-glyph-orientation-horizontal">glyph-orientation-horizontal</a>,
+ <a href="#fo-property-glyph-orientation-vertical">glyph-orientation-vertical</a>,
+ <a href="#fo-property-text-altitude">text-altitude</a>,
+ <a href="#fo-property-text-depth">text-depth</a>,
+ <a href="#fo-property-unicode-bidi">unicode-bidi</a>,
+ <a href="#fo-property-writing-mode">writing-mode</a></li>
+
+ <li><strong><a href="#fo-property-misc-section">Miscellaneous Properties</a>:</strong>
+ <a href="#fo-property-content-type">content-type</a>,
+ <a href="#fo-property-id">id</a>,
+ <a href="#fo-property-provisional-label-separation">provisional-label-separation</a>,
+ <a href="#fo-property-provisional-distance-between-starts">provisional-distance-between-starts</a>,
+ <a href="#fo-property-ref-id">ref-id</a>,
+ <a href="#fo-property-score-spaces">score-spaces</a>,
+ <a href="#fo-property-src">src</a>,
+ <a href="#fo-property-visibility">visibility</a>,
+ <a href="#fo-property-z-index">z-index</a></li>
+
+ <li><strong><a href="#fo-property-shorthand-section">Shorthand Properties</a>:</strong>
+ <a href="#fo-property-background">background</a>,
+ <a href="#fo-property-background-position">background-position</a>,
+ <a href="#fo-property-border">border</a>,
+ <a href="#fo-property-border-bottom">border-bottom</a>,
+ <a href="#fo-property-border-color">border-color</a>,
+ <a href="#fo-property-border-left">border-left</a>,
+ <a href="#fo-property-border-right">border-right</a>,
+ <a href="#fo-property-border-style">border-style</a>,
+ <a href="#fo-property-border-spacing">border-spacing</a>,
+ <a href="#fo-property-border-top">border-top</a>,
+ <a href="#fo-property-border-width">border-width</a>,
+ <a href="#fo-property-cue">cue</a>,
+ <a href="#fo-property-font">font</a>,
+ <a href="#fo-property-margin">margin</a>,
+ <a href="#fo-property-padding">padding</a>,
+ <a href="#fo-property-page-break-after">page-break-after</a>,
+ <a href="#fo-property-page-break-before">page-break-before</a>,
+ <a href="#fo-property-page-break-inside">page-break-inside</a>,
+ <a href="#fo-property-pause">pause</a>,
+ <a href="#fo-property-position">position</a>,
+ <a href="#fo-property-size">size</a>,
+ <a href="#fo-property-vertical-align">vertical-align</a>,
+ <a href="#fo-property-white-space">white-space</a>,
+ <a href="#fo-property-xml:lang">xml:lang</a></li>
</ul>
+
<h2><a href="#fo-function-core-library-section">XSL-FO Core Function Library Support</a></h2>
+
<ul class="minitoc">
- <li>
- <strong><a href="#fo-function-number-section">Number Functions</a>:</strong>
- <a href="#fo-function-floor">floor</a>,
- <a href="#fo-function-ceiling">ceiling</a>,
- <a href="#fo-function-round">round</a>,
- <a href="#fo-function-min">min</a>,
- <a href="#fo-function-max">max</a>,
- <a href="#fo-function-abs">abs</a>
- </li>
- <li>
- <strong><a href="#fo-function-color-section">Color Functions</a>:</strong>
- <a href="#fo-function-rgb">rgb</a>,
- <a href="#fo-function-rgb-icc">rgb-icc</a>,
- <a href="#fo-function-system-color">system-color</a>
- </li>
- <li>
- <strong><a href="#fo-function-font-section">Font Functions</a>:</strong>
- <a href="#fo-function-system-font">system-font</a>
- </li>
- <li>
- <strong><a href="#fo-function-property-value-section">Property Value Functions</a>:</strong>
- <a href="#fo-function-inherited-property-value">inherited-property-value</a>,
- <a href="#fo-function-label-end">label-end</a>,
- <a href="#fo-function-body-start">body-start</a>,
- <a href="#fo-function-from-parent">from-parent</a>,
- <a href="#fo-function-from-nearest-specified-value">from-nearest-specified-value</a>,
- <a href="#fo-function-from-table-column">from-table-column</a>,
- <a href="#fo-function-proportional-column-width">proportional-column-width</a>,
- <a href="#fo-function-merge-property-values">merge-property-values</a>
- </li>
+ <li><strong><a href="#fo-function-number-section">Number Functions</a>:</strong>
+ <a href="#fo-function-floor">floor</a>,
+ <a href="#fo-function-ceiling">ceiling</a>,
+ <a href="#fo-function-round">round</a>,
+ <a href="#fo-function-min">min</a>,
+ <a href="#fo-function-max">max</a>,
+ <a href="#fo-function-abs">abs</a></li>
+
+ <li><strong><a href="#fo-function-color-section">Color Functions</a>:</strong>
+ <a href="#fo-function-rgb">rgb</a>,
+ <a href="#fo-function-rgb-icc">rgb-icc</a>,
+ <a href="#fo-function-system-color">system-color</a></li>
+
+ <li><strong><a href="#fo-function-font-section">Font Functions</a>:</strong>
+ <a href="#fo-function-system-font">system-font</a></li>
+
+ <li><strong><a href="#fo-function-property-value-section">Property Value
+ Functions</a>:</strong>
+ <a href="#fo-function-inherited-property-value">inherited-property-value</a>,
+ <a href="#fo-function-label-end">label-end</a>,
+ <a href="#fo-function-body-start">body-start</a>,
+ <a href="#fo-function-from-parent">from-parent</a>,
+ <a href="#fo-function-from-nearest-specified-value">from-nearest-specified-value</a>,
+ <a href="#fo-function-from-table-column">from-table-column</a>,
+ <a href="#fo-function-proportional-column-width">proportional-column-width</a>,
+ <a href="#fo-function-merge-property-values">merge-property-values</a></li>
</ul>
- <h1><a name="fo-object-section">XSL-FO Object Support Table</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo-section">&sect;6</a>)</h1>
- <p>
- The following is a summary of FOP's current support for the standard XSL-FO objects.
- </p>
+
+ <h1><a name="fo-object-section" id="fo-object-section">XSL-FO Object Support Table</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo-section">&sect;6</a>)</h1>
+
+ <p>The following is a summary of FOP's current support for the standard XSL-FO objects.</p>
+
<table border="1">
<tr>
- <th rowspan="2">
- Object Name </th>
- <th rowspan="2" align="center">
- XSL-FO Conformance Level </th>
- <th rowspan="2" align="center">
- Citation </th>
- <th colspan="4" align="center">
- Support&nbsp;in&nbsp;FOP </th>
- <th rowspan="2">
- Comments </th>
+ <th rowspan="2">Object Name</th>
+
+ <th rowspan="2" align="center">XSL-FO Conformance Level</th>
+
+ <th rowspan="2" align="center">Citation</th>
+
+ <th colspan="4" align="center">Support&nbsp;in&nbsp;FOP</th>
+
+ <th rowspan="2">Comments</th>
</tr>
+
<tr>
- <th align="center">
- 0.20.5 (previous) </th>
- <th align="center"> 0.93 (stable) </th>
- <th align="center">
- 0.94 (stable) </th>
- <th align="center">
- develop- ment </th>
+ <th align="center">0.20.5 (ancient)</th>
+
+ <th align="center">0.94 (stable)</th>
+
+ <th align="center">0.95 (beta)</th>
+
+ <th align="center">develop- ment</th>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-decl-section">Declarations and Pagination and Layout Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N10029-Declarations-and-Pagination-and-Layout-Formatting-Objects">&sect;6.4</a>) </td>
+ <td class="category" colspan="8"><a name="fo-object-decl-section" id=
+ "fo-object-decl-section">Declarations and Pagination and Layout Formatting Objects</a>
+ (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N10029-Declarations-and-Pagination-and-Layout-Formatting-Objects">&sect;6.4</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-root">root</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_root">&sect;6.4.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-declarations">declarations</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_declarations">&sect;6.4.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-color-profile">color-profile</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_color-profile">&sect;6.4.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-page-sequence">page-sequence</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-sequence">&sect;6.4.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-layout-master-set">layout-master-set</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_layout-master-set">&sect;6.4.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-page-sequence-master">page-sequence-master</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-sequence-master">&sect;6.4.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-single-page-master-reference">single-page-master-reference</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_single-page-master-reference">&sect;6.4.8</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-repeatable-page-master-reference">repeatable-page-master-reference</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_repeatable-page-master-reference">&sect;6.4.9</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-repeatable-page-master-alternatives">repeatable-page-master-alternatives</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_repeatable-page-master-alternatives">&sect;6.4.10</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-conditional-page-master-reference">conditional-page-master-reference</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_conditional-page-master-reference">&sect;6.4.11</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-simple-page-master">simple-page-master</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_simple-page-master">&sect;6.4.12</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-root" id="fo-object-root">root</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_root">&sect;6.4.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-declarations" id="fo-object-declarations">declarations</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_declarations">&sect;6.4.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-color-profile" id="fo-object-color-profile">color-profile</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_color-profile">&sect;6.4.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-page-sequence" id="fo-object-page-sequence">page-sequence</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-sequence">&sect;6.4.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-layout-master-set" id=
+ "fo-object-layout-master-set">layout-master-set</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_layout-master-set">&sect;6.4.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-page-sequence-master" id=
+ "fo-object-page-sequence-master">page-sequence-master</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-sequence-master">&sect;6.4.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-single-page-master-reference" id=
+ "fo-object-single-page-master-reference">single-page-master-reference</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_single-page-master-reference">&sect;6.4.8</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-repeatable-page-master-reference" id=
+ "fo-object-repeatable-page-master-reference">repeatable-page-master-reference</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_repeatable-page-master-reference">&sect;6.4.9</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-repeatable-page-master-alternatives" id=
+ "fo-object-repeatable-page-master-alternatives">repeatable-page-master-alternatives</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_repeatable-page-master-alternatives">
+ &sect;6.4.10</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-conditional-page-master-reference" id=
+ "fo-object-conditional-page-master-reference">conditional-page-master-reference</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_conditional-page-master-reference">
+ &sect;6.4.11</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-simple-page-master" id=
+ "fo-object-simple-page-master">simple-page-master</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_simple-page-master">&sect;6.4.12</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="center">
<ul>
- <li>
- [0.93 and later] The page width may not change among pages of the same page-sequence
- unless a forced break is inserted. </li>
- </ul> </td>
+ <li>[0.94 and later] The page width may not change among pages of the same page-sequence
+ unless a forced break is inserted.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-region-body">region-body</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-body">&sect;6.4.13</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center"> </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-region-before">region-before</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-before">&sect;6.4.14</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-region-after">region-after</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-after">&sect;6.4.15</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-region-start">region-start</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-start">&sect;6.4.16</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-region-end">region-end</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-end">&sect;6.4.17</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-flow">flow</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_flow">&sect;6.4.18</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-static-content">static-content</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_static-content">&sect;6.4.19</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-title">title</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_title">&sect;6.4.20</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-object-region-body" id="fo-object-region-body">region-body</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-body">&sect;6.4.13</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center"></td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-block-section">Block Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N12764-Block-level-Formatting-Objects">&sect;6.5</a>) </td>
+ <td><a name="fo-object-region-before" id="fo-object-region-before">region-before</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-before">&sect;6.4.14</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-block">block</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_block">&sect;6.5.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-block-container">block-container</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_block-container">&sect;6.5.3</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-region-after" id="fo-object-region-after">region-after</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-after">&sect;6.4.15</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-region-start" id="fo-object-region-start">region-start</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-start">&sect;6.4.16</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-region-end" id="fo-object-region-end">region-end</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_region-end">&sect;6.4.17</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-flow" id="fo-object-flow">flow</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_flow">&sect;6.4.18</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-static-content" id="fo-object-static-content">static-content</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_static-content">&sect;6.4.19</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-title" id="fo-object-title">title</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_title">&sect;6.4.20</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-object-block-section" id=
+ "fo-object-block-section">Block Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N12764-Block-level-Formatting-Objects">&sect;6.5</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-block" id="fo-object-block">block</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_block">&sect;6.5.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-block-container" id=
+ "fo-object-block-container">block-container</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_block-container">&sect;6.5.3</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Currently only works as direct child of fo:flow. </li>
- <li>
- [0.20.5] For absolute positioning, use 'position="absolute"' (as 'absolute-position="absolute"' is not implemented), and specify all four of "left", "top", "width" and "height" </li>
- <li>
- [0.93 and later] No known restrictions. </li>
- </ul> </td>
+ <li>[0.20.5] Only works as direct child of fo:flow.</li>
+
+ <li>[0.20.5] For absolute positioning, use 'position="absolute"' (as
+ 'absolute-position="absolute"' is not implemented), and specify all four of "left",
+ "top", "width" and "height"</li>
+
+ <li>[0.94 and later] No known restrictions.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-inline-section">Inline Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N13277-Inline-level-Formatting-Objects">&sect;6.6</a>) </td>
+ <td class="category" colspan="8"><a name="fo-object-inline-section" id=
+ "fo-object-inline-section">Inline Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N13277-Inline-level-Formatting-Objects">&sect;6.6</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-bidi-override">bidi-override</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_bidi-override">&sect;6.6.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-character">character</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_character">&sect;6.6.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-initial-property-set">initial-property-set</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_initial-property-set">&sect;6.6.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-external-graphic">external-graphic</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_external-graphic">&sect;6.6.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-instream-foreign-object">instream-foreign-object</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_instream-foreign-object">&sect;6.6.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-object-bidi-override" id="fo-object-bidi-override">bidi-override</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_bidi-override">&sect;6.6.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-character" id="fo-object-character">character</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_character">&sect;6.6.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-initial-property-set" id=
+ "fo-object-initial-property-set">initial-property-set</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_initial-property-set">&sect;6.6.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-external-graphic" id=
+ "fo-object-external-graphic">external-graphic</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_external-graphic">&sect;6.6.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-instream-foreign-object" id=
+ "fo-object-instream-foreign-object">instream-foreign-object</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_instream-foreign-object">&sect;6.6.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="center">
<ul>
- <li>Built-in support for SVG only, additional namespaces through optional extensions.</li>
- </ul> </td>
+ <li>Built-in support for SVG only, additional namespaces through optional
+ extensions.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-inline">inline</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_inline">&sect;6.6.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-inline-container">inline-container</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_inline-container">&sect;6.6.8</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-leader">leader</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_leader">&sect;6.6.9</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-page-number">page-number</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-number">&sect;6.6.10</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-page-number-citation">page-number-citation</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-number-citation">&sect;6.6.11</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-inline" id="fo-object-inline">inline</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_inline">&sect;6.6.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-inline-container" id=
+ "fo-object-inline-container">inline-container</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_inline-container">&sect;6.6.8</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-leader" id="fo-object-leader">leader</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_leader">&sect;6.6.9</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-page-number" id="fo-object-page-number">page-number</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-number">&sect;6.6.10</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-page-number-citation" id=
+ "fo-object-page-number-citation">page-number-citation</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_page-number-citation">&sect;6.6.11</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Only works for table of contents without any problems. The case where the page number doesn't fit on a line isn't handled, and any text on the same line and after the page-number might not appear exactly where you want it to. </li>
- <li>
- [0.93 and later] After the page number is known, no relayout is performed. The appearance may be suboptimal depending on the use case. </li>
- </ul> </td>
+ <li>[0.20.5] Only works for table of contents without any problems. The case where the
+ page number doesn't fit on a line isn't handled, and any text on the same line and after
+ the page-number might not appear exactly where you want it to.</li>
+
+ <li>[0.94 and later] After the page number is known, no relayout is performed. The
+ appearance may be suboptimal depending on the use case.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-table-section">Table Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N15442-Formatting-Objects-for-Tables">&sect;6.7</a>) </td>
+ <td class="category" colspan="8"><a name="fo-object-table-section" id=
+ "fo-object-table-section">Table Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N15442-Formatting-Objects-for-Tables">&sect;6.7</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-table-and-caption">table-and-caption</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-and-caption">&sect;6.7.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-table">table</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table">&sect;6.7.3</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-table-and-caption" id=
+ "fo-object-table-and-caption">table-and-caption</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-and-caption">&sect;6.7.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-table" id="fo-object-table">table</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table">&sect;6.7.3</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>[0.20.5&ndash;0.93] Only border-collapse="separate"</li>
+ <li>[0.20.5] Only border-collapse="separate"</li>
+
<li>[All] No support for auto layout yet</li>
</ul>
</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-table-column">table-column</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-column">&sect;6.7.4</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-object-table-column" id="fo-object-table-column">table-column</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-column">&sect;6.7.4</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] You must explicitly specify column widths. </li>
- </ul> </td>
+ <li>[0.20.5] You must explicitly specify column widths.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-table-caption">table-caption</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-caption">&sect;6.7.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-table-header">table-header</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-header">&sect;6.7.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-table-footer">table-footer</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-footer">&sect;6.7.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-table-body">table-body</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-body">&sect;6.7.8</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-table-row">table-row</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-row">&sect;6.7.9</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-table-cell">table-cell</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-cell">&sect;6.7.10</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="left">&nbsp; </td>
+ <td><a name="fo-object-table-caption" id="fo-object-table-caption">table-caption</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-caption">&sect;6.7.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-list-section">List Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N17076-Formatting-Objects-for-Lists">&sect;6.8</a>) </td>
+ <td><a name="fo-object-table-header" id="fo-object-table-header">table-header</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-header">&sect;6.7.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-list-block">list-block</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-block">&sect;6.8.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-list-item">list-item</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-item">&sect;6.8.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-list-item-body">list-item-body</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-item-body">&sect;6.8.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-list-item-label">list-item-label</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-item-label">&sect;6.8.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-object-table-footer" id="fo-object-table-footer">table-footer</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-footer">&sect;6.7.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-table-body" id="fo-object-table-body">table-body</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-body">&sect;6.7.8</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-link-section">Link and Multi Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N17805-Dynamic-Effects:-Link-and-Multi-Formatting-Objects">&sect;6.9</a>) </td>
+ <td><a name="fo-object-table-row" id="fo-object-table-row">table-row</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-row">&sect;6.7.9</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-basic-link">basic-link</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_basic-link">&sect;6.9.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-object-table-cell" id="fo-object-table-cell">table-cell</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_table-cell">&sect;6.7.10</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="left">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-object-list-section" id=
+ "fo-object-list-section">List Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N17076-Formatting-Objects-for-Lists">&sect;6.8</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-list-block" id="fo-object-list-block">list-block</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-block">&sect;6.8.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-list-item" id="fo-object-list-item">list-item</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-item">&sect;6.8.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-list-item-body" id="fo-object-list-item-body">list-item-body</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-item-body">&sect;6.8.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-list-item-label" id=
+ "fo-object-list-item-label">list-item-label</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_list-item-label">&sect;6.8.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-object-link-section" id=
+ "fo-object-link-section">Link and Multi Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N17805-Dynamic-Effects:-Link-and-Multi-Formatting-Objects">&sect;6.9</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-basic-link" id="fo-object-basic-link">basic-link</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_basic-link">&sect;6.9.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- both internal and external supported </li>
- </ul> </td>
+ <li>both internal and external supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-multi-switch">multi-switch</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-switch">&sect;6.9.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-multi-case">multi-case</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-case">&sect;6.9.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-multi-toggle">multi-toggle</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-toggle">&sect;6.9.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-multi-properties">multi-properties</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-properties">&sect;6.9.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-multi-property-set">multi-property-set</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-property-set">&sect;6.9.7</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-object-multi-switch" id="fo-object-multi-switch">multi-switch</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-switch">&sect;6.9.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-multi-case" id="fo-object-multi-case">multi-case</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-case">&sect;6.9.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-multi-toggle" id="fo-object-multi-toggle">multi-toggle</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-toggle">&sect;6.9.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-bookmarks-section">Formatting Objects for Bookmarks</a> (<a href="http://www.w3.org/TR/xsl11/#d0e14206">&sect;6.11 in XSL 1.1 WD</a>) </td>
+ <td><a name="fo-object-multi-properties" id=
+ "fo-object-multi-properties">multi-properties</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-properties">&sect;6.9.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-bookmark-tree">bookmark-tree</a> (since XSL 1.1) </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/xsl11/#fo_bookmark-tree">&sect;6.11.1 in XSL 1.1 WD</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-object-multi-property-set" id=
+ "fo-object-multi-property-set">multi-property-set</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_multi-property-set">&sect;6.9.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-object-bookmarks-section" id=
+ "fo-object-bookmarks-section">Formatting Objects for Bookmarks</a> (<a href=
+ "http://www.w3.org/TR/xsl11/#d0e14206">&sect;6.11 in XSL 1.1 WD</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-object-bookmark-tree" id="fo-object-bookmark-tree">bookmark-tree</a> (since
+ XSL 1.1)</td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href="http://www.w3.org/TR/xsl11/#fo_bookmark-tree">&sect;6.11.1 in XSL
+ 1.1 WD</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
<li>[0.20.5] Uses the proprietary fox:outline extension.</li>
- </ul> </td>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-bookmark">bookmark</a> (since XSL 1.1) </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/xsl11/#fo_bookmark">&sect;6.11.2 in XSL 1.1 WD</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-object-bookmark" id="fo-object-bookmark">bookmark</a> (since XSL 1.1)</td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href="http://www.w3.org/TR/xsl11/#fo_bookmark">&sect;6.11.2 in XSL 1.1
+ WD</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
<li>[0.20.5] Uses the proprietary fox:outline extension.</li>
- </ul> </td>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-bookmark-title">bookmark-title</a> (since XSL 1.1) </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/xsl11/#fo_bookmark-title">&sect;6.11.3 in XSL 1.1 WD</a> </td>
- <td class="no">
- no </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-bookmark-title" id="fo-object-bookmark-title">bookmark-title</a>
+ (since XSL 1.1)</td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href="http://www.w3.org/TR/xsl11/#fo_bookmark-title">&sect;6.11.3 in
+ XSL 1.1 WD</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
<li>[0.20.5] Uses the proprietary fox:outline extension.</li>
- <li>[0.93 and later] color, font-style and font-weight are not supported, yet.</li>
- </ul> </td>
+
+ <li>[0.94 and later] color, font-style and font-weight are not supported, yet.</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-object-outofline-section" id=
+ "fo-object-outofline-section">Out-of-line Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N18509-Out-of-Line-Formatting-Objects">&sect;6.10</a>)</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-outofline-section">Out-of-line Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N18509-Out-of-Line-Formatting-Objects">&sect;6.10</a>) </td>
+ <td><a name="fo-object-float" id="fo-object-float">float</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_float">&sect;6.10.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-float">float</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_float">&sect;6.10.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-object-footnote">footnote</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_footnote">&sect;6.10.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-footnote" id="fo-object-footnote">footnote</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_footnote">&sect;6.10.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
<li>[0.20.5] Footnotes sometimes overlap with the main content</li>
- <li>[0.93 and later] Restrictions with multi-column documents.</li>
- </ul> </td>
+
+ <li>[0.94 and later] Restrictions with multi-column documents.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-footnote-body">footnote-body</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_footnote-body">&sect;6.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-object-footnote-body" id="fo-object-footnote-body">footnote-body</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_footnote-body">&sect;6.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-object-other-section">Other Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N19019-Other-Formatting-Objects">&sect;6.11</a>) </td>
+ <td class="category" colspan="8"><a name="fo-object-other-section" id=
+ "fo-object-other-section">Other Formatting Objects</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#section-N19019-Other-Formatting-Objects">&sect;6.11</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-wrapper">wrapper</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_wrapper">&sect;6.11.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-object-wrapper" id="fo-object-wrapper">wrapper</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_wrapper">&sect;6.11.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>[0.93 and later] Only works as expected with inline-level content.</li>
- </ul> </td>
+ <li>[0.94 and later] Only works as expected with inline-level content.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-marker">marker</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_marker">&sect;6.11.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-object-marker" id="fo-object-marker">marker</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_marker">&sect;6.11.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-object-retrieve-marker">retrieve-marker</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_retrieve-marker">&sect;6.11.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-object-retrieve-marker" id=
+ "fo-object-retrieve-marker">retrieve-marker</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice6.html#fo_retrieve-marker">&sect;6.11.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
</table>
-<h1><a name="fo-property-section">XSL-FO Property Support Table</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pr-section">&sect;7</a>)</h1>
- <p>
- The following is a summary of FOP's current support for the standard XSL-FO properties.
- </p>
+
+ <h1><a name="fo-property-section" id="fo-property-section">XSL-FO Property Support Table</a>
+ (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pr-section">&sect;7</a>)</h1>
+
+ <p>The following is a summary of FOP's current support for the standard XSL-FO properties.</p>
+
<table border="1">
<tr>
- <th rowspan="2">
- Property Name </th>
- <th rowspan="2" align="center">
- XSL-FO Conformance Level </th>
- <th rowspan="2" align="center">
- Citation </th>
- <th colspan="4" align="center">
- Support&nbsp;in&nbsp;FOP </th>
- <th rowspan="2">
- Comments </th>
+ <th rowspan="2">Property Name</th>
+
+ <th rowspan="2" align="center">XSL-FO Conformance Level</th>
+
+ <th rowspan="2" align="center">Citation</th>
+
+ <th colspan="4" align="center">Support&nbsp;in&nbsp;FOP</th>
+
+ <th rowspan="2">Comments</th>
+ </tr>
+
+ <tr>
+ <th align="center">0.20.5 (ancient)</th>
+
+ <th align="center">0.94 (stable)</th>
+
+ <th align="center">0.95 (beta)</th>
+
+ <th align="center">develop- ment</th>
</tr>
+
<tr>
- <th align="center">
- 0.20.5 (previous) </th>
- <th align="center">0.93 (stable) </th>
- <th align="center">
- 0.94 (stable) </th>
- <th align="center">
- develop- ment </th>
+ <td class="category" colspan="8"><a name="fo-property-commonaccess-section" id=
+ "fo-property-commonaccess-section">Common Accessibility Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-accessibility-properties">&sect;7.4</a>)</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonaccess-section">Common Accessibility Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-accessibility-properties">&sect;7.4</a>) </td>
+ <td><a name="fo-property-source-document" id=
+ "fo-property-source-document">source-document</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#source-document">&sect;7.4.1</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-source-document">source-document</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#source-document">&sect;7.4.1</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-role">role</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#role">&sect;7.4.2</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-role" id="fo-property-role">role</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#role">&sect;7.4.2</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonabspos-section">Common Absolute Position Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-absolute-position-properties">&sect;7.5</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-commonabspos-section" id=
+ "fo-property-commonabspos-section">Common Absolute Position Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-absolute-position-properties">&sect;7.5</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-absolute-position">absolute-position</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#absolute-position">&sect;7.5.1</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-absolute-position" id=
+ "fo-property-absolute-position">absolute-position</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#absolute-position">&sect;7.5.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Use shorthand position="absolute" as a workaround. </li>
- <li>
- [0.93 and later] No restrictions. The 0.20.5 work-around is not supported. </li>
- </ul> </td>
+ <li>[0.20.5] Use shorthand position="absolute" as a workaround.</li>
+
+ <li>[0.94 and later] No restrictions. The 0.20.5 work-around is not supported.</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-top" id="fo-property-top">top</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#top">&sect;7.5.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-top">top</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#top">&sect;7.5.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-right">right</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#right">&sect;7.5.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-bottom">bottom</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#bottom">&sect;7.5.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-left">left</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#left">&sect;7.5.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-right" id="fo-property-right">right</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#right">&sect;7.5.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonaural-section">Common Aural Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-aural-properties">&sect;7.6</a>) </td>
+ <td><a name="fo-property-bottom" id="fo-property-bottom">bottom</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#bottom">&sect;7.5.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-azimuth">azimuth</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#azimuth">&sect;7.6.1</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-cue-after">cue-after</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#cue-after">&sect;7.6.2</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-cue-before">cue-before</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#cue-before">&sect;7.6.3</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-elevation">elevation</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#elevation">&sect;7.6.4</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-pause-after">pause-after</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pause-after">&sect;7.6.5</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-pause-before">pause-before</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pause-before">&sect;7.6.6</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-pitch">pitch</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pitch">&sect;7.6.7</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-pitch-range">pitch-range</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pitch-range">&sect;7.6.8</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-play-during">play-during</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#play-during">&sect;7.6.9</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-richness">richness</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#richness">&sect;7.6.10</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-speak">speak</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak">&sect;7.6.11</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-speak-header">speak-header</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak-header">&sect;7.6.12</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-speak-numeral">speak-numeral</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak-numeral">&sect;7.6.13</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-speak-punctuation">speak-punctuation</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak-punctuation">&sect;7.6.14</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-speech-rate">speech-rate</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speech-rate">&sect;7.6.15</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-stress">stress</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#stress">&sect;7.6.16</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-voice-family">voice-family</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#voice-family">&sect;7.6.17</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-volume">volume</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#volume">&sect;7.6.18</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-left" id="fo-property-left">left</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#left">&sect;7.5.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonenv-section">Common Border, Padding, and Background Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-border-padding-and-background-properties">&sect;7.7</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-commonaural-section" id=
+ "fo-property-commonaural-section">Common Aural Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-aural-properties">&sect;7.6</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-background-attachment">background-attachment</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-attachment">&sect;7.7.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-background-color">background-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-color">&sect;7.7.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-azimuth" id="fo-property-azimuth">azimuth</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#azimuth">&sect;7.6.1</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-cue-after" id="fo-property-cue-after">cue-after</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#cue-after">&sect;7.6.2</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-cue-before" id="fo-property-cue-before">cue-before</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#cue-before">&sect;7.6.3</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-elevation" id="fo-property-elevation">elevation</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#elevation">&sect;7.6.4</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-pause-after" id="fo-property-pause-after">pause-after</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pause-after">&sect;7.6.5</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-pause-before" id="fo-property-pause-before">pause-before</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pause-before">&sect;7.6.6</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-pitch" id="fo-property-pitch">pitch</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pitch">&sect;7.6.7</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-pitch-range" id="fo-property-pitch-range">pitch-range</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pitch-range">&sect;7.6.8</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-play-during" id="fo-property-play-during">play-during</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#play-during">&sect;7.6.9</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-richness" id="fo-property-richness">richness</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#richness">&sect;7.6.10</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-speak" id="fo-property-speak">speak</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak">&sect;7.6.11</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-speak-header" id="fo-property-speak-header">speak-header</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak-header">&sect;7.6.12</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-speak-numeral" id="fo-property-speak-numeral">speak-numeral</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak-numeral">&sect;7.6.13</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-speak-punctuation" id=
+ "fo-property-speak-punctuation">speak-punctuation</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speak-punctuation">&sect;7.6.14</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-speech-rate" id="fo-property-speech-rate">speech-rate</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#speech-rate">&sect;7.6.15</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-stress" id="fo-property-stress">stress</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#stress">&sect;7.6.16</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-voice-family" id="fo-property-voice-family">voice-family</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#voice-family">&sect;7.6.17</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-volume" id="fo-property-volume">volume</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#volume">&sect;7.6.18</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-commonenv-section" id=
+ "fo-property-commonenv-section">Common Border, Padding, and Background Properties</a>
+ (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-border-padding-and-background-properties">&sect;7.7</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-background-attachment" id=
+ "fo-property-background-attachment">background-attachment</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-attachment">&sect;7.7.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-background-color" id=
+ "fo-property-background-color">background-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-color">&sect;7.7.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.93 and later] not yet implemented for table-column, table-body, table-header and table-footer. </li>
- </ul> </td>
+ <li>[0.94] not yet implemented for table-column, table-body, table-header and
+ table-footer.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-background-image">background-image</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-image">&sect;7.7.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-background-image" id=
+ "fo-property-background-image">background-image</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-image">&sect;7.7.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.93 and later] not yet implemented for table-column, table-body, table-header and table-footer. </li>
- </ul> </td>
+ <li>[0.94] not yet implemented for table-column, table-body, table-header and
+ table-footer.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-background-repeat">background-repeat</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-repeat">&sect;7.7.4</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-background-position-horizontal">background-position-horizontal</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-position-horizontal">&sect;7.7.5</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-background-position-vertical">background-position-vertical</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-position-vertical">&sect;7.7.6</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-before-color">border-before-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-color">&sect;7.7.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-before-style">border-before-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-style">&sect;7.7.8</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-background-repeat" id=
+ "fo-property-background-repeat">background-repeat</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-repeat">&sect;7.7.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-background-position-horizontal" id=
+ "fo-property-background-position-horizontal">background-position-horizontal</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-position-horizontal">&sect;7.7.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td align="center">[0.94 and later] Ignored when background-repeat set to
+ "repeat" or "repeat-x"</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-background-position-vertical" id=
+ "fo-property-background-position-vertical">background-position-vertical</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-position-vertical">&sect;7.7.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td align="center">[0.94 and later] Ignored when background-repeat set to
+ "repeat" or "repeat-y"</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-before-color" id=
+ "fo-property-border-before-color">border-before-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-color">&sect;7.7.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-before-style" id=
+ "fo-property-border-before-style">border-before-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-style">&sect;7.7.8</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-before-width">border-before-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-width">&sect;7.7.9</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-after-color">border-after-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-color">&sect;7.7.10</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-after-style">border-after-style</a> </td>
- <td class="basic">
- Basic </td>
+ <td><a name="fo-property-border-before-width" id=
+ "fo-property-border-before-width">border-before-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-width">&sect;7.7.9</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-style">&sect;7.7.11</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <ul>
+ <li>[0.94] .conditionality not supported on fo:table-cell</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-after-color" id=
+ "fo-property-border-after-color">border-after-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-color">&sect;7.7.10</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-after-style" id=
+ "fo-property-border-after-style">border-after-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-style">&sect;7.7.11</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-after-width">border-after-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-width">&sect;7.7.12</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-start-color">border-start-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-color">&sect;7.7.13</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-start-style">border-start-style</a> </td>
- <td class="basic">
- Basic </td>
+ <td><a name="fo-property-border-after-width" id=
+ "fo-property-border-after-width">border-after-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-width">&sect;7.7.12</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-style">&sect;7.7.14</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <ul>
+ <li>[0.94] .conditionality not supported on fo:table-cell</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-start-color" id=
+ "fo-property-border-start-color">border-start-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-color">&sect;7.7.13</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-start-style" id=
+ "fo-property-border-start-style">border-start-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-style">&sect;7.7.14</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-start-width">border-start-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-width">&sect;7.7.15</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-end-color">border-end-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-color">&sect;7.7.16</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-end-style">border-end-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-style">&sect;7.7.17</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-start-width" id=
+ "fo-property-border-start-width">border-start-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-width">&sect;7.7.15</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-end-color" id=
+ "fo-property-border-end-color">border-end-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-color">&sect;7.7.16</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-end-style" id=
+ "fo-property-border-end-style">border-end-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-style">&sect;7.7.17</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-end-width">border-end-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-width">&sect;7.7.18</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-top-color">border-top-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top-color">&sect;7.7.19</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-top-style">border-top-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top-style">&sect;7.7.20</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-end-width" id=
+ "fo-property-border-end-width">border-end-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-width">&sect;7.7.18</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-top-color" id=
+ "fo-property-border-top-color">border-top-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top-color">&sect;7.7.19</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-top-style" id=
+ "fo-property-border-top-style">border-top-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top-style">&sect;7.7.20</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-top-width">border-top-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top-width">&sect;7.7.21</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-bottom-color">border-bottom-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom-color">&sect;7.7.22</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-bottom-style">border-bottom-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom-style">&sect;7.7.23</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-top-width" id=
+ "fo-property-border-top-width">border-top-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top-width">&sect;7.7.21</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-bottom-color" id=
+ "fo-property-border-bottom-color">border-bottom-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom-color">&sect;7.7.22</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-bottom-style" id=
+ "fo-property-border-bottom-style">border-bottom-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom-style">&sect;7.7.23</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-bottom-width">border-bottom-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom-width">&sect;7.7.24</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-left-color">border-left-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left-color">&sect;7.7.25</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-left-style">border-left-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left-style">&sect;7.7.26</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-bottom-width" id=
+ "fo-property-border-bottom-width">border-bottom-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom-width">&sect;7.7.24</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-left-color" id=
+ "fo-property-border-left-color">border-left-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left-color">&sect;7.7.25</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-left-style" id=
+ "fo-property-border-left-style">border-left-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left-style">&sect;7.7.26</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-left-width">border-left-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left-width">&sect;7.7.27</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-right-color">border-right-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right-color">&sect;7.7.28</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-right-style">border-right-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right-style">&sect;7.7.29</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-left-width" id=
+ "fo-property-border-left-width">border-left-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left-width">&sect;7.7.27</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-right-color" id=
+ "fo-property-border-right-color">border-right-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right-color">&sect;7.7.28</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-right-style" id=
+ "fo-property-border-right-style">border-right-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right-style">&sect;7.7.29</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-right-width">border-right-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right-width">&sect;7.7.30</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-padding-before">padding-before</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-before">&sect;7.7.31</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-right-width" id=
+ "fo-property-border-right-width">border-right-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right-width">&sect;7.7.30</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-padding-before" id=
+ "fo-property-padding-before">padding-before</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-before">&sect;7.7.31</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only one value allowed </li>
- <li>
- [0.20.5] only implemented for blocks </li>
- <li>
- [0.20.5] can't be used to make extra space (use indents + spaces instead) </li>
- <li>
- [0.20.5] can be used to control how much the background-color extends beyond the content rectangle </li>
- </ul> </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-padding-after">padding-after</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-after">&sect;7.7.32</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <li>[0.20.5] only one value allowed</li>
+
+ <li>[0.20.5] only implemented for blocks</li>
+
+ <li>[0.20.5] can't be used to make extra space (use indents + spaces instead)</li>
+
+ <li>[0.20.5] can be used to control how much the background-color extends beyond the
+ content rectangle</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-padding-after" id="fo-property-padding-after">padding-after</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-after">&sect;7.7.32</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding-start">padding-start</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-start">&sect;7.7.33</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding-start" id="fo-property-padding-start">padding-start</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-start">&sect;7.7.33</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding-end">padding-end</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-end">&sect;7.7.34</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding-end" id="fo-property-padding-end">padding-end</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-end">&sect;7.7.34</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding-top">padding-top</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-top">&sect;7.7.35</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding-top" id="fo-property-padding-top">padding-top</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-top">&sect;7.7.35</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding-bottom">padding-bottom</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-bottom">&sect;7.7.36</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding-bottom" id=
+ "fo-property-padding-bottom">padding-bottom</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-bottom">&sect;7.7.36</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding-left">padding-left</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-left">&sect;7.7.37</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding-left" id="fo-property-padding-left">padding-left</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-left">&sect;7.7.37</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding-right">padding-right</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-right">&sect;7.7.38</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding-right" id="fo-property-padding-right">padding-right</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding-right">&sect;7.7.38</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] same limitations as padding-before </li>
- </ul> </td>
+ <li>[0.20.5] same limitations as padding-before</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonfont-section">Common Font Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-font-properties">&sect;7.8</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-commonfont-section" id=
+ "fo-property-commonfont-section">Common Font Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-font-properties">&sect;7.8</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-font-family">font-family</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-family">&sect;7.8.2</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-font-family" id="fo-property-font-family">font-family</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-family">&sect;7.8.2</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] font-family lists are not supported, use a single font-family name </li>
- <li>
- [0.93 and later] font-family lists are allowed but glyph based font selection is not supported </li>
- </ul> </td>
+ <li>[0.20.5] font-family lists are not supported, use a single font-family name</li>
+
+ <li>[0.94 and later] font-family lists are allowed but glyph based font selection is not
+ supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-font-selection-strategy">font-selection-strategy</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-selection-strategy">&sect;7.8.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-font-size">font-size</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-size">&sect;7.8.4</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-font-selection-strategy" id=
+ "fo-property-font-selection-strategy">font-selection-strategy</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-selection-strategy">&sect;7.8.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-font-size" id="fo-property-font-size">font-size</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-size">&sect;7.8.4</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] "smaller" and "larger" not implemented </li>
- </ul> </td>
+ <li>[0.20.5] "smaller" and "larger" not implemented</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-font-stretch">font-stretch</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-stretch">&sect;7.8.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-font-size-adjust">font-size-adjust</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-size-adjust">&sect;7.8.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-font-style">font-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-style">&sect;7.8.7</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-font-stretch" id="fo-property-font-stretch">font-stretch</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-stretch">&sect;7.8.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-font-size-adjust" id=
+ "fo-property-font-size-adjust">font-size-adjust</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-size-adjust">&sect;7.8.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-font-style" id="fo-property-font-style">font-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-style">&sect;7.8.7</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] "normal" is not supported </li>
- </ul> </td>
+ <li>[0.20.5] "normal" is not supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-font-variant">font-variant</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-variant">&sect;7.8.8</a> </td>
- <td class="yes">
- yes </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-font-weight">font-weight</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-weight">&sect;7.8.9</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-font-variant" id="fo-property-font-variant">font-variant</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-variant">&sect;7.8.8</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-font-weight" id="fo-property-font-weight">font-weight</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font-weight">&sect;7.8.9</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] "normal", "bolder" and "lighter" are not supported </li>
- <li>
- [0.93 and later] TODO &lt;relative&gt; font weights </li>
- </ul> </td>
+ <li>[0.20.5] "normal", "bolder" and "lighter" are not supported</li>
+
+ <li>[0.94 and later] TODO &lt;relative&gt; font weights</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonhyphen-section">Common Hyphenation Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-hyphenation-properties">&sect;7.9</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-commonhyphen-section" id=
+ "fo-property-commonhyphen-section">Common Hyphenation Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-hyphenation-properties">&sect;7.9</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-country">country</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#country">&sect;7.9.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-country" id="fo-property-country">country</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#country">&sect;7.9.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.94 and earlier] Only used for controlling hyphenation.</li>
- <li>
- [trunk] For PDF output: Only 2-letter codes from ISO 3166 are supported properly to identify the natural language!</li>
+ <li>[0.94 and earlier] Only used for controlling hyphenation.</li>
+
+ <li>[trunk] For PDF output: Only 2-letter codes from ISO 3166 are supported properly to
+ identify the natural language!</li>
</ul>
</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-language">language</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#language">&sect;7.9.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-language" id="fo-property-language">language</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#language">&sect;7.9.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.94 and earlier] Only used for controlling hyphenation.</li>
- <li>
- [trunk] For PDF output: Only 2-letter codes from ISO 639 are supported properly to identify the natural language!</li>
+ <li>[0.94 and earlier] Only used for controlling hyphenation.</li>
+
+ <li>[trunk] For PDF output: Only 2-letter codes from ISO 639 are supported properly to
+ identify the natural language!</li>
</ul>
</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-script">script</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#script">&sect;7.9.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-hyphenate">hyphenate</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenate">&sect;7.9.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-hyphenation-character">hyphenation-character</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-character">&sect;7.9.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-hyphenation-push-character-count">hyphenation-push-character-count</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-push-character-count">&sect;7.9.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-hyphenation-remain-character-count">hyphenation-remain-character-count</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-remain-character-count">&sect;7.9.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-script" id="fo-property-script">script</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#script">&sect;7.9.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-hyphenate" id="fo-property-hyphenate">hyphenate</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenate">&sect;7.9.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonmarginblock-section">Common Margin Properties - Block</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-margin-properties-block">&sect;7.10</a>) </td>
+ <td><a name="fo-property-hyphenation-character" id=
+ "fo-property-hyphenation-character">hyphenation-character</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-character">&sect;7.9.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-margin-top">margin-top</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-top">&sect;7.10.1</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-hyphenation-push-character-count" id=
+ "fo-property-hyphenation-push-character-count">hyphenation-push-character-count</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-push-character-count">&sect;7.9.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-hyphenation-remain-character-count" id=
+ "fo-property-hyphenation-remain-character-count">hyphenation-remain-character-count</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-remain-character-count">&sect;7.9.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-commonmarginblock-section" id=
+ "fo-property-commonmarginblock-section">Common Margin Properties - Block</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-margin-properties-block">&sect;7.10</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-margin-top" id="fo-property-margin-top">margin-top</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-top">&sect;7.10.1</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only on pages and regions </li>
- </ul> </td>
+ <li>[0.20.5] only on pages and regions</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-margin-bottom">margin-bottom</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-bottom">&sect;7.10.2</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-margin-bottom" id="fo-property-margin-bottom">margin-bottom</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-bottom">&sect;7.10.2</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only on pages and regions </li>
- </ul> </td>
+ <li>[0.20.5] only on pages and regions</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-margin-left">margin-left</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-left">&sect;7.10.3</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-margin-left" id="fo-property-margin-left">margin-left</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-left">&sect;7.10.3</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only on pages and regions </li>
- </ul> </td>
+ <li>[0.20.5] only on pages and regions</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-margin-right">margin-right</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-right">&sect;7.10.4</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-margin-right" id="fo-property-margin-right">margin-right</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin-right">&sect;7.10.4</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only on pages and regions </li>
- </ul> </td>
+ <li>[0.20.5] only on pages and regions</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-space-before">space-before</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-before">&sect;7.10.5</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-space-before" id="fo-property-space-before">space-before</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-before">&sect;7.10.5</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] space-before.optimum supported </li>
- <li>
- [0.93 and later] Space adjustment may not fully work everywhere, yet. </li>
- </ul> </td>
+ <li>[0.20.5] space-before.optimum supported</li>
+
+ <li>[0.94 and later] Space adjustment may not fully work everywhere, yet.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-space-after">space-after</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-after">&sect;7.10.6</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-space-after" id="fo-property-space-after">space-after</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-after">&sect;7.10.6</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] space-after.optimum supported </li>
- <li>
- [0.93 and later] Space adjustment may not fully work everywhere, yet. </li>
- </ul> </td>
+ <li>[0.20.5] space-after.optimum supported</li>
+
+ <li>[0.94 and later] Space adjustment may not fully work everywhere, yet.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-start-indent">start-indent</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#start-indent">&sect;7.10.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-end-indent">end-indent</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#end-indent">&sect;7.10.8</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-start-indent" id="fo-property-start-indent">start-indent</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#start-indent">&sect;7.10.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-end-indent" id="fo-property-end-indent">end-indent</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#end-indent">&sect;7.10.8</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonmargininline-section">Common Margin Properties - Inline</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-margin-properties-inline">&sect;7.11</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-commonmargininline-section" id=
+ "fo-property-commonmargininline-section">Common Margin Properties - Inline</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-margin-properties-inline">&sect;7.11</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-space-end">space-end</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-end">&sect;7.11.1</a> </td>
- <td class="no">
- no </td>
+ <td><a name="fo-property-space-end" id="fo-property-space-end">space-end</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-end">&sect;7.11.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
<td class="no">no</td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-space-start">space-start</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-start">&sect;7.11.2</a> </td>
- <td class="no">
- no </td>
+ <td><a name="fo-property-space-start" id="fo-property-space-start">space-start</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#space-start">&sect;7.11.2</a></td>
+
<td class="no">no</td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-commonrelpos-section">Common Relative Position Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-relative-position-properties">&sect;7.12</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-commonrelpos-section" id=
+ "fo-property-commonrelpos-section">Common Relative Position Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#common-relative-position-properties">&sect;7.12</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-relative-position">relative-position</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#relative-position">&sect;7.12.1</a> </td>
- <td class="no">
- no </td>
+ <td><a name="fo-property-relative-position" id=
+ "fo-property-relative-position">relative-position</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#relative-position">&sect;7.12.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
<td class="no">no</td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-areaalign-section">Area Alignment Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#area-alignment">&sect;7.13</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-areaalign-section" id=
+ "fo-property-areaalign-section">Area Alignment Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#area-alignment">&sect;7.13</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-alignment-adjust">alignment-adjust</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#alignment-adjust">&sect;7.13.1</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-alignment-baseline">alignment-baseline</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#alignment-baseline">&sect;7.13.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-baseline-shift">baseline-shift</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#baseline-shift">&sect;7.13.3</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-alignment-adjust" id=
+ "fo-property-alignment-adjust">alignment-adjust</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#alignment-adjust">&sect;7.13.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-alignment-baseline" id=
+ "fo-property-alignment-baseline">alignment-baseline</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#alignment-baseline">&sect;7.13.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-baseline-shift" id=
+ "fo-property-baseline-shift">baseline-shift</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#baseline-shift">&sect;7.13.3</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Only values "super" and "sub" have been implemented. </li>
- </ul> </td>
+ <li>[0.20.5] Only values "super" and "sub" have been implemented.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-display-align">display-align</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#display-align">&sect;7.13.4</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-display-align" id="fo-property-display-align">display-align</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#display-align">&sect;7.13.4</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Implemented only for table-cell and block-container. </li>
- <li>
- [0.20.5] For table-cell, the "height" attribute must be set for the parent table-row; setting the height of the table or the table-cell results in vertical centering having no effect. </li>
- <li>
- [0.93 and later] TODO Check e-g, i-f-o. </li>
- </ul> </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-dominant-baseline">dominant-baseline</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#dominant-baseline">&sect;7.13.5</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-relative-align">relative-align</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#relative-align">&sect;7.13.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <li>[0.20.5] Implemented only for table-cell and block-container.</li>
+
+ <li>[0.20.5] For table-cell, the "height" attribute must be set for the parent table-row;
+ setting the height of the table or the table-cell results in vertical centering having no
+ effect.</li>
+
+ <li>[0.94 and later] TODO Check e-g, i-f-o.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-areadim-section">Area Dimension Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N36094-Area-Dimension-Properties">&sect;7.14</a>) </td>
+ <td><a name="fo-property-dominant-baseline" id=
+ "fo-property-dominant-baseline">dominant-baseline</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#dominant-baseline">&sect;7.13.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-block-progression-dimension">block-progression-dimension</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#block-progression-dimension">&sect;7.14.1</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-content-height">content-height</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#content-height">&sect;7.14.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-content-width">content-width</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#content-width">&sect;7.14.3</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-height">height</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#height">&sect;7.14.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-inline-progression-dimension">inline-progression-dimension</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#inline-progression-dimension">&sect;7.14.5</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-max-height">max-height</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#max-height">&sect;7.14.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-max-width">max-width</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#max-width">&sect;7.14.7</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-min-height">min-height</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#min-height">&sect;7.14.8</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-min-width">min-width</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#min-width">&sect;7.14.9</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-scaling">scaling</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#scaling">&sect;7.14.10</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-scaling-method">scaling-method</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#scaling-method">&sect;7.14.11</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-width">width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#width">&sect;7.14.12</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-relative-align" id=
+ "fo-property-relative-align">relative-align</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#relative-align">&sect;7.13.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-blockandline-section">Block and Line-related Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N38191-Block-and-Line-related-Properties">&sect;7.15</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-areadim-section" id=
+ "fo-property-areadim-section">Area Dimension Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N36094-Area-Dimension-Properties">&sect;7.14</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-hyphenation-keep">hyphenation-keep</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-keep">&sect;7.15.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-hyphenation-ladder-count">hyphenation-ladder-count</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-ladder-count">&sect;7.15.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-last-line-end-indent">last-line-end-indent</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#last-line-end-indent">&sect;7.15.3</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-line-height">line-height</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#line-height">&sect;7.15.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-line-height-shift-adjustment">line-height-shift-adjustment</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#line-height-shift-adjustment">&sect;7.15.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-line-stacking-strategy">line-stacking-strategy</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#line-stacking-strategy">&sect;7.15.6</a> </td>
- <td class="no">
- no </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-block-progression-dimension" id=
+ "fo-property-block-progression-dimension">block-progression-dimension</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#block-progression-dimension">&sect;7.14.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-content-height" id=
+ "fo-property-content-height">content-height</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#content-height">&sect;7.14.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-content-width" id="fo-property-content-width">content-width</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#content-width">&sect;7.14.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-height" id="fo-property-height">height</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#height">&sect;7.14.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-inline-progression-dimension" id=
+ "fo-property-inline-progression-dimension">inline-progression-dimension</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#inline-progression-dimension">&sect;7.14.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-max-height" id="fo-property-max-height">max-height</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#max-height">&sect;7.14.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-max-width" id="fo-property-max-width">max-width</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#max-width">&sect;7.14.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-min-height" id="fo-property-min-height">min-height</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#min-height">&sect;7.14.8</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-min-width" id="fo-property-min-width">min-width</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#min-width">&sect;7.14.9</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-scaling" id="fo-property-scaling">scaling</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#scaling">&sect;7.14.10</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-scaling-method" id=
+ "fo-property-scaling-method">scaling-method</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#scaling-method">&sect;7.14.11</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-width" id="fo-property-width">width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#width">&sect;7.14.12</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-blockandline-section" id=
+ "fo-property-blockandline-section">Block and Line-related Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N38191-Block-and-Line-related-Properties">&sect;7.15</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-hyphenation-keep" id=
+ "fo-property-hyphenation-keep">hyphenation-keep</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-keep">&sect;7.15.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-hyphenation-ladder-count" id=
+ "fo-property-hyphenation-ladder-count">hyphenation-ladder-count</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#hyphenation-ladder-count">&sect;7.15.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-last-line-end-indent" id=
+ "fo-property-last-line-end-indent">last-line-end-indent</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#last-line-end-indent">&sect;7.15.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-line-height" id="fo-property-line-height">line-height</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#line-height">&sect;7.15.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-line-height-shift-adjustment" id=
+ "fo-property-line-height-shift-adjustment">line-height-shift-adjustment</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#line-height-shift-adjustment">&sect;7.15.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-line-stacking-strategy" id=
+ "fo-property-line-stacking-strategy">line-stacking-strategy</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#line-stacking-strategy">&sect;7.15.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.93 and later] value "line-height" not supported </li>
- </ul> </td>
+ <li>[0.94 and later] value "line-height" not supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-linefeed-treatment">linefeed-treatment</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#linefeed-treatment">&sect;7.15.7</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="left">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-white-space-treatment">white-space-treatment</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#white-space-treatment">&sect;7.15.8</a> </td>
- <td class="no">
- no </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-linefeed-treatment" id=
+ "fo-property-linefeed-treatment">linefeed-treatment</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#linefeed-treatment">&sect;7.15.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="left">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-white-space-treatment" id=
+ "fo-property-white-space-treatment">white-space-treatment</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#white-space-treatment">&sect;7.15.8</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.93 and later] inline elements may interfere with correct handling of this property
- in some cases </li>
- </ul> </td>
+ <li>[0.94 and later] inline elements may interfere with correct handling of this property
+ in some cases</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-text-align">text-align</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-align">&sect;7.15.9</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-text-align" id="fo-property-text-align">text-align</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-align">&sect;7.15.9</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- Only start, end, center and justify are supported </li>
- </ul> </td>
+ <li>Only start, end, center and justify are supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-text-align-last">text-align-last</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-align-last">&sect;7.15.10</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-text-align-last" id=
+ "fo-property-text-align-last">text-align-last</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-align-last">&sect;7.15.10</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- Only start, end, center and justify are supported </li>
- </ul> </td>
+ <li>Only start, end, center and justify are supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-text-indent">text-indent</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-indent">&sect;7.15.11</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-white-space-collapse">white-space-collapse</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#white-space-collapse">&sect;7.15.12</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-wrap-option">wrap-option</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#wrap-option">&sect;7.15.13</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-text-indent" id="fo-property-text-indent">text-indent</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-indent">&sect;7.15.11</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-white-space-collapse" id=
+ "fo-property-white-space-collapse">white-space-collapse</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#white-space-collapse">&sect;7.15.12</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-wrap-option" id="fo-property-wrap-option">wrap-option</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#wrap-option">&sect;7.15.13</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.93 and later] Only supported on fo:block. </li>
- </ul> </td>
+ <li>[0.94 and later] Only supported on fo:block.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-char-section">Character Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N40545-Character-Properties">&sect;7.16</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-char-section" id=
+ "fo-property-char-section">Character Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N40545-Character-Properties">&sect;7.16</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-character">character</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#character">&sect;7.16.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-letter-spacing">letter-spacing</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#letter-spacing">&sect;7.16.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-suppress-at-line-break">suppress-at-line-break</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#suppress-at-line-break">&sect;7.16.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-text-decoration">text-decoration</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-decoration">&sect;7.16.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-text-shadow">text-shadow</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-shadow">&sect;7.16.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-text-transform">text-transform</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-transform">&sect;7.16.6</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-treat-as-word-space">treat-as-word-space</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#treat-as-word-space">&sect;7.16.7</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-word-spacing">word-spacing</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#word-spacing">&sect;7.16.8</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-character" id="fo-property-character">character</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#character">&sect;7.16.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-color-section">Color-related Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N42081-Color-related-Properties">&sect;7.17</a>) </td>
+ <td><a name="fo-property-letter-spacing" id=
+ "fo-property-letter-spacing">letter-spacing</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#letter-spacing">&sect;7.16.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-color">color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#color">&sect;7.17.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-color-profile-name">color-profile-name</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#color-profile-name">&sect;7.17.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-rendering-intent">rendering-intent</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#rendering-intent">&sect;7.17.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-suppress-at-line-break" id=
+ "fo-property-suppress-at-line-break">suppress-at-line-break</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#suppress-at-line-break">&sect;7.16.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-float-section">Float-related Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N42546-Float-related-Properties">&sect;7.18</a>) </td>
+ <td><a name="fo-property-text-decoration" id=
+ "fo-property-text-decoration">text-decoration</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-decoration">&sect;7.16.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-clear">clear</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#clear">&sect;7.18.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-float">float</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#float">&sect;7.18.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-intrusion-displace">intrusion-displace</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#intrusion-displace">&sect;7.18.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-text-shadow" id="fo-property-text-shadow">text-shadow</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-shadow">&sect;7.16.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-keepsbreaks-section">Keeps and Breaks Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N43268-Keeps-and-Breaks-Properties">&sect;7.19</a>) </td>
+ <td><a name="fo-property-text-transform" id=
+ "fo-property-text-transform">text-transform</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-transform">&sect;7.16.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-break-after">break-after</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#break-after">&sect;7.19.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-break-before">break-before</a> </td>
- <td class="basic">
- Basic </td>
+ <td><a name="fo-property-treat-as-word-space" id=
+ "fo-property-treat-as-word-space">treat-as-word-space</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#treat-as-word-space">&sect;7.16.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-word-spacing" id="fo-property-word-spacing">word-spacing</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#word-spacing">&sect;7.16.8</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-color-section" id=
+ "fo-property-color-section">Color-related Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N42081-Color-related-Properties">&sect;7.17</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-color" id="fo-property-color">color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#color">&sect;7.17.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-color-profile-name" id=
+ "fo-property-color-profile-name">color-profile-name</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#color-profile-name">&sect;7.17.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-rendering-intent" id=
+ "fo-property-rendering-intent">rendering-intent</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#rendering-intent">&sect;7.17.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-float-section" id=
+ "fo-property-float-section">Float-related Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N42546-Float-related-Properties">&sect;7.18</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-clear" id="fo-property-clear">clear</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#clear">&sect;7.18.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-float" id="fo-property-float">float</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#float">&sect;7.18.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-intrusion-displace" id=
+ "fo-property-intrusion-displace">intrusion-displace</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#intrusion-displace">&sect;7.18.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-keepsbreaks-section" id=
+ "fo-property-keepsbreaks-section">Keeps and Breaks Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N43268-Keeps-and-Breaks-Properties">&sect;7.19</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-break-after" id="fo-property-break-after">break-after</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#break-after">&sect;7.19.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#break-before">&sect;7.19.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-keep-together">keep-together</a> </td>
- <td class="extended">
- Extended </td>
+ <ul>
+ <li>[0.94] Doesn't work on the last row of a table</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-break-before" id="fo-property-break-before">break-before</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#break-before">&sect;7.19.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#keep-together">&sect;7.19.3</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <ul>
+ <li>[0.94] Doesn't work on the first row of a table</li>
+ <li>[0.94] When set on the first child of an fo:table-cell,
+ the border-before is still painted on the previous page</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-keep-together" id="fo-property-keep-together">keep-together</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#keep-together">&sect;7.19.3</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] works only in table rows </li>
- <li>
- [0.93] works on all implemented block-level FOs, but not on inline-level FOs. </li>
- <li>
- [0.93 and later] &lt;integer&gt; values are not supported.
- </li>
+ <li>[0.20.5] works only in table rows</li>
+
+ <li>[0.94 and later] &lt;integer&gt; values are not supported.</li>
</ul>
</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-keep-with-next">keep-with-next</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#keep-with-next">&sect;7.19.4</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-keep-with-next" id=
+ "fo-property-keep-with-next">keep-with-next</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#keep-with-next">&sect;7.19.4</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] works only in table rows </li>
- <li>
- [0.93 and later] works on all implemented block-level FOs, but not on inline-level FOs. </li>
- <li>
- [0.93 and later] &lt;integer&gt; values are not supported. </li>
- </ul> </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-keep-with-previous">keep-with-previous</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#keep-with-previous">&sect;7.19.5</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <li>[0.20.5] works only in table rows</li>
+
+ <li>[0.94 and later] works on all implemented block-level FOs, but not on inline-level
+ FOs.</li>
+
+ <li>[0.94 and later] &lt;integer&gt; values are not supported.</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-keep-with-previous" id=
+ "fo-property-keep-with-previous">keep-with-previous</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#keep-with-previous">&sect;7.19.5</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
<li>[0.20.5] works only in table rows</li>
- <li>[0.93 and later] works on all implemented FOs, except list- and
- table-related and inline-level FOs.</li>
- <li>[0.93 and later] &lt;integer&gt; values are not supported.</li>
- </ul> </td>
+
+ <li>[0.94] works on all implemented FOs, except list- and table-related and
+ inline-level FOs.</li>
+
+ <li>[0.95] works on all implemented FOs, except list- and inline-level
+ FOs.</li>
+
+ <li>[0.94 and later] &lt;integer&gt; values are not supported.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-orphans">orphans</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#orphans">&sect;7.19.6</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-widows">widows</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#widows">&sect;7.19.7</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-orphans" id="fo-property-orphans">orphans</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#orphans">&sect;7.19.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-widows" id="fo-property-widows">widows</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#widows">&sect;7.19.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-layout-section">Layout-related Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N44408-Layout-related-Properties">&sect;7.20</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-layout-section" id=
+ "fo-property-layout-section">Layout-related Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N44408-Layout-related-Properties">&sect;7.20</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-clip">clip</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#clip">&sect;7.20.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-overflow">overflow</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#overflow">&sect;7.20.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-reference-orientation">reference-orientation</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#reference-orientation">&sect;7.20.3</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-clip" id="fo-property-clip">clip</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#clip">&sect;7.20.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-overflow" id="fo-property-overflow">overflow</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#overflow">&sect;7.20.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-reference-orientation" id=
+ "fo-property-reference-orientation">reference-orientation</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#reference-orientation">&sect;7.20.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Workaround for page-orientation (portrait vs. landscape) is to swap the page-width and page-height properties. </li>
- <li>
- [0.20.5] Workaround for block-container is to use SVG. </li>
- </ul> </td>
+ <li>[0.20.5] Workaround for page-orientation (portrait vs. landscape) is to swap the
+ page-width and page-height properties.</li>
+
+ <li>[0.20.5] Workaround for block-container is to use SVG.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-span">span</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#span">&sect;7.20.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-span" id="fo-property-span">span</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#span">&sect;7.20.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-leader-section">Leader and Rule Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N45132-Leader-and-Rule-Properties">&sect;7.21</a>) </td>
+ <td class="category" colspan="8"><a name="fo-property-leader-section" id=
+ "fo-property-leader-section">Leader and Rule Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N45132-Leader-and-Rule-Properties">&sect;7.21</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-leader-alignment">leader-alignment</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-alignment">&sect;7.21.1</a> </td>
- <td class="partial">
- partial </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
+ <td><a name="fo-property-leader-alignment" id=
+ "fo-property-leader-alignment">leader-alignment</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-alignment">&sect;7.21.1</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] not value "page" </li>
- <li>
- [0.93 and later] Not supported </li>
- </ul> </td>
+ <li>[0.20.5] not value "page"</li>
+
+ <li>[0.94 and later] Not supported</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-leader-pattern">leader-pattern</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-pattern">&sect;7.21.2</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-leader-pattern" id=
+ "fo-property-leader-pattern">leader-pattern</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-pattern">&sect;7.21.2</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] not value "use-content" </li>
- <li>
- [0.93 and later] Value "use-content" does not work in all circumstances. </li>
- </ul> </td>
+ <li>[0.20.5] not value "use-content"</li>
+
+ <li>[0.94 and later] Value "use-content" does not work in all circumstances.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-leader-pattern-width">leader-pattern-width</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-pattern-width">&sect;7.21.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="left">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-leader-length">leader-length</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-length">&sect;7.21.4</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-leader-pattern-width" id=
+ "fo-property-leader-pattern-width">leader-pattern-width</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-pattern-width">&sect;7.21.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="left">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-leader-length" id="fo-property-leader-length">leader-length</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#leader-length">&sect;7.21.4</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] leader-length.minimum is not used at all </li>
- </ul> </td>
+ <li>[0.20.5] leader-length.minimum is not used at all</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-rule-style">rule-style</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#rule-style">&sect;7.21.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="left">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-rule-thickness">rule-thickness</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#rule-thickness">&sect;7.21.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="left">&nbsp; </td>
+ <td><a name="fo-property-rule-style" id="fo-property-rule-style">rule-style</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#rule-style">&sect;7.21.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="left">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-dynamiceffects-section">Properties for Dynamic Effects Formatting Objects</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N46115-Properties-for-Dynamic-Effects-Formatting-Objects">&sect;7.22</a>) </td>
+ <td><a name="fo-property-rule-thickness" id=
+ "fo-property-rule-thickness">rule-thickness</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#rule-thickness">&sect;7.21.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="left">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-active-state">active-state</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#active-state">&sect;7.22.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-auto-restore">auto-restore</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#auto-restore">&sect;7.22.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-case-name">case-name</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#case-name">&sect;7.22.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-case-title">case-title</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#case-title">&sect;7.22.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-destination-placement-offset">destination-placement-offset</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#destination-placement-offset">&sect;7.22.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-external-destination">external-destination</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#external-destination">&sect;7.22.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-indicate-destination">indicate-destination</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#indicate-destination">&sect;7.22.7</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-internal-destination">internal-destination</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#internal-destination">&sect;7.22.8</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-show-destination">show-destination</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#show-destination">&sect;7.22.9</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-starting-state">starting-state</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#starting-state">&sect;7.22.10</a> </td>
- <td class="no">
- no </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td class="category" colspan="8"><a name="fo-property-dynamiceffects-section" id=
+ "fo-property-dynamiceffects-section">Properties for Dynamic Effects Formatting Objects</a>
+ (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N46115-Properties-for-Dynamic-Effects-Formatting-Objects">&sect;7.22</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-active-state" id="fo-property-active-state">active-state</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#active-state">&sect;7.22.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-auto-restore" id="fo-property-auto-restore">auto-restore</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#auto-restore">&sect;7.22.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-case-name" id="fo-property-case-name">case-name</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#case-name">&sect;7.22.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-case-title" id="fo-property-case-title">case-title</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#case-title">&sect;7.22.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-destination-placement-offset" id=
+ "fo-property-destination-placement-offset">destination-placement-offset</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#destination-placement-offset">&sect;7.22.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-external-destination" id=
+ "fo-property-external-destination">external-destination</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#external-destination">&sect;7.22.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-indicate-destination" id=
+ "fo-property-indicate-destination">indicate-destination</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#indicate-destination">&sect;7.22.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-internal-destination" id=
+ "fo-property-internal-destination">internal-destination</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#internal-destination">&sect;7.22.8</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-show-destination" id=
+ "fo-property-show-destination">show-destination</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#show-destination">&sect;7.22.9</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-starting-state" id=
+ "fo-property-starting-state">starting-state</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#starting-state">&sect;7.22.10</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>[0.93 and later] support for starting-state on <a href="#fo-bookmark">fo:bookmark</a></li>
- </ul> </td>
+ <li>[0.94 and later] support for starting-state on <a href=
+ "#fo-bookmark">fo:bookmark</a></li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-switch-to">switch-to</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#switch-to">&sect;7.22.11</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-target-presentation-context">target-presentation-context</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#target-presentation-context">&sect;7.22.12</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-target-processing-context">target-processing-context</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#target-processing-context">&sect;7.22.13</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-target-stylesheet">target-stylesheet</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#target-stylesheet">&sect;7.22.14</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-switch-to" id="fo-property-switch-to">switch-to</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#switch-to">&sect;7.22.11</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-markers-section">Properties for Markers</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N48193-Properties-for-Markers">&sect;7.23</a>) </td>
+ <td><a name="fo-property-target-presentation-context" id=
+ "fo-property-target-presentation-context">target-presentation-context</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#target-presentation-context">&sect;7.22.12</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-marker-class-name">marker-class-name</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#marker-class-name">&sect;7.23.1</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-retrieve-class-name">retrieve-class-name</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#retrieve-class-name">&sect;7.23.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-retrieve-position">retrieve-position</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#retrieve-position">&sect;7.23.3</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-retrieve-boundary">retrieve-boundary</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#retrieve-boundary">&sect;7.23.4</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-target-processing-context" id=
+ "fo-property-target-processing-context">target-processing-context</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#target-processing-context">&sect;7.22.13</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-numberstring-section">Properties for Number to String Conversion</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N48804-Properties-for-Number-to-String-Conversion">&sect;7.24</a>) </td>
+ <td><a name="fo-property-target-stylesheet" id=
+ "fo-property-target-stylesheet">target-stylesheet</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#target-stylesheet">&sect;7.22.14</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-format">format</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#format">&sect;7.24.1</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-grouping-separator">grouping-separator</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#grouping-separator">&sect;7.24.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-grouping-size">grouping-size</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#grouping-size">&sect;7.24.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-letter-value">letter-value</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#letter-value">&sect;7.24.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td class="category" colspan="8"><a name="fo-property-markers-section" id=
+ "fo-property-markers-section">Properties for Markers</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N48193-Properties-for-Markers">&sect;7.23</a>)</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-pagination-section">Pagination and Layout Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N49321-Pagination-and-Layout-Properties">&sect;7.25</a>) </td>
+ <td><a name="fo-property-marker-class-name" id=
+ "fo-property-marker-class-name">marker-class-name</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#marker-class-name">&sect;7.23.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-blank-or-not-blank">blank-or-not-blank</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#blank-or-not-blank">&sect;7.25.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-column-count">column-count</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-count">&sect;7.25.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-column-gap">column-gap</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-gap">&sect;7.25.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-extent">extent</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#extent">&sect;7.25.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-flow-name">flow-name</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#flow-name">&sect;7.25.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-force-page-count">force-page-count</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#force-page-count">&sect;7.25.6</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-initial-page-number">initial-page-number</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#initial-page-number">&sect;7.25.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-master-name">master-name</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#master-name">&sect;7.25.8</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-master-reference">master-reference</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#master-reference">&sect;7.25.9</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-maximum-repeats">maximum-repeats</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#maximum-repeats">&sect;7.25.10</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-media-usage">media-usage</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#media-usage">&sect;7.25.11</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-odd-or-even">odd-or-even</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#odd-or-even">&sect;7.25.12</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-page-height">page-height</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-height">&sect;7.25.13</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-page-position">page-position</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-position">&sect;7.25.14</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-retrieve-class-name" id=
+ "fo-property-retrieve-class-name">retrieve-class-name</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#retrieve-class-name">&sect;7.23.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-retrieve-position" id=
+ "fo-property-retrieve-position">retrieve-position</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#retrieve-position">&sect;7.23.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-retrieve-boundary" id=
+ "fo-property-retrieve-boundary">retrieve-boundary</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#retrieve-boundary">&sect;7.23.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-numberstring-section" id=
+ "fo-property-numberstring-section">Properties for Number to String Conversion</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N48804-Properties-for-Number-to-String-Conversion">&sect;7.24</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-format" id="fo-property-format">format</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#format">&sect;7.24.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-grouping-separator" id=
+ "fo-property-grouping-separator">grouping-separator</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#grouping-separator">&sect;7.24.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-grouping-size" id="fo-property-grouping-size">grouping-size</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#grouping-size">&sect;7.24.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-letter-value" id="fo-property-letter-value">letter-value</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#letter-value">&sect;7.24.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-pagination-section" id=
+ "fo-property-pagination-section">Pagination and Layout Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N49321-Pagination-and-Layout-Properties">&sect;7.25</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-blank-or-not-blank" id=
+ "fo-property-blank-or-not-blank">blank-or-not-blank</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#blank-or-not-blank">&sect;7.25.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-column-count" id="fo-property-column-count">column-count</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-count">&sect;7.25.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-column-gap" id="fo-property-column-gap">column-gap</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-gap">&sect;7.25.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-extent" id="fo-property-extent">extent</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#extent">&sect;7.25.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-flow-name" id="fo-property-flow-name">flow-name</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#flow-name">&sect;7.25.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-force-page-count" id=
+ "fo-property-force-page-count">force-page-count</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#force-page-count">&sect;7.25.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-initial-page-number" id=
+ "fo-property-initial-page-number">initial-page-number</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#initial-page-number">&sect;7.25.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-master-name" id="fo-property-master-name">master-name</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#master-name">&sect;7.25.8</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-master-reference" id=
+ "fo-property-master-reference">master-reference</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#master-reference">&sect;7.25.9</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-maximum-repeats" id=
+ "fo-property-maximum-repeats">maximum-repeats</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#maximum-repeats">&sect;7.25.10</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-media-usage" id="fo-property-media-usage">media-usage</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#media-usage">&sect;7.25.11</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-odd-or-even" id="fo-property-odd-or-even">odd-or-even</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#odd-or-even">&sect;7.25.12</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-page-height" id="fo-property-page-height">page-height</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-height">&sect;7.25.13</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-page-position" id="fo-property-page-position">page-position</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-position">&sect;7.25.14</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] "last" isn't implemented! </li>
- </ul> </td>
+ <li>[0.20.5] "last" isn't implemented!</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-page-width">page-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-width">&sect;7.25.15</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-precedence">precedence</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#precedence">&sect;7.25.16</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-region-name">region-name</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#region-name">&sect;7.25.17</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-page-width" id="fo-property-page-width">page-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-width">&sect;7.25.15</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-precedence" id="fo-property-precedence">precedence</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#precedence">&sect;7.25.16</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-table-section">Table Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N52000-Table-Properties">&sect;7.26</a>) </td>
+ <td><a name="fo-property-region-name" id="fo-property-region-name">region-name</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#region-name">&sect;7.25.17</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-after-precedence">border-after-precedence</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-precedence">&sect;7.26.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-before-precedence">border-before-precedence</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-precedence">&sect;7.26.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-collapse">border-collapse</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-collapse">&sect;7.26.3</a> </td>
- <td class="partial">partial</td>
+ <td class="category" colspan="8"><a name="fo-property-table-section" id=
+ "fo-property-table-section">Table Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N52000-Table-Properties">&sect;7.26</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-after-precedence" id=
+ "fo-property-border-after-precedence">border-after-precedence</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-after-precedence">&sect;7.26.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-before-precedence" id=
+ "fo-property-border-before-precedence">border-before-precedence</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-before-precedence">&sect;7.26.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
<td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-collapse" id=
+ "fo-property-border-collapse">border-collapse</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-collapse">&sect;7.26.3</a></td>
+
+ <td class="partial">partial</td>
+
<td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td class="yes">yes</td>
+
<td align="left">
<ul>
<li>[0.94 and later] Some small limitations</li>
</ul>
</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-end-precedence">border-end-precedence</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-precedence">&sect;7.26.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-separation">border-separation</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-separation">&sect;7.26.5</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-start-precedence">border-start-precedence</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-precedence">&sect;7.26.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-caption-side">caption-side</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#caption-side">&sect;7.26.7</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-column-number">column-number</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-number">&sect;7.26.8</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-column-width">column-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-width">&sect;7.26.9</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-end-precedence" id=
+ "fo-property-border-end-precedence">border-end-precedence</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-end-precedence">&sect;7.26.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-separation" id=
+ "fo-property-border-separation">border-separation</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-separation">&sect;7.26.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-start-precedence" id=
+ "fo-property-border-start-precedence">border-start-precedence</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-start-precedence">&sect;7.26.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-caption-side" id="fo-property-caption-side">caption-side</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#caption-side">&sect;7.26.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-column-number" id="fo-property-column-number">column-number</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-number">&sect;7.26.8</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-column-width" id="fo-property-column-width">column-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#column-width">&sect;7.26.9</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] "percentage" not implemented. Workaround is to use the XSL-FO "proportional-column-width" function. </li>
- </ul> </td>
+ <li>[0.20.5] "percentage" not implemented. Workaround is to use the XSL-FO
+ "proportional-column-width" function.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-empty-cells">empty-cells</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#empty-cells">&sect;7.26.10</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-ends-row">ends-row</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#ends-row">&sect;7.26.11</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-number-columns-repeated">number-columns-repeated</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#number-columns-repeated">&sect;7.26.12</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-number-columns-spanned">number-columns-spanned</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#number-columns-spanned">&sect;7.26.13</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-number-rows-spanned">number-rows-spanned</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#number-rows-spanned">&sect;7.26.14</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-starts-row">starts-row</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#starts-row">&sect;7.26.15</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-table-layout">table-layout</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#table-layout">&sect;7.26.16</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-table-omit-footer-at-break">table-omit-footer-at-break</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#table-omit-footer-at-break">&sect;7.26.17</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-table-omit-header-at-break">table-omit-header-at-break</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#table-omit-header-at-break">&sect;7.26.18</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-empty-cells" id="fo-property-empty-cells">empty-cells</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#empty-cells">&sect;7.26.10</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-ends-row" id="fo-property-ends-row">ends-row</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#ends-row">&sect;7.26.11</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-writingmode-section">Writing-mode-related Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#writing-mode-related">&sect;7.27</a>) </td>
+ <td><a name="fo-property-number-columns-repeated" id=
+ "fo-property-number-columns-repeated">number-columns-repeated</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#number-columns-repeated">&sect;7.26.12</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-direction">direction</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#direction">&sect;7.27.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-glyph-orientation-horizontal">glyph-orientation-horizontal</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#glyph-orientation-horizontal">&sect;7.27.2</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-glyph-orientation-vertical">glyph-orientation-vertical</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#glyph-orientation-vertical">&sect;7.27.3</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-text-altitude">text-altitude</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-altitude">&sect;7.27.4</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-text-depth">text-depth</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-depth">&sect;7.27.5</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-unicode-bidi">unicode-bidi</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#unicode-bidi">&sect;7.27.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-writing-mode">writing-mode</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#writing-mode">&sect;7.27.7</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-number-columns-spanned" id=
+ "fo-property-number-columns-spanned">number-columns-spanned</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#number-columns-spanned">&sect;7.26.13</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-number-rows-spanned" id=
+ "fo-property-number-rows-spanned">number-rows-spanned</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#number-rows-spanned">&sect;7.26.14</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-misc-section">Miscellaneous Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N56509-Miscellaneous-Properties">&sect;7.28</a>) </td>
+ <td><a name="fo-property-starts-row" id="fo-property-starts-row">starts-row</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#starts-row">&sect;7.26.15</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-content-type">content-type</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#content-type">&sect;7.28.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-id">id</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#id">&sect;7.28.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-table-layout" id="fo-property-table-layout">table-layout</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#table-layout">&sect;7.26.16</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-table-omit-footer-at-break" id=
+ "fo-property-table-omit-footer-at-break">table-omit-footer-at-break</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#table-omit-footer-at-break">&sect;7.26.17</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-table-omit-header-at-break" id=
+ "fo-property-table-omit-header-at-break">table-omit-header-at-break</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#table-omit-header-at-break">&sect;7.26.18</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-writingmode-section" id=
+ "fo-property-writingmode-section">Writing-mode-related Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#writing-mode-related">&sect;7.27</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-direction" id="fo-property-direction">direction</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#direction">&sect;7.27.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-glyph-orientation-horizontal" id=
+ "fo-property-glyph-orientation-horizontal">glyph-orientation-horizontal</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#glyph-orientation-horizontal">&sect;7.27.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-glyph-orientation-vertical" id=
+ "fo-property-glyph-orientation-vertical">glyph-orientation-vertical</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#glyph-orientation-vertical">&sect;7.27.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-text-altitude" id="fo-property-text-altitude">text-altitude</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-altitude">&sect;7.27.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-text-depth" id="fo-property-text-depth">text-depth</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#text-depth">&sect;7.27.5</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-unicode-bidi" id="fo-property-unicode-bidi">unicode-bidi</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#unicode-bidi">&sect;7.27.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-writing-mode" id="fo-property-writing-mode">writing-mode</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#writing-mode">&sect;7.27.7</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-misc-section" id=
+ "fo-property-misc-section">Miscellaneous Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N56509-Miscellaneous-Properties">&sect;7.28</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-content-type" id="fo-property-content-type">content-type</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#content-type">&sect;7.28.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-id" id="fo-property-id">id</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#id">&sect;7.28.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>[0.93 and later] IDs on table-header, table-footer, table-body, table-row, table-and-caption, table-caption, inline-container and bidi-override are not available, yet.</li>
- </ul> </td>
+ <li>[0.94 and later] IDs on table-header, table-footer, table-body, table-row,
+ table-and-caption, table-caption, inline-container and bidi-override are not available,
+ yet.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-provisional-label-separation">provisional-label-separation</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#provisional-label-separation">&sect;7.28.3</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-provisional-distance-between-starts">provisional-distance-between-starts</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#provisional-distance-between-starts">&sect;7.28.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-ref-id">ref-id</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#ref-id">&sect;7.28.5</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-score-spaces">score-spaces</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#score-spaces">&sect;7.28.6</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-src">src</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#src">&sect;7.28.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-visibility">visibility</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#visibility">&sect;7.28.8</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-z-index">z-index</a> </td>
- <td class="extended">
- Extended </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#z-index">&sect;7.28.9</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-property-provisional-label-separation" id=
+ "fo-property-provisional-label-separation">provisional-label-separation</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#provisional-label-separation">&sect;7.28.3</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-property-shorthand-section">Shorthand Properties</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N57854-Shorthand-Properties">&sect;7.29</a>) </td>
+ <td><a name="fo-property-provisional-distance-between-starts" id=
+ "fo-property-provisional-distance-between-starts">provisional-distance-between-starts</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#provisional-distance-between-starts">&sect;7.28.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-background">background</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background">&sect;7.29.1</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-background-position">background-position</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-position">&sect;7.29.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border">border</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border">&sect;7.29.3</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-bottom">border-bottom</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom">&sect;7.29.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-color">border-color</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-color">&sect;7.29.5</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-ref-id" id="fo-property-ref-id">ref-id</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#ref-id">&sect;7.28.5</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-score-spaces" id="fo-property-score-spaces">score-spaces</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#score-spaces">&sect;7.28.6</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-src" id="fo-property-src">src</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#src">&sect;7.28.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-visibility" id="fo-property-visibility">visibility</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#visibility">&sect;7.28.8</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-z-index" id="fo-property-z-index">z-index</a></td>
+
+ <td class="extended">Extended</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#z-index">&sect;7.28.9</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-property-shorthand-section" id=
+ "fo-property-shorthand-section">Shorthand Properties</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#section-N57854-Shorthand-Properties">&sect;7.29</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-background" id="fo-property-background">background</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background">&sect;7.29.1</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-background-position" id=
+ "fo-property-background-position">background-position</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#background-position">&sect;7.29.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border" id="fo-property-border">border</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border">&sect;7.29.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-bottom" id="fo-property-border-bottom">border-bottom</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-bottom">&sect;7.29.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-color" id="fo-property-border-color">border-color</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-color">&sect;7.29.5</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only one value allowed </li>
- </ul> </td>
+ <li>[0.20.5] only one value allowed</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-left">border-left</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left">&sect;7.29.6</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-right">border-right</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right">&sect;7.29.7</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-style">border-style</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-style">&sect;7.29.8</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-border-left" id="fo-property-border-left">border-left</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-left">&sect;7.29.6</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-right" id="fo-property-border-right">border-right</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-right">&sect;7.29.7</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-style" id="fo-property-border-style">border-style</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-style">&sect;7.29.8</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only "solid" works </li>
- </ul> </td>
+ <li>[0.20.5] only "solid" works</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-spacing" id=
+ "fo-property-border-spacing">border-spacing</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-spacing">&sect;7.29.9</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-border-spacing">border-spacing</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-spacing">&sect;7.29.9</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-top">border-top</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top">&sect;7.29.10</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-border-width">border-width</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-width">&sect;7.29.11</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-cue">cue</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#cue">&sect;7.29.12</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-font">font</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font">&sect;7.29.13</a> </td>
- <td class="no">
- no </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-border-top" id="fo-property-border-top">border-top</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-top">&sect;7.29.10</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-border-width" id="fo-property-border-width">border-width</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#border-width">&sect;7.29.11</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-cue" id="fo-property-cue">cue</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#cue">&sect;7.29.12</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-font" id="fo-property-font">font</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#font">&sect;7.29.13</a></td>
+
+ <td class="no">no</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="center">
<ul>
- <li>
- [0.93 and later] Enum values other than "inherit" not yet supported. </li>
- </ul> </td>
+ <li>[0.94 and later] Enum values other than "inherit" not yet supported.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-margin">margin</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin">&sect;7.29.14</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-margin" id="fo-property-margin">margin</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#margin">&sect;7.29.14</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only on pages and regions </li>
- </ul> </td>
+ <li>[0.20.5] only on pages and regions</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-padding">padding</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding">&sect;7.29.15</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <td><a name="fo-property-padding" id="fo-property-padding">padding</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#padding">&sect;7.29.15</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] only one value allowed </li>
- <li>
- [0.20.5] only implemented for blocks </li>
- <li>
- [0.20.5] can't be used to make extra space (use indents + spaces instead) </li>
- <li>
- [0.20.5] can be used to control how much the background-color extends beyond the content rectangle </li>
- </ul> </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-page-break-after">page-break-after</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-break-after">&sect;7.29.16</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-page-break-before">page-break-before</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-break-before">&sect;7.29.17</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-page-break-inside">page-break-inside</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-break-inside">&sect;7.29.18</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-pause">pause</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pause">&sect;7.29.19</a> </td>
- <td class="na">
- na </td>
- <td class="na"> na </td>
- <td class="na">
- na </td>
- <td class="na">
- na </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-position">position</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#position">&sect;7.29.20</a> </td>
- <td class="partial">
- partial </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
+ <li>[0.20.5] only one value allowed</li>
+
+ <li>[0.20.5] only implemented for blocks</li>
+
+ <li>[0.20.5] can't be used to make extra space (use indents + spaces instead)</li>
+
+ <li>[0.20.5] can be used to control how much the background-color extends beyond the
+ content rectangle</li>
+ </ul>
+ </td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-page-break-after" id=
+ "fo-property-page-break-after">page-break-after</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-break-after">&sect;7.29.16</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-page-break-before" id=
+ "fo-property-page-break-before">page-break-before</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-break-before">&sect;7.29.17</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-page-break-inside" id=
+ "fo-property-page-break-inside">page-break-inside</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#page-break-inside">&sect;7.29.18</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-pause" id="fo-property-pause">pause</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#pause">&sect;7.29.19</a></td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td class="na">na</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-position" id="fo-property-position">position</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#position">&sect;7.29.20</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] "inherit" not handled </li>
- </ul> </td>
+ <li>[0.20.5] "inherit" not handled</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-size">size</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#size">&sect;7.29.21</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-vertical-align">vertical-align</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#vertical-align">&sect;7.29.22</a> </td>
- <td class="partial">
- partial </td>
- <td class="partial"> partial </td>
- <td class="partial">
- partial </td>
- <td class="partial">
- partial </td>
+ <td><a name="fo-property-size" id="fo-property-size">size</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#size">&sect;7.29.21</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-vertical-align" id=
+ "fo-property-vertical-align">vertical-align</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#vertical-align">&sect;7.29.22</a></td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
+ <td class="partial">partial</td>
+
<td align="left">
<ul>
- <li>
- [0.20.5] Only works as a shorthand for baseline-shift property. </li>
- <li>
- [0.93 and later] Percentages are not supported, yet. </li>
- </ul> </td>
+ <li>[0.20.5] Only works as a shorthand for baseline-shift property.</li>
+
+ <li>[0.94 and later] Percentages are not supported, yet.</li>
+ </ul>
+ </td>
</tr>
+
<tr>
- <td>
- <a name="fo-property-white-space">white-space</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#white-space">&sect;7.29.23</a> </td>
- <td class="no">
- no </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-property-xml:lang">xml:lang</a> </td>
- <td class="complete">
- Complete </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#xml:lang">&sect;7.29.24</a> </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td class="yes">
- yes </td>
- <td align="center">[dev] Very basic parsing; no validation of the specified value.</td>
+ <td><a name="fo-property-white-space" id="fo-property-white-space">white-space</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#white-space">&sect;7.29.23</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-property-xml:lang" id="fo-property-xml:lang">xml:lang</a></td>
+
+ <td class="complete">Complete</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice7.html#xml:lang">&sect;7.29.24</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">[0.95] Very basic parsing; no validation of the specified value.</td>
</tr>
</table>
-<h1><a name="fo-function-core-library-section">XSL-FO Core Function Library Support Table</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8434-Core-Function-Library">&sect;5.10</a>)</h1>
- <p>
- The following is a summary of FOP's current support for the XSL-FO Core Function Library.
- </p>
+
+ <h1><a name="fo-function-core-library-section" id="fo-function-core-library-section">XSL-FO Core
+ Function Library Support Table</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8434-Core-Function-Library">&sect;5.10</a>)</h1>
+
+ <p>The following is a summary of FOP's current support for the XSL-FO Core Function Library.</p>
+
<table border="1">
<tr>
- <th rowspan="2">
- Function Name </th>
- <th rowspan="2" align="center">
- XSL-FO Conformance Level </th>
- <th rowspan="2" align="center">
- Citation </th>
- <th colspan="4" align="center">
- Support&nbsp;in&nbsp;FOP </th>
- <th rowspan="2">
- Comments </th>
+ <th rowspan="2">Function Name</th>
+
+ <th rowspan="2" align="center">XSL-FO Conformance Level</th>
+
+ <th rowspan="2" align="center">Citation</th>
+
+ <th colspan="4" align="center">Support&nbsp;in&nbsp;FOP</th>
+
+ <th rowspan="2">Comments</th>
</tr>
+
<tr>
- <th align="center">
- 0.20.5 (previous) </th>
- <th align="center">
- 0.93 (stable) </th>
- <th align="center"> 0.94 (stable) </th>
- <th align="center">
- develop- ment </th>
+ <th align="center">0.20.5 (ancient)</th>
+
+ <th align="center">0.94 (stable)</th>
+
+ <th align="center">0.95 (beta)</th>
+
+ <th align="center">develop- ment</th>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-function-number-section">Number Functions</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a>) </td>
+ <td class="category" colspan="8"><a name="fo-function-number-section" id=
+ "fo-function-number-section">Number Functions</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a>)</td>
</tr>
+
<tr>
- <td>
- <a name="fo-function-floor">floor</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-ceiling">ceiling</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-round">round</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-min">min</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-max">max</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-abs">abs</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-function-floor" id="fo-function-floor">floor</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-function-color-section">Color Functions</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a>) </td>
+ <td><a name="fo-function-ceiling" id="fo-function-ceiling">ceiling</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-function-rgb">rgb</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-rgb-icc">rgb-icc</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-system-color">system-color</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a> </td>
- <td class="no">
- no </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
+ <td><a name="fo-function-round" id="fo-function-round">round</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-function-font-section">Font Functions</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8601-Font-Functions">&sect;5.10.3</a>) </td>
+ <td><a name="fo-function-min" id="fo-function-min">min</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-function-system-font">system-font</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8601-Font-Functions">&sect;5.10.3</a> </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
+ <td><a name="fo-function-max" id="fo-function-max">max</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-abs" id="fo-function-abs">abs</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8438-Number-Functions">&sect;5.10.1</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-function-color-section" id=
+ "fo-function-color-section">Color Functions</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-rgb" id="fo-function-rgb">rgb</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-rgb-icc" id="fo-function-rgb-icc">rgb-icc</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a></td>
+
<td class="no">no</td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td class="category" colspan="8">
- <a name="fo-function-property-value-section">Property Value Functions</a> (<a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a>) </td>
+ <td><a name="fo-function-system-color" id="fo-function-system-color">system-color</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#expr-color-functions">&sect;5.10.2</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
</tr>
+
<tr>
- <td>
- <a name="fo-function-inherited-property-value">inherited-property-value</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-label-end">label-end</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-body-start">body-start</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-from-parent">from-parent</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-from-nearest-specified-value">from-nearest-specified-value</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-from-table-column">from-table-column</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="no">
- no </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-proportional-column-width">proportional-column-width</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="yes">
- yes </td>
- <td class="yes">
- yes </td>
- <td class="yes"> yes </td>
- <td class="yes">
- yes </td>
- <td align="center">&nbsp; </td>
- </tr>
- <tr>
- <td>
- <a name="fo-function-merge-property-values">merge-property-values</a> </td>
- <td class="basic">
- Basic </td>
- <td align="center">
- <a href="http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a> </td>
- <td class="no">
- no </td>
- <td class="no">
- no </td>
- <td class="no"> no </td>
- <td class="no">
- no </td>
- <td align="center">&nbsp; </td>
+ <td class="category" colspan="8"><a name="fo-function-font-section" id=
+ "fo-function-font-section">Font Functions</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8601-Font-Functions">&sect;5.10.3</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-system-font" id="fo-function-system-font">system-font</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8601-Font-Functions">&sect;5.10.3</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td class="category" colspan="8"><a name="fo-function-property-value-section" id=
+ "fo-function-property-value-section">Property Value Functions</a> (<a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">&sect;5.10.4</a>)</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-inherited-property-value" id=
+ "fo-function-inherited-property-value">inherited-property-value</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-label-end" id="fo-function-label-end">label-end</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-body-start" id="fo-function-body-start">body-start</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-from-parent" id="fo-function-from-parent">from-parent</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-from-nearest-specified-value" id=
+ "fo-function-from-nearest-specified-value">from-nearest-specified-value</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-from-table-column" id=
+ "fo-function-from-table-column">from-table-column</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-proportional-column-width" id=
+ "fo-function-proportional-column-width">proportional-column-width</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td class="yes">yes</td>
+
+ <td align="center">&nbsp;</td>
+ </tr>
+
+ <tr>
+ <td><a name="fo-function-merge-property-values" id=
+ "fo-function-merge-property-values">merge-property-values</a></td>
+
+ <td class="basic">Basic</td>
+
+ <td align="center"><a href=
+ "http://www.w3.org/TR/2001/REC-xsl-20011015/slice5.html#section-N8624-Property-Value-Functions">
+ &sect;5.10.4</a></td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td class="no">no</td>
+
+ <td align="center">&nbsp;</td>
</tr>
</table>
</body>
diff --git a/src/documentation/content/xdocs/dev/doc.xml b/src/documentation/content/xdocs/dev/doc.xml
index a9d054316..4fd6bce78 100644
--- a/src/documentation/content/xdocs/dev/doc.xml
+++ b/src/documentation/content/xdocs/dev/doc.xml
@@ -97,9 +97,9 @@ Maintenance branch releases either copy the trunk content to the maintenance bra
Step-by-step instructions for the deployment process again:
</p>
<note>
- Please make sure you use Forrest from the 0.7 branch for the time being. You will need
+ Please make sure you use Forrest from the Trunk (revision 632959 or later) for the time being. You will need
to download it directly from SVN:
- <link href="http://svn.apache.org/repos/asf/forrest/branches/forrest_07_branch">http://svn.apache.org/repos/asf/forrest/branches/forrest_07_branch</link>
+ <link href="http://svn.apache.org/repos/asf/forrest/trunk">http://svn.apache.org/repos/asf/forrest/trunk</link>
</note>
<ul>
<li>Modify the sources of the website and check locally with Forrest (run "forrest run" or just "forrest").</li>
diff --git a/src/documentation/content/xdocs/dev/release.xml b/src/documentation/content/xdocs/dev/release.xml
index fa4dbfa37..641758d78 100644
--- a/src/documentation/content/xdocs/dev/release.xml
+++ b/src/documentation/content/xdocs/dev/release.xml
@@ -73,7 +73,7 @@ The purpose of documenting it here is to facilitate consistency, ensure that the
<code>fop-hyph.jar</code> to lib/ (e.g. from
<code>http://sourceforge.net/projects/offo</code></li>
<li>Alternatively, create a build-local.properties file that points to the above libs.</li>
- <li>Run build[.sh] dist. Do this once using Sun JDK 1.3.1_15 or later and once with Sun JDK 1.4.2_08 or later. A Forrest installation is needed.</li>
+ <li>Run build[.sh] dist. Do this using Sun JDK 1.4.2_08 or later. A Forrest installation is needed.</li>
<li>Create signatures. Don't forget to upload your KEY:
<code>gpg -a -b --force-v3-sigs fop-0.94-src.tar.gz</code> etc.</li>
<li>Upload the dist and signature files to your web directory
diff --git a/src/documentation/content/xdocs/download.xml b/src/documentation/content/xdocs/download.xml
index 40e42236b..f0a2a0a61 100644
--- a/src/documentation/content/xdocs/download.xml
+++ b/src/documentation/content/xdocs/download.xml
@@ -84,7 +84,7 @@
<p/>
<table>
<tr>
- <th colspan="2">Latest Release</th>
+ <th colspan="2">Latest Stable Release</th>
</tr>
<tr>
<td>Repository URL</td>
@@ -103,6 +103,25 @@
</td>
</tr>
<tr>
+ <th colspan="2">Latest Release</th>
+ </tr>
+ <tr>
+ <td>Repository URL</td>
+ <td>
+ <link href="http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-0_95beta/">
+ <code>http://svn.apache.org/repos/asf/xmlgraphics/fop/tags/fop-0_95beta/</code>
+ </link>
+ </td>
+ </tr>
+ <tr>
+ <td>Web view</td>
+ <td>
+ <link href="http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95beta/">
+ <code>http://svn.apache.org/viewvc/xmlgraphics/fop/tags/fop-0_95beta/</code>
+ </link>
+ </td>
+ </tr>
+ <tr>
<th colspan="2">Trunk</th>
</tr>
<tr>
diff --git a/src/documentation/content/xdocs/faq.xml b/src/documentation/content/xdocs/faq.xml
index d488a1f3c..a75cd41e0 100644
--- a/src/documentation/content/xdocs/faq.xml
+++ b/src/documentation/content/xdocs/faq.xml
@@ -645,6 +645,21 @@ Check the following:</p>
</p>
</answer>
</faq>
+ <faq id="pdf-ps-java2d-differences">
+ <question>Why is the output of Java2D/AWT-based renderers different than, for example, PDF or PS?</question>
+ <answer>
+ <p>
+ If you render the same document once to a PNG or TIFF and once into a PDF, the output
+ may not be the same, i.e. line breaks are different or lines may have different heights.
+ The reason for this: The Java2D-based renderers use the font subsystem of Java2D/AWT. The
+ PDF and PS renderers use FOP's own font subsystem which provides much better font metrics
+ than Java2D. These can lead to different layout decisions when the same document is
+ rendered with different renderers. An alternative approach to fix this problem might be
+ available but it hasn't been tested, yet. See also the
+ <link href="0.95/output.html#general-fonts">notes on fonts in the various output formats</link>.
+ </p>
+ </answer>
+ </faq>
</part>
<part id="part-embedding">
<title>Embedding FOP. Using FOP in a servlet.</title>
diff --git a/src/documentation/content/xdocs/index.xml b/src/documentation/content/xdocs/index.xml
index b0f44fac3..9ed040184 100644
--- a/src/documentation/content/xdocs/index.xml
+++ b/src/documentation/content/xdocs/index.xml
@@ -29,14 +29,15 @@
<p>Apache FOP (Formatting Objects Processor) is a print formatter driven by XSL
formatting objects (XSL-FO) and an output independent formatter. It is a Java
application that reads a formatting object (FO) tree and renders the resulting
- pages to a specified output. <link href="0.94/output.html">Output formats</link>
+ pages to a specified output. <link href="0.95/output.html">Output formats</link>
currently supported include PDF, PS, PCL, AFP, XML (area tree representation),
Print, AWT and PNG, and to a lesser extent, RTF and TXT. The primary output target is PDF.
</p>
<figure width="480" height="260" src="images/document.jpg" alt="Render Diagram" />
<p>
- The latest stable version of FOP (<link href="0.94/">0.94</link>) is the second
- stable release after a large redesign effort and implements a large subset of the
+ A beta release of the latest version of FOP (<link href="0.95/">0.95</link>) is now
+ available. After a short testing period it will become the third
+ stable release after the large redesign effort and will implement a large subset of the
<link href="http://www.w3.org/TR/xsl11/">XSL-FO Version 1.1 W3C
Recommendation</link>.
</p>
diff --git a/src/documentation/content/xdocs/quickstartguide.xml b/src/documentation/content/xdocs/quickstartguide.xml
new file mode 100644
index 000000000..ca205f5a2
--- /dev/null
+++ b/src/documentation/content/xdocs/quickstartguide.xml
@@ -0,0 +1,124 @@
+<?xml version="1.0" standalone="no"?>
+<!--
+ 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.
+-->
+<!-- $Id: gethelp.xml 627324 2008-02-13 09:35:01Z maxberger $ -->
+<!DOCTYPE document PUBLIC "-//APACHE//DTD Documentation V1.3//EN" "http://forrest.apache.org/dtd/document-v13.dtd">
+<document>
+ <header>
+ <title>FOP: Quick Start Guide</title>
+ <subtitle>Everything you need to start using and appreciating Apache FOP quickly.</subtitle>
+ <version>$Revision: 627324 $</version>
+ </header>
+ <body>
+ <section id="essentials">
+ <title>FOP Essentials</title>
+ <p>The goal of this <strong>Quick Start Guide</strong> is to help novice users get Apache FOP up and running quickly. Typically, you'll need to:</p>
+ <ol>
+ <li><link href="download.html">Download FOP</link></li>
+ <li><link href="0.95/compiling.html">Build FOP</link> (you can skip this step if you download the binary distribution!)</li>
+ <li><link href="0.95/configuration.html">Configure FOP</link></li>
+ <li><link href="0.95/running.html">Run FOP</link></li>
+ </ol>
+ <p>Here are some links to help you find out what FOP can do, as well as how and where to get help:</p>
+ <ul>
+ <li><link href="0.95/embedding.html">Calling FOP from a Java Application</link></li>
+ <li><link href="0.95/servlets.html">Using FOP in Servlets</link></li>
+ <li><link href="0.95/anttask.html">Using FOP in an 'Ant' Build Script</link></li>
+ <li><link href="compliance.html" title="FOP Compliance">XSL-FO Compliance</link> (what FOP supports and what it doesn't)</li>
+ <li><link href="faq.html">FAQs</link></li>
+ <li><link href="gethelp.html">Getting Help</link></li>
+ <li><link href="maillist.html">Mailing Lists</link></li>
+ </ul>
+ <p>
+ Once you've familiarized yourself with the basics, you can get more detailed information,
+ in the detailed FOP <link href="0.95/index.html">product documentation</link>.
+ </p>
+ </section>
+
+ <section id="hello-world">
+ <title>Hello World with FOP</title>
+ <p>
+ This section walks you through a "Hello World!" page with Apache FOP. We're assuming you
+ download the binary distribution and that you have a Java Runtime Environment (version 1.4
+ or later) installed.
+ </p>
+ <ol>
+ <li>
+ Unpack the downloaded binary distribution to a directory of your choice (for example,
+ <code>C:\FOP</code> if you're on Windows). Let's call that
+ directory &lt;fop-home&gt;.
+ </li>
+ <li>
+ Get a command prompt in the &lt;fop-home&gt; directory and write:<br/>
+ Windows: <code>fop -fo examples/fo/basic/readme.fo -awt</code><br/>
+ Unix: <code>./fop.sh -fo examples/fo/basic/readme.fo -awt</code><br/>
+ </li>
+ <li>
+ If all went well, this should open a window showing you a "readme"-style document.
+ This is just to verify that FOP runs correctly.
+ </li>
+ <li>
+ Now, take your favorite XML editor and create a small XML file like the following. Replace
+ "Frank" with your own first name to make it a bit more personal and save it as
+ <code>name.xml</code>:<br/>
+ <source><![CDATA[<name>Frank</name>]]></source>
+ </li>
+ <li>
+ To produce a PDF file from this XML file, we need an XSLT stylesheet that converts the
+ XML to XSL-FO. This is the first step in the processing chain. The second step will be
+ done by FOP when it reads the generated XSL-FO document and formats it to a PDF document.
+ You can copy the following minimal XSLT stylesheet, which takes your first name and
+ produces a "Hello World!"-style document (save it as <code>name2fo.xsl</code>):<br/>
+ <source><![CDATA[<?xml version="1.0" encoding="utf-8"?>
+<xsl:stylesheet version="1.0"
+ xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
+ xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <xsl:output method="xml" indent="yes"/>
+ <xsl:template match="/">
+ <fo:root>
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="A4-portrait"
+ page-height="29.7cm" page-width="21.0cm" margin="2cm">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="A4-portrait">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>
+ Hello, <xsl:value-of select="name"/>!
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </xsl:template>
+</xsl:stylesheet>]]></source>
+
+ </li>
+ <li>
+ Finally, let's put the previous two steps together: Go back to the command prompt and
+ enter the following command:<br/>
+ Windows: <code>fop -xml name.xml -xsl name2fo.xsl -pdf name.pdf</code><br/>
+ Unix: <code>./fop.sh -xml name.xml -xsl name2fo.xsl -pdf name.pdf</code><br/>
+ </li>
+ <li>
+ You've produced your first PDF with Apache FOP! Please open <code>name.pdf</code>
+ in your favorite PDF viewer.
+ </li>
+ </ol>
+ </section>
+ </body>
+</document>
diff --git a/src/documentation/content/xdocs/site.xml b/src/documentation/content/xdocs/site.xml
index 7914d5ef2..18716903c 100644
--- a/src/documentation/content/xdocs/site.xml
+++ b/src/documentation/content/xdocs/site.xml
@@ -15,6 +15,7 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
+<!-- $Id$ -->
<site label="FOP" href="" xmlns="http://apache.org/forrest/linkmap/1.0" tab="home">
<!--
BEGIN Home tab
@@ -22,6 +23,7 @@
<about label="About">
<index label="Introduction" href="index.html"/>
<download label="Download" href="download.html"/>
+ <quickstartguide label="Quick Start Guide" href="quickstartguide.html"/>
<compliance label="Compliance" href="compliance.html" description="FOP Compliance"/>
<help label="Getting Help" href="gethelp.html"/>
<faqs label="FAQs" href="faq.html"/>
@@ -34,7 +36,6 @@
<all_sitePDF label="Full PDF" href="wholesite.pdf"/>
-->
</about>
-
<resources label="Resources">
<xsl-fo label="XSL-FO" href="fo.html"/>
@@ -57,12 +58,12 @@
-->
<!--
- BEGIN Version 0.93 documentation tab
+ BEGIN Version 0.94 documentation tab
-->
- <trunk label="FOP 0.93" href="0.93/" tab="oldstableversion">
+ <trunk label="FOP 0.94" href="0.94/" tab="previousversion">
<about label="About" href="index.html"/>
- <release label="Release Notes" href="releaseNotes_0.93.html"/>
- <changes label="Changes" href="changes_0.93.html"/>
+ <release label="Release Notes" href="releaseNotes_0.94.html"/>
+ <changes label="Changes" href="changes_0.94.html"/>
<knownissues label="Known Issues" href="knownissues_overview.html"/>
<upgrading label="Upgrading" href="upgrading.html"/>
@@ -89,16 +90,16 @@
</trunk>
<!--
- END Version 0.93 documentation tab
+ END Version 0.94 documentation tab
-->
<!--
- BEGIN Version 0.94 documentation tab
+ BEGIN Version 0.95 documentation tab
-->
- <trunk label="FOP 0.94" href="0.94/" tab="stableversion">
+ <trunk label="FOP 0.95beta" href="0.95/" tab="stableversion">
<about label="About" href="index.html"/>
- <release label="Release Notes" href="releaseNotes_0.94.html"/>
- <changes label="Changes" href="changes_0.94.html"/>
+ <release label="Release Notes" href="releaseNotes_0.95beta.html"/>
+ <changes label="Changes" href="changes_0.95beta.html"/>
<knownissues label="Known Issues" href="knownissues_overview.html"/>
<upgrading label="Upgrading" href="upgrading.html"/>
@@ -125,9 +126,9 @@
</trunk>
<!--
- END Version 0.94 documentation tab
+ END Version 0.95 documentation tab
-->
-
+
<!--
BEGIN Trunk documentation tab
-->
diff --git a/src/documentation/content/xdocs/status.xml b/src/documentation/content/xdocs/status.xml
index cb2c4aa0b..fa3e2e643 100644
--- a/src/documentation/content/xdocs/status.xml
+++ b/src/documentation/content/xdocs/status.xml
@@ -27,13 +27,13 @@
<body>
<section>
<title>Status</title>
- <p>[last updated 9 January 2007]</p>
+ <p>[last updated 4 March 2008]</p>
<figure width="585" height="175" src="images/track.png" alt="Planning and branches of FOP development"/>
<p>
This is the development status of Apache FOP. Development on
the maintenance branch where FOP 0.20.5 came from has been
halted. The code base has been largely redesigned. The new
- code base has reached release 0.94.
+ code base has reached release 0.95.
</p>
</section>
<section>
@@ -44,7 +44,7 @@
handle large documents.</p>
<p>The redesign of the code base has largely been completed. The
new code reached production quality with release 0.93. In the
- course of 2007 we plan to release version 1.0.</p>
+ course of 2008 or 2009 we hope to release version 1.0.</p>
<p>
If you're looking for a long-term road-map we have to disappoint you. This is Open
Source and we're mostly volunteers working in their free time. What we have
@@ -122,7 +122,7 @@
</tr>
<tr>
<td>Image Support</td>
- <td>stable, but in need of a redesign</td>
+ <td>beta (recently rewritten)</td>
</tr>
<tr>
<td>Hyphenation Subsystem</td>
diff --git a/src/documentation/content/xdocs/tabs.xml b/src/documentation/content/xdocs/tabs.xml
index bb2fd7e72..a42fc9bd7 100644
--- a/src/documentation/content/xdocs/tabs.xml
+++ b/src/documentation/content/xdocs/tabs.xml
@@ -21,14 +21,8 @@
<tabs software="FOP" title="FOP" copyright="@year@ The Apache Software Foundation" xmlns:xlink="http://www.w3.org/1999/xlink">
<tab label="Home" dir=""/>
- <tab label="Version 0.93" dir="0.93/"/>
<tab label="Version 0.94" dir="0.94/"/>
+ <tab label="Version 0.95beta" dir="0.95/"/>
<tab label="FOP Trunk" dir="trunk/"/>
<tab label="Development" dir="dev/"/>
- <!--
- <tab label="Design" dir="design/"/>
- -->
- <!--
- <tab label="Alt Design" dir="design/alt.design/"/>
- -->
</tabs>
diff --git a/src/documentation/content/xdocs/team.xml b/src/documentation/content/xdocs/team.xml
index 23cb87708..bd9f72fde 100644
--- a/src/documentation/content/xdocs/team.xml
+++ b/src/documentation/content/xdocs/team.xml
@@ -31,7 +31,6 @@
<title>Active Committers</title>
<note label="Important">Please don't write to any developer directly if you need help on using FOP. Only if you submit questions to the <link href="maillist.html#fop-user">FOP User Mailing List</link> will other FOP users be able to profit from answers given to your question. Another point is that a developer may have gone inactive or is on holidays in which case you may not get an answer in time.</note>
<ul>
- <li id="fb"><link href="mailto:bckfnn@worldonline.dk">Finn Bock</link> (FB)</li>
<li id="cb"><link href="mailto:bowditch_chris@hotmail.com">Chris Bowditch</link> (CB)
is a Java/VB Programmer from England.</li>
<li id="jb"><link href="mailto:jay@bryantcs.com">Jay Bryant</link> (JB) is a
@@ -51,10 +50,6 @@
<li id="vh"><link href="mailto:vhennebert@apache.org">Vincent Hennebert</link>
(VH), a Java developer from France; with an interest in typography, and in using
Fop as a pdf renderer for book-like documents.</li>
- <li id="ph"><link href="mailto:pherweg@web.de">Peter Herweg</link> (PH) is helping to
- integrate the jfor project's RTF support into the upcoming FOP 1.0 version.
- Born in 1978, he has been serving as an application developer for a small
- industrial company in Germany since 1999.</li>
<li id="cl"><link href="mailto:clay@apache.org">Clay Leeds</link> (CL)
is a web/WAP/Palm developer from Laguna Beach, California, USA. A
recent XML/XSL-FO convert, he has been nit-picking FAQs &amp; assorted web
@@ -78,7 +73,11 @@
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&#x00F6;rg Pietschmann</link> (JP)</li>
- <li id="ot"><link href="mailto:olegt@apache.org">Oleg Tkachenko</link> (OT)</li>
+ <li id="mb"><link href="mailto:max AT berger DOT name">Max Berger</link> (MB) is currently a
+ PostDoc pursuing an academic career in computer science. His main interest in FOP is to
+ improve the DocBook to PDF tool-chain to produce high quality output, while still
+ conforming to given style-guides. See his <link href="http://max.berger.name">home
+ page</link> for more information.</li>
<li id="mb"><link href="mailto:max AT berger DOT name">Max Berger</link> (MB) is currently a
PostDoc pursuing an academic career in computer science. His main interest in FOP is to
improve the DocBook to PDF tool-chain to produce high quality output, while still
@@ -109,11 +108,16 @@
<section id="commit-inactive">
<title>Inactive Committers</title>
<ul>
+ <li id="fb"><link href="mailto:bckfnn@worldonline.dk">Finn Bock</link> (FB)</li>
<li id="kc"><link href="mailto:kellyc@apache.org">Kelly Campbell</link></li>
<li id="sc"><link href="mailto:gears@apache.org">Steven Coffman</link></li>
<li id="bd"><link href="mailto:bdelacretaz@apache.org">Bertrand Delacretaz</link></li>
<li id="te"><link href="mailto:tore@apache.org">Tore Engvig</link></li>
<li id="sg"><link href="mailto:stanislav@apache.org">Stanislav Gorkhover</link></li>
+ <li id="ph"><link href="mailto:pherweg@web.de">Peter Herweg</link> (PH)<!-- is helping to
+ integrate the jfor project's RTF support into the upcoming FOP 1.0 version.
+ Born in 1978, he has been serving as an application developer for a small
+ industrial company in Germany since 1999.--></li>
<li id="fj"><link href="mailto:fotis@apache.org">Fotis Jannidis</link></li>
<li id="kl"><link href="mailto:klease@apache.org">Karen Lease</link></li>
<li id="kll"><link href="mailto:keiron@apache.org">Keiron Liddle</link></li>
@@ -122,6 +126,7 @@
<li id="jn"><link href="mailto:jordan@apache.org">Jordan Naftolin</link></li>
<li id="as"><link href="mailto:arved@apache.org">Arved Sandstrom</link></li>
<li id="es"><link href="mailto:eschaeffer@apache.org">Eric Schaeffer</link></li>
+ <li id="ot"><link href="mailto:olegt@apache.org">Oleg Tkachenko</link> (OT)</li>
<li id="aw"><link href="mailto:artw@apache.org">Art Welch</link></li>
<li id="pbw"><link href="mailto:pbwest@apache.org">Peter B. West</link></li>
</ul>
@@ -264,7 +269,7 @@
<td/>
<td/>
<td/>
- <td/>
+ <td>X</td>
<td/>
<td/>
<td/>
@@ -299,6 +304,19 @@
<td/>
</tr>
<tr>
+ <td>AFP</td>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ <td/>
+ </tr>
+ <tr>
<td>Forrest</td>
<td/>
<td/>
diff --git a/src/documentation/content/xdocs/trunk/compiling.xml b/src/documentation/content/xdocs/trunk/compiling.xml
index c6c17a3c0..57761429f 100644
--- a/src/documentation/content/xdocs/trunk/compiling.xml
+++ b/src/documentation/content/xdocs/trunk/compiling.xml
@@ -41,7 +41,7 @@
<section id="env-jdk">
<title>JDK</title>
<p>
- Building FOP requires a minimum Java Development Kit (JDK/SDK) of 1.3
+ Building FOP requires a minimum Java Development Kit (JDK/SDK) of 1.4
(A Java Runtime Environment is not sufficient).
</p>
</section>
@@ -59,7 +59,7 @@
<p>
The build script uses <a href="ext:ant">Apache Ant</a>, a popular
Java-based build tool, which usually requires that the environment variable JAVA_HOME point to
- your local JDK root directory. This is true even if you use JDK 1.3 or above, which normally
+ your local JDK root directory. This is true even if you use JDK 1.4 or above, which normally
does not need this setting.
</p>
</section>
diff --git a/src/documentation/content/xdocs/trunk/fonts.xml b/src/documentation/content/xdocs/trunk/fonts.xml
index e12527fe3..423eaad11 100644
--- a/src/documentation/content/xdocs/trunk/fonts.xml
+++ b/src/documentation/content/xdocs/trunk/fonts.xml
@@ -31,11 +31,6 @@
<body>
<section id="intro">
<title>Summary</title>
- <note>The FOP Font subsystem is currently undergoing a significant change.
- The details provided here especially related to the generation of FOP Font
- Metrics files and the FOP Font configuration are likely to change substantially
- in the future.
- </note>
<p>The following table summarizes the font capabilities of the various FOP renderers:</p>
<table>
<tr>
@@ -59,22 +54,22 @@
<td>yes</td>
<td>yes</td>
</tr>
- <!--tr> NOT AVAILABLE YET!!!
+ <tr>
<td>PCL</td>
<td>yes (modified)</td>
+ <td>yes (painted as bitmaps)</td>
+ <td>yes (painted as bitmaps)</td>
<td>no</td>
- <td>no</td>
- <td>no</td>
- </tr-->
+ </tr>
<tr>
- <td>TXT</td>
- <td>yes (used for layout but not for output)</td>
+ <td>AFP</td>
<td>no</td>
- <td>yes (used for layout but not for output)</td>
<td>no</td>
+ <td>yes</td>
+ <td>yes</td>
</tr>
<tr>
- <td>AWT</td>
+ <td>Java2D/AWT/Bitmap</td>
<td>if available from OS</td>
<td>yes</td>
<td>yes</td>
@@ -95,19 +90,26 @@
<td>n/a</td>
</tr>
<tr>
+ <td>TXT</td>
+ <td>yes (used for layout but not for output)</td>
+ <td>no</td>
+ <td>yes (used for layout but not for output)</td>
+ <td>no</td>
+ </tr>
+ <!--tr> NOT AVAILABLE
<td>MIF</td>
<td>n/a (font metrics not needed)</td>
<td>n/a</td>
<td>n/a</td>
<td>n/a</td>
- </tr>
- <tr>
+ </tr-->
+ <!--tr> NOT AVAILABLE
<td>SVG</td>
<td>if available from OS</td>
<td>yes</td>
<td>no</td>
<td>no</td>
- </tr>
+ </tr-->
<tr>
<td>XML</td>
<td>yes</td>
@@ -120,8 +122,8 @@
<section>
<title>Base-14 Fonts</title>
<p>
- The Adobe PDF Specification specifies a set of 14 fonts that must be
- available to every PDF reader:
+ The Adobe PostScript and PDF Specification specify a set of 14 fonts that must be
+ available to every PostScript interpreter and PDF reader:
Helvetica (normal, bold, italic, bold italic),
Times (normal, bold, italic, bold italic),
Courier (normal, bold, italic, bold italic),
@@ -147,73 +149,132 @@
</p>
</section>
<section id="awt">
- <title>AWT/Operating System Fonts</title>
- <p>The AWT family of renderers (AWT, Print, SVG), use the Java AWT libraries for font metric information. Through operating system registration, the AWT libraries know what fonts are available on the system, and the font metrics for each one.</p>
+ <title>Java2D/AWT/Operating System Fonts</title>
+ <p>
+ The Java2D family of renderers (Java2D, AWT, Print, TIFF, PNG), use the
+ Java AWT subsystem for font metric information. Through operating system
+ registration, the AWT subsystem knows what fonts are available on the system,
+ and the font metrics for each one.
+ </p>
+ <p>
+ When working with one of these output formats and you're missing a font, just
+ install it in your operating system and they should be available for these
+ renderers. Please note that this is not true for other output formats such as
+ PDF or PostScript.
+ </p>
</section>
+
<section id="custom">
<title>Custom Fonts</title>
- <p>Support for custom fonts is added by creating font metric files (written in XML) from the actual font files, and registering them with FOP. Currently only Type 1 and TrueType fonts can be added.
-More information about fonts can be found at:</p>
+ <p>
+ Support for custom fonts is highly output format dependent (see above table).
+ This section shows how to add Type 1 and TrueType fonts to the PDF, PostScript and
+ Java2D-based renderers. Other renderers (like AFP) support other font formats. Details
+ in this case can be found on the page about <a href="output.html">output formats</a>.
+ </p>
+ <p>
+ Prior to FOP version 0.94, it was always necessary to create an XML font metrics file
+ if you wanted to add a custom font. This unconvenient step has been removed and in
+ addition to that, FOP supports auto-registration of fonts, i.e. FOP can find fonts
+ installed in your operating system or can scan user-specified directories for fonts.
+ Font registration via XML font metrics file is still supported and is still necessary
+ if you want to use a TrueType Collection (*.ttc). Direct support for TrueType
+ collections may be added later. Furthermore, the XML font metrics files are still
+ required if you don't want to embed, but only reference a font.
+ </p>
+ <p>
+ Basic information about fonts can be found at:
+ </p>
<ul>
<li><a href="http://partners.adobe.com/asn/developer/type/ftypes.html">Adobe font types</a></li>
<li><a href="http://partners.adobe.com/asn/developer/technotes/fonts.html">Adobe Font Technote</a></li>
</ul>
+ </section>
+
+ <section id="basics">
+ <title>Basic font configuration</title>
+ <p>
+ If you want FOP to use custom fonts, you need to tell it where to find them. This
+ is done in the configuration file and once per renderer (because each output format
+ is a little different). In the basic form, you can either tell FOP to find your
+ operating system fonts or you can specify directories that it will search for
+ support fonts. These fonts will then automatically be registered.
+ </p>
+ <source><![CDATA[
+<fonts>
+ <!-- register all the fonts found in a directory -->
+ <directory>C:\MyFonts1</directory>
+
+ <!-- register all the fonts found in a directory
+ and all of its sub directories (use with care) -->
+ <directory recursive="true">C:\MyFonts2</directory>
+
+ <!-- automatically detect operating system installed fonts -->
+ <auto-detect/>
+</fonts>]]></source>
+ <note>
+ Review the documentation for <a href="configuration.html">FOP Configuration</a>
+ for instructions on making the FOP configuration available to FOP when it runs.
+ Otherwise, FOP has no way of finding your custom font information. It is currently
+ not possible to easily configure fonts from Java code.
+ </note>
+ </section>
+
+ <section id="advanced">
+ <title>Advanced font configuration</title>
+ <p>
+ The instructions found above should be sufficient for most users. Below are some
+ additional instructions in case the basic font configuration doesn't lead to
+ the desired results.
+ </p>
<section id="type1-metrics">
<title>Type 1 Font Metrics</title>
<p>FOP includes PFMReader, which reads the PFM file that normally comes with a Type 1 font, and generates an appropriate font metrics file for it.
-To use it, run the class org.apache.fop.fonts.apps.PFMReader:</p>
- <p>Windows (on JDK 1.4 and later):</p>
+ To use it, run the class org.apache.fop.fonts.apps.PFMReader:</p>
+ <p>Windows:</p>
<source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>Windows (on JDK 1.3.x):</p>
- <source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar;lib\xml-apis.jar;
- lib\xercesImpl.jar;lib\xalan.jar;lib\serializer.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>Unix (on JDK 1.4 and later):</p>
+ org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
+ <p>Unix:</p>
<source>java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
- <p>Unix (on JDK 1.3.1):</p>
- <source>java -cp build/fop.jar:lib/avalon-framework.jar:lib/commons-logging.jar:lib/commons-io.jar:lib/xml-apis.jar:
- lib/xercesImpl.jar:lib/xalan.jar:lib/serializer.jar
- org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
+ org.apache.fop.fonts.apps.PFMReader [options] pfm-file xml-file</source>
<p>PFMReader [options]:</p>
<ul>
<li><strong>-fn &lt;fontname&gt;</strong> By default, FOP uses the fontname from the
-.pfm file when embedding the font. Use the "-fn" option to override this name with one you have
-chosen. This may be useful in some cases to ensure that applications using the output document
-(Acrobat Reader for example) use the embedded font instead of a local font with the same
-name.</li>
+ .pfm file when embedding the font. Use the "-fn" option to override this name with one you have
+ chosen. This may be useful in some cases to ensure that applications using the output document
+ (Acrobat Reader for example) use the embedded font instead of a local font with the same
+ name.</li>
</ul>
<note>The classpath in the above example has been simplified for readability.
-You will have to adjust the classpath to the names of the actual JAR files in the lib directory.
-xml-apis.jar, xercesImpl.jar, xalan.jar and serializer.jar are not necessary for JDK version 1.4 or later.</note>
+ You will have to adjust the classpath to the names of the actual JAR files in the lib directory.
+ xml-apis.jar, xercesImpl.jar, xalan.jar and serializer.jar are not necessary for JDK version 1.4 or later.</note>
<note>The tool will construct some values (FontBBox, StemV and ItalicAngle) based on assumptions and calculations which are only an approximation to the real values.
-FontBBox and Italic Angle can be found in the human-readable part of the PFB file or in the AFM file.
-The PFMReader tool does not yet interpret PFB or AFM files, so if you want to be correct, you may have to adjust the values in the XML file manually.
-The constructed values however appear to have no visible influence.</note>
+ FontBBox and Italic Angle can be found in the human-readable part of the PFB file or in the AFM file.
+ The PFMReader tool does not yet interpret PFB or AFM files, so if you want to be correct, you may have to adjust the values in the XML file manually.
+ The constructed values however appear to have no visible influence.</note>
</section>
<section id="truetype-metrics">
<title>TrueType Font Metrics</title>
<p>FOP includes TTFReader, which reads the TTF file and generates an appropriate font metrics file for it.
-Use it in a similar manner to PFMReader.
-For example, to create such a metrics file in Windows from the TrueType font at c:\myfonts\cmr10.ttf:</p>
+ Use it in a similar manner to PFMReader.
+ For example, to create such a metrics file in Windows from the TrueType font at c:\myfonts\cmr10.ttf:</p>
<source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
- org.apache.fop.fonts.apps.TTFReader [options]
- C:\myfonts\cmr10.ttf ttfcm.xml</source>
+ org.apache.fop.fonts.apps.TTFReader [options]
+ C:\myfonts\cmr10.ttf ttfcm.xml</source>
<p>TTFReader [options]:</p>
<ul>
<li><strong>-d &lt;DEBUG | INFO &gt;</strong> Sets the debug level (default is
-INFO).</li>
+ INFO).</li>
<li><strong>-fn &lt;fontname&gt;</strong> Same as for PFMReader.</li>
<li><strong>-ttcname &lt;fontname&gt;</strong> If you're reading data from a
-TrueType Collection (.ttc file) you must specify which font from the collection you will read
-metrics from.
-If you read from a .ttc file without this option, the fontnames will be listed for you.</li>
+ TrueType Collection (.ttc file) you must specify which font from the collection you will read
+ metrics from.
+ If you read from a .ttc file without this option, the fontnames will be listed for you.</li>
<li><strong>-enc ansi</strong> Creates a WinAnsi-encoded font metrics file.
-Without this option, a CID-keyed font metrics file is created.
-The table below summarizes the differences between these two encoding options as currently
-used within FOP.
-Please note that this information only applies to TrueType fonts and TrueType collections:</li>
+ Without this option, a CID-keyed font metrics file is created.
+ The table below summarizes the differences between these two encoding options as currently
+ used within FOP.
+ Please note that this information only applies to TrueType fonts and TrueType collections:</li>
</ul>
<table id="ttf-encoding">
<tr>
@@ -240,13 +301,13 @@ Please note that this information only applies to TrueType fonts and TrueType co
<section id="truetype-collections-metrics">
<title>TrueType Collections Font Metrics</title>
<p>TrueType collections (.ttc files) contain more than one font.
-To create metrics files for these fonts, you must specify which font in the collection should be generated, by using the "-ttcname" option with the TTFReader.</p>
+ To create metrics files for these fonts, you must specify which font in the collection should be generated, by using the "-ttcname" option with the TTFReader.</p>
<p>To get a list of the fonts in a collection, just start the TTFReader as if it were a normal TrueType file (without the -ttcname option).
-It will display all of the font names and exit with an Exception.</p>
+ It will display all of the font names and exit with an Exception.</p>
<p>Here is an example of generating a metrics file for a .ttc file:</p>
<source>java -cp build\fop.jar;lib\avalon-framework.jar;lib\commons-logging.jar;lib\commons-io.jar
- org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho"
- msmincho.ttc msminch.xml</source>
+ org.apache.fop.fonts.apps.TTFReader -ttcname "MS Mincho"
+ msmincho.ttc msminch.xml</source>
</section>
<section id="register">
<title>Register Fonts with FOP</title>
@@ -269,16 +330,16 @@ It will display all of the font names and exit with an Exception.</p>
<!-- automatically detect operating system installed fonts -->
<auto-detect/>
</fonts>]]></source>
- <note>Review the documentation for <a href="configuration.html">FOP Configuration</a> for instructions on making the FOP configuration available to FOP when it runs. Otherwise, FOP has no way of finding your custom font information.</note>
<ul>
<li>
URLs are used to access the font metric and font files.
Relative URLs are resolved relative to the font-base property (or base) if available.
See <a href="configuration.html">FOP: Configuration</a> for more information.
</li>
+ <li>The "metrics-url" attribute is generally not necessary except if you run into problems with certain fonts.</li>
<li>Either an "embed-url" or a "metrics-url" must be specified for font tag configurations.</li>
- <li>The font "kerning" attribute is optional.</li>
- <li>If embedding is off, the output will position the text correctly (from the metrics file), but it will not be displayed or printed correctly unless the viewer has the applicable font available to their local system.</li>
+ <li>The font "kerning" attribute is optional. Default is "true".</li>
+ <li>If embedding is off (i.e. embed-url is not set), the output will position the text correctly (from the metrics file), but it will not be displayed or printed correctly unless the viewer has the applicable font available to their local system.</li>
<li>When setting the "embed-url" attribute for Type 1 fonts, be sure to specify the PFB (actual font data), not PFM (font metrics) file that you used to generate the XML font metrics file.</li>
<li>The fonts "directory" tag can be used to register fonts contained within a single or list of directory paths. The "recursive" attribute can be specified to recursively add fonts from all sub directories.</li>
<li>The fonts "auto-detect" tag can be used to automatically register fonts that are found to be installed on the native operating system.</li>
@@ -294,37 +355,38 @@ It will display all of the font names and exit with an Exception.</p>
</section>
<section id="autodetect">
<title>Auto-Detect and auto-embedd feature</title>
- <p>When the "auto-detect" flag is set in the configuration, FOP will automatically search for fonts in the default paths for your operating system.</p>
- <p>FOP will also auto-detect fonts which are available in the classpath, if they are described as "application/x-font" in the MANIFEST.MF file. For example, if your .jar file contains font/myfont.ttf:</p>
- <source>Manifest-Version: 1.0
-
-Name: font/myfont.ttf
-Content-Type: application/x-font</source>
- <p>This feature allows you to create JAR files containing fonts. The JAR files can be added to fop by providem them in the classpath, e.g. copying them into the lib/ directory.</p>
+ <p>When the "auto-detect" flag is set in the configuration, FOP will automatically search for fonts in the default paths for your operating system.</p>
+ <p>FOP will also auto-detect fonts which are available in the classpath, if they are described as "application/x-font" in the MANIFEST.MF file. For example, if your .jar file contains font/myfont.ttf:</p>
+ <source>Manifest-Version: 1.0
+
+ Name: font/myfont.ttf
+ Content-Type: application/x-font</source>
+ <p>This feature allows you to create JAR files containing fonts. The JAR files can be added to fop by providem them in the classpath, e.g. copying them into the lib/ directory.</p>
</section>
<section id="embedding">
<title>Embedding</title>
<note>The PostScript renderer does not yet support TrueType fonts, but can embed Type 1 fonts.</note>
<note>The font is simply embedded into the PDF file, it is not converted.</note>
<p>Font embedding is enabled in the userconfig.xml file and controlled by the embed-url attribute.
-If you don't specify the embed-url attribute the font will not be embedded, but will only be referenced.</p>
+ If you don't specify the embed-url attribute the font will not be embedded, but will only be referenced.</p>
<warning>
Omitting the embed-url attribute for CID-encoded TrueType fonts will currently produce invalid
PDF files! If you create the XML font metric file using the "-enc ansi" option, you can omit
the embed-url attribute for TrueType fonts but you're restricted to the WinAnsi character set.
</warning>
<p>When FOP embeds a font, it adds a prefix to the fontname to ensure that the name will not match the fontname of an installed font.
-This is helpful with older versions of Acrobat Reader that preferred installed fonts over embedded fonts.</p>
+ This is helpful with older versions of Acrobat Reader that preferred installed fonts over embedded fonts.</p>
<p>When embedding PostScript fonts, the entire font is always embedded.</p>
<p>When embedding TrueType fonts (ttf) or TrueType Collections (ttc), a subset of the
original font, containing only the glyphs used, is embedded in the output document.</p>
</section>
+ <!-- The following section should no longer be required
<section id="embedding-base14">
<title>Explicitly embedding the base 14 fonts</title>
<p>
There are cases where you might want to force the embedding of one or more of the base 14 fonts that
can normally be considered available on the target platform (viewer, printer). One of these cases is
- PDF/A which mandates the embedding of even the base 14 fonts. Embedding a font such as Helvetica or
+ <a href="pdfa.html">PDF/A</a> which mandates the embedding of even the base 14 fonts. Embedding a font such as Helvetica or
Courier is straight-forward. The "Symbol" and "ZapfDingbats" fonts, however, currently present a
problem because FOP cannot correctly determine the encoding of these two single-byte fonts through
the PFM file. FOP now correctly interprets the "encoding" value in the XML font metrics file, but the
@@ -342,7 +404,7 @@ This is helpful with older versions of Acrobat Reader that preferred installed f
<cap-height>673</cap-height>
<x-height>766</x-height>
[..]]]></source>
- </section>
+ </section-->
</section>
</body>
</document>
diff --git a/src/documentation/content/xdocs/trunk/output.xml b/src/documentation/content/xdocs/trunk/output.xml
index d6021414f..628df1248 100644
--- a/src/documentation/content/xdocs/trunk/output.xml
+++ b/src/documentation/content/xdocs/trunk/output.xml
@@ -48,6 +48,35 @@
The net effect is that the layout of a given FO document can be quite different between
renderers that do not use the same font information.
</p>
+ <p>
+ Theoretically, there's some potential to make the output of the PDF/PS renderers match
+ the output of the Java2D-based renderers. If FOP used the font metrics from its own
+ font subsystem but still used Java2D for text painting in the Java2D-based renderers,
+ this could probably be achieved. However, this approach hasn't been implemented, yet.
+ </p>
+ <p>
+ With a work-around, it is possible to match the PDF/PS output in a Java2D-based
+ renderer pretty closely. The clue is to use the
+ <a href="intermediate.html">intermediate format</a>. The trick is to layout the
+ document using FOP's own font subsystem but then render the document using Java2D.
+ Here are the necessary steps (using the command-line):
+ </p>
+ <ol>
+ <li>
+ Produce an IF file: <code>fop -fo myfile.fo -at application/pdf myfile.at.xml</code><br/>
+ Specifying "application/pdf" for the "-at" parameter causes FOP to use FOP's own
+ font subsystem (which is used by the PDF renderer). Note that no PDF file is created
+ in this step.
+ </li>
+ <li>Render to a PDF file: <code>fop -atin myfile.at.xml -pdf myfile.pdf</code></li>
+ <li>Render to a Java2D-based renderer:
+ <ul>
+ <li><code>fop -atin myfile.at.xml -print</code></li>
+ <li><code>fop -atin myfile.at.xml -awt</code></li>
+ <li><code>fop -atin myfile.at.xml -tiff myfile.tiff</code></li>
+ </ul>
+ </li>
+ </ol>
</section>
<section id="general-direct-output">
<title>Output to a Printer or Other Device</title>
diff --git a/src/documentation/content/xdocs/trunk/pdfencryption.xml b/src/documentation/content/xdocs/trunk/pdfencryption.xml
index c8cdbb29c..22d965057 100644
--- a/src/documentation/content/xdocs/trunk/pdfencryption.xml
+++ b/src/documentation/content/xdocs/trunk/pdfencryption.xml
@@ -204,15 +204,13 @@ Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, userAgent);
</p>
<ol>
<li>
- Download the binary distribution for your JDK version. If you have JDK
- 1.3 or earlier you must also download a JCE from the same page.
+ Download the binary distribution for your JDK version.
</li>
<li>
Unpack the distribution. Add the jar file to your classpath. A
convenient way to use the jar on Linux is to simply drop it into the
FOP lib directory, it will be automatically picked up by
- <code>fop.sh</code>. If you have JDK 1.3 or earlier don't forget to
- install the JCE as well.
+ <code>fop.sh</code>.
</li>
<li>
Open the <code>java.security</code> file and add<br/>
diff --git a/src/documentation/content/xdocs/trunk/running.xml b/src/documentation/content/xdocs/trunk/running.xml
index 38df4be82..38e31cc6c 100644
--- a/src/documentation/content/xdocs/trunk/running.xml
+++ b/src/documentation/content/xdocs/trunk/running.xml
@@ -305,7 +305,7 @@ Fop [options] [-fo|-xml] infile [-xsl file] [-awt|-pdf|-mif|-rtf|-tiff|-png|-pcl
<ul>
<li>
Increase memory available to the JVM. See
- <a href="http://java.sun.com/j2se/1.3/docs/tooldocs/solaris/java.html">the -Xmx option</a>
+ <a href="http://java.sun.com/j2se/1.4/docs/tooldocs/solaris/java.html">the -Xmx option</a>
for more information.
<warning>
It is usually unwise to increase the memory allocated to the JVM beyond the amount of
diff --git a/src/documentation/poster/README.txt b/src/documentation/poster/README.txt
index bc21dcc37..d5ef2c0a2 100644
--- a/src/documentation/poster/README.txt
+++ b/src/documentation/poster/README.txt
@@ -5,7 +5,8 @@ created for OpenExpo '06 (http://www.openexpo.ch).
To create the PDF just call go.bat.
-The fully reconstruct the PDF you need to copy some fonts into
-the cfg directory. Please see the README.txt there for details.
+The fully reconstruct the PDF you need some fonts installed in
+your operating system: Verdana and Lucida Console which are
+available in every Windows installation.
You will also need English hyphenation patterns. \ No newline at end of file
diff --git a/src/documentation/poster/cfg/README.txt b/src/documentation/poster/cfg/README.txt
deleted file mode 100644
index b63dc83dd..000000000
--- a/src/documentation/poster/cfg/README.txt
+++ /dev/null
@@ -1,7 +0,0 @@
-The following files are missing here for license reasons:
-
-lucon.ttf - Lucida Console Font
-verdana.ttf - Verdana Font
-verdanab.ttf - Verdana Bold Font
-
-They can be found in every MS Windows installation. \ No newline at end of file
diff --git a/src/documentation/poster/cfg/VERDANA.ttf.xml b/src/documentation/poster/cfg/VERDANA.ttf.xml
deleted file mode 100644
index 1c113be9d..000000000
--- a/src/documentation/poster/cfg/VERDANA.ttf.xml
+++ /dev/null
@@ -1,1817 +0,0 @@
-<?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.
--->
-<!-- $Id$ -->
-<font-metrics type="TYPE0">
- <font-name>Verdana</font-name>
- <embed/>
- <cap-height>727</cap-height>
- <x-height>545</x-height>
- <ascender>764</ascender>
- <descender>-206</descender>
- <bbox>
- <left>-49</left>
- <bottom>-206</bottom>
- <right>1446</right>
- <top>1000</top>
- </bbox>
- <flags>33</flags>
- <stemv>0</stemv>
- <italicangle>0</italicangle>
- <subtype>TYPE0</subtype>
- <multibyte-extras>
- <cid-type>CIDFontType2</cid-type>
- <default-width>0</default-width>
- <bfranges>
- <bf us="32" ue="126" gi="3"/>
- <bf us="160" ue="160" gi="3"/>
- <bf us="161" ue="161" gi="163"/>
- <bf us="162" ue="163" gi="132"/>
- <bf us="164" ue="164" gi="892"/>
- <bf us="165" ue="165" gi="150"/>
- <bf us="166" ue="166" gi="230"/>
- <bf us="167" ue="167" gi="134"/>
- <bf us="168" ue="168" gi="142"/>
- <bf us="169" ue="169" gi="139"/>
- <bf us="170" ue="170" gi="157"/>
- <bf us="171" ue="171" gi="169"/>
- <bf us="172" ue="172" gi="164"/>
- <bf us="173" ue="173" gi="16"/>
- <bf us="174" ue="174" gi="138"/>
- <bf us="175" ue="175" gi="256"/>
- <bf us="176" ue="176" gi="131"/>
- <bf us="177" ue="177" gi="147"/>
- <bf us="178" ue="179" gi="240"/>
- <bf us="180" ue="180" gi="141"/>
- <bf us="181" ue="181" gi="151"/>
- <bf us="182" ue="182" gi="136"/>
- <bf us="183" ue="183" gi="257"/>
- <bf us="184" ue="184" gi="220"/>
- <bf us="185" ue="185" gi="239"/>
- <bf us="186" ue="186" gi="158"/>
- <bf us="187" ue="187" gi="170"/>
- <bf us="188" ue="188" gi="243"/>
- <bf us="189" ue="189" gi="242"/>
- <bf us="190" ue="190" gi="244"/>
- <bf us="191" ue="191" gi="162"/>
- <bf us="192" ue="192" gi="172"/>
- <bf us="193" ue="193" gi="200"/>
- <bf us="194" ue="194" gi="198"/>
- <bf us="195" ue="195" gi="173"/>
- <bf us="196" ue="197" gi="98"/>
- <bf us="198" ue="198" gi="144"/>
- <bf us="199" ue="199" gi="100"/>
- <bf us="200" ue="200" gi="202"/>
- <bf us="201" ue="201" gi="101"/>
- <bf us="202" ue="202" gi="199"/>
- <bf us="203" ue="203" gi="201"/>
- <bf us="204" ue="204" gi="206"/>
- <bf us="205" ue="207" gi="203"/>
- <bf us="208" ue="208" gi="231"/>
- <bf us="209" ue="209" gi="102"/>
- <bf us="210" ue="210" gi="209"/>
- <bf us="211" ue="212" gi="207"/>
- <bf us="213" ue="213" gi="174"/>
- <bf us="214" ue="214" gi="103"/>
- <bf us="215" ue="215" gi="238"/>
- <bf us="216" ue="216" gi="145"/>
- <bf us="217" ue="217" gi="212"/>
- <bf us="218" ue="219" gi="210"/>
- <bf us="220" ue="220" gi="104"/>
- <bf us="221" ue="221" gi="233"/>
- <bf us="222" ue="222" gi="235"/>
- <bf us="223" ue="223" gi="137"/>
- <bf us="224" ue="224" gi="106"/>
- <bf us="225" ue="225" gi="105"/>
- <bf us="226" ue="226" gi="107"/>
- <bf us="227" ue="227" gi="109"/>
- <bf us="228" ue="228" gi="108"/>
- <bf us="229" ue="229" gi="110"/>
- <bf us="230" ue="230" gi="160"/>
- <bf us="231" ue="231" gi="111"/>
- <bf us="232" ue="232" gi="113"/>
- <bf us="233" ue="233" gi="112"/>
- <bf us="234" ue="235" gi="114"/>
- <bf us="236" ue="236" gi="117"/>
- <bf us="237" ue="237" gi="116"/>
- <bf us="238" ue="239" gi="118"/>
- <bf us="240" ue="240" gi="232"/>
- <bf us="241" ue="241" gi="120"/>
- <bf us="242" ue="242" gi="122"/>
- <bf us="243" ue="243" gi="121"/>
- <bf us="244" ue="244" gi="123"/>
- <bf us="245" ue="245" gi="125"/>
- <bf us="246" ue="246" gi="124"/>
- <bf us="247" ue="247" gi="183"/>
- <bf us="248" ue="248" gi="161"/>
- <bf us="249" ue="249" gi="127"/>
- <bf us="250" ue="250" gi="126"/>
- <bf us="251" ue="252" gi="128"/>
- <bf us="253" ue="253" gi="234"/>
- <bf us="254" ue="254" gi="236"/>
- <bf us="255" ue="255" gi="185"/>
- <bf us="256" ue="257" gi="324"/>
- <bf us="258" ue="261" gi="258"/>
- <bf us="262" ue="263" gi="251"/>
- <bf us="264" ue="267" gi="326"/>
- <bf us="268" ue="269" gi="253"/>
- <bf us="270" ue="272" gi="262"/>
- <bf us="273" ue="273" gi="255"/>
- <bf us="274" ue="279" gi="330"/>
- <bf us="280" ue="283" gi="265"/>
- <bf us="284" ue="285" gi="336"/>
- <bf us="286" ue="287" gi="246"/>
- <bf us="288" ue="303" gi="338"/>
- <bf us="304" ue="304" gi="248"/>
- <bf us="305" ue="305" gi="213"/>
- <bf us="306" ue="307" gi="312"/>
- <bf us="308" ue="312" gi="354"/>
- <bf us="313" ue="314" gi="269"/>
- <bf us="315" ue="316" gi="359"/>
- <bf us="317" ue="320" gi="271"/>
- <bf us="321" ue="322" gi="224"/>
- <bf us="323" ue="324" gi="275"/>
- <bf us="325" ue="326" gi="361"/>
- <bf us="327" ue="328" gi="277"/>
- <bf us="329" ue="329" gi="314"/>
- <bf us="330" ue="335" gi="363"/>
- <bf us="336" ue="337" gi="279"/>
- <bf us="338" ue="339" gi="175"/>
- <bf us="340" ue="341" gi="281"/>
- <bf us="342" ue="343" gi="369"/>
- <bf us="344" ue="347" gi="283"/>
- <bf us="348" ue="349" gi="371"/>
- <bf us="350" ue="351" gi="249"/>
- <bf us="352" ue="353" gi="226"/>
- <bf us="354" ue="357" gi="287"/>
- <bf us="358" ue="365" gi="373"/>
- <bf us="366" ue="369" gi="291"/>
- <bf us="370" ue="375" gi="381"/>
- <bf us="376" ue="376" gi="186"/>
- <bf us="377" ue="380" gi="295"/>
- <bf us="381" ue="382" gi="228"/>
- <bf us="383" ue="383" gi="387"/>
- <bf us="402" ue="402" gi="166"/>
- <bf us="416" ue="417" gi="582"/>
- <bf us="431" ue="432" gi="584"/>
- <bf us="506" ue="511" gi="388"/>
- <bf us="710" ue="710" gi="214"/>
- <bf us="711" ue="711" gi="223"/>
- <bf us="713" ue="713" gi="216"/>
- <bf us="728" ue="730" gi="217"/>
- <bf us="731" ue="731" gi="222"/>
- <bf us="732" ue="732" gi="215"/>
- <bf us="733" ue="733" gi="221"/>
- <bf us="768" ue="769" gi="588"/>
- <bf us="771" ue="771" gi="891"/>
- <bf us="777" ue="777" gi="586"/>
- <bf us="803" ue="803" gi="587"/>
- <bf us="894" ue="894" gi="30"/>
- <bf us="900" ue="902" gi="413"/>
- <bf us="903" ue="903" gi="394"/>
- <bf us="904" ue="906" gi="416"/>
- <bf us="908" ue="908" gi="419"/>
- <bf us="910" ue="914" gi="420"/>
- <bf us="915" ue="915" gi="299"/>
- <bf us="916" ue="919" gi="425"/>
- <bf us="920" ue="920" gi="300"/>
- <bf us="921" ue="929" gi="429"/>
- <bf us="931" ue="933" gi="438"/>
- <bf us="934" ue="934" gi="301"/>
- <bf us="935" ue="944" gi="441"/>
- <bf us="945" ue="945" gi="302"/>
- <bf us="946" ue="947" gi="451"/>
- <bf us="948" ue="949" gi="303"/>
- <bf us="950" ue="959" gi="453"/>
- <bf us="960" ue="960" gi="570"/>
- <bf us="961" ue="962" gi="463"/>
- <bf us="963" ue="964" gi="305"/>
- <bf us="965" ue="965" gi="465"/>
- <bf us="966" ue="966" gi="307"/>
- <bf us="967" ue="974" gi="466"/>
- <bf us="1025" ue="1036" gi="474"/>
- <bf us="1038" ue="1103" gi="486"/>
- <bf us="1105" ue="1116" gi="552"/>
- <bf us="1118" ue="1119" gi="564"/>
- <bf us="1168" ue="1169" gi="566"/>
- <bf us="7808" ue="7813" gi="395"/>
- <bf us="7840" ue="7883" gi="605"/>
- <bf us="7884" ue="7921" gi="844"/>
- <bf us="7922" ue="7923" gi="401"/>
- <bf us="7924" ue="7929" gi="884"/>
- <bf us="8211" ue="8212" gi="177"/>
- <bf us="8213" ue="8213" gi="568"/>
- <bf us="8215" ue="8215" gi="308"/>
- <bf us="8216" ue="8217" gi="181"/>
- <bf us="8218" ue="8218" gi="195"/>
- <bf us="8219" ue="8219" gi="403"/>
- <bf us="8220" ue="8221" gi="179"/>
- <bf us="8222" ue="8222" gi="196"/>
- <bf us="8224" ue="8224" gi="130"/>
- <bf us="8225" ue="8225" gi="193"/>
- <bf us="8226" ue="8226" gi="135"/>
- <bf us="8230" ue="8230" gi="171"/>
- <bf us="8240" ue="8240" gi="197"/>
- <bf us="8242" ue="8243" gi="315"/>
- <bf us="8249" ue="8250" gi="189"/>
- <bf us="8252" ue="8252" gi="309"/>
- <bf us="8254" ue="8254" gi="404"/>
- <bf us="8260" ue="8260" gi="187"/>
- <bf us="8319" ue="8319" gi="310"/>
- <bf us="8355" ue="8355" gi="245"/>
- <bf us="8356" ue="8356" gi="405"/>
- <bf us="8359" ue="8359" gi="311"/>
- <bf us="8363" ue="8363" gi="890"/>
- <bf us="8364" ue="8364" gi="188"/>
- <bf us="8453" ue="8453" gi="317"/>
- <bf us="8467" ue="8467" gi="318"/>
- <bf us="8470" ue="8470" gi="569"/>
- <bf us="8482" ue="8482" gi="140"/>
- <bf us="8486" ue="8486" gi="159"/>
- <bf us="8494" ue="8494" gi="406"/>
- <bf us="8539" ue="8542" gi="407"/>
- <bf us="8706" ue="8706" gi="152"/>
- <bf us="8710" ue="8710" gi="168"/>
- <bf us="8719" ue="8719" gi="154"/>
- <bf us="8721" ue="8721" gi="153"/>
- <bf us="8722" ue="8722" gi="237"/>
- <bf us="8725" ue="8725" gi="187"/>
- <bf us="8729" ue="8729" gi="194"/>
- <bf us="8730" ue="8730" gi="165"/>
- <bf us="8734" ue="8734" gi="146"/>
- <bf us="8747" ue="8747" gi="156"/>
- <bf us="8776" ue="8776" gi="167"/>
- <bf us="8800" ue="8800" gi="143"/>
- <bf us="8804" ue="8805" gi="148"/>
- <bf us="9633" ue="9633" gi="319"/>
- <bf us="9642" ue="9643" gi="320"/>
- <bf us="9674" ue="9674" gi="184"/>
- <bf us="9679" ue="9679" gi="322"/>
- <bf us="9702" ue="9702" gi="323"/>
- <bf us="61441" ue="61442" gi="191"/>
- <bf us="61444" ue="61445" gi="411"/>
- <bf us="61446" ue="61453" gi="571"/>
- <bf us="64257" ue="64258" gi="191"/>
- <bf us="65535" ue="65535" gi="0"/>
- </bfranges>
- <cid-widths start-index="0">
- <wx w="1000"/>
- <wx w="0"/>
- <wx w="351"/>
- <wx w="351"/>
- <wx w="393"/>
- <wx w="458"/>
- <wx w="818"/>
- <wx w="635"/>
- <wx w="1076"/>
- <wx w="726"/>
- <wx w="268"/>
- <wx w="454"/>
- <wx w="454"/>
- <wx w="635"/>
- <wx w="818"/>
- <wx w="363"/>
- <wx w="454"/>
- <wx w="363"/>
- <wx w="454"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="454"/>
- <wx w="454"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="545"/>
- <wx w="1000"/>
- <wx w="683"/>
- <wx w="685"/>
- <wx w="698"/>
- <wx w="770"/>
- <wx w="632"/>
- <wx w="574"/>
- <wx w="775"/>
- <wx w="751"/>
- <wx w="420"/>
- <wx w="454"/>
- <wx w="692"/>
- <wx w="556"/>
- <wx w="842"/>
- <wx w="748"/>
- <wx w="787"/>
- <wx w="603"/>
- <wx w="787"/>
- <wx w="695"/>
- <wx w="683"/>
- <wx w="616"/>
- <wx w="731"/>
- <wx w="683"/>
- <wx w="988"/>
- <wx w="685"/>
- <wx w="615"/>
- <wx w="685"/>
- <wx w="454"/>
- <wx w="454"/>
- <wx w="454"/>
- <wx w="818"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="600"/>
- <wx w="623"/>
- <wx w="520"/>
- <wx w="623"/>
- <wx w="595"/>
- <wx w="351"/>
- <wx w="623"/>
- <wx w="632"/>
- <wx w="274"/>
- <wx w="344"/>
- <wx w="591"/>
- <wx w="274"/>
- <wx w="972"/>
- <wx w="632"/>
- <wx w="606"/>
- <wx w="623"/>
- <wx w="623"/>
- <wx w="426"/>
- <wx w="520"/>
- <wx w="394"/>
- <wx w="632"/>
- <wx w="591"/>
- <wx w="818"/>
- <wx w="591"/>
- <wx w="591"/>
- <wx w="525"/>
- <wx w="634"/>
- <wx w="454"/>
- <wx w="634"/>
- <wx w="818"/>
- <wx w="683"/>
- <wx w="683"/>
- <wx w="698"/>
- <wx w="632"/>
- <wx w="748"/>
- <wx w="787"/>
- <wx w="731"/>
- <wx w="600"/>
- <wx w="600"/>
- <wx w="600"/>
- <wx w="600"/>
- <wx w="600"/>
- <wx w="600"/>
- <wx w="520"/>
- <wx w="595"/>
- <wx w="595"/>
- <wx w="595"/>
- <wx w="595"/>
- <wx w="274"/>
- <wx w="274"/>
- <wx w="274"/>
- <wx w="274"/>
- <wx w="632"/>
- <wx w="606"/>
- <wx w="606"/>
- <wx w="606"/>
- <wx w="606"/>
- <wx w="606"/>
- <wx w="632"/>
- <wx w="632"/>
- <wx w="632"/>
- <wx w="632"/>
- <wx w="635"/>
- <wx w="541"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="545"/>
- <wx w="635"/>
- <wx w="620"/>
- <wx w="1000"/>
- <wx w="1000"/>
- <wx w="976"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="818"/>
- <wx w="984"/>
- <wx w="787"/>
- <wx w="1000"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="635"/>
- <wx w="641"/>
- <wx w="635"/>
- <wx w="727"/>
- <wx w="818"/>
- <wx w="707"/>
- <wx w="635"/>
- <wx w="545"/>
- <wx w="545"/>
- <wx w="818"/>
- <wx w="955"/>
- <wx w="606"/>
- <wx w="545"/>
- <wx w="393"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="635"/>
- <wx w="818"/>
- <wx w="727"/>
- <wx w="644"/>
- <wx w="644"/>
- <wx w="818"/>
- <wx w="683"/>
- <wx w="683"/>
- <wx w="787"/>
- <wx w="1069"/>
- <wx w="981"/>
- <wx w="635"/>
- <wx w="1000"/>
- <wx w="458"/>
- <wx w="458"/>
- <wx w="268"/>
- <wx w="268"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="591"/>
- <wx w="615"/>
- <wx w="361"/>
- <wx w="635"/>
- <wx w="454"/>
- <wx w="454"/>
- <wx w="625"/>
- <wx w="625"/>
- <wx w="635"/>
- <wx w="363"/>
- <wx w="268"/>
- <wx w="458"/>
- <wx w="1521"/>
- <wx w="683"/>
- <wx w="632"/>
- <wx w="683"/>
- <wx w="632"/>
- <wx w="632"/>
- <wx w="420"/>
- <wx w="420"/>
- <wx w="420"/>
- <wx w="420"/>
- <wx w="787"/>
- <wx w="787"/>
- <wx w="787"/>
- <wx w="731"/>
- <wx w="731"/>
- <wx w="731"/>
- <wx w="274"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="561"/>
- <wx w="284"/>
- <wx w="683"/>
- <wx w="520"/>
- <wx w="685"/>
- <wx w="525"/>
- <wx w="454"/>
- <wx w="775"/>
- <wx w="611"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="605"/>
- <wx w="623"/>
- <wx w="818"/>
- <wx w="818"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="1000"/>
- <wx w="1000"/>
- <wx w="1000"/>
- <wx w="635"/>
- <wx w="775"/>
- <wx w="623"/>
- <wx w="420"/>
- <wx w="683"/>
- <wx w="520"/>
- <wx w="698"/>
- <wx w="520"/>
- <wx w="698"/>
- <wx w="520"/>
- <wx w="623"/>
- <wx w="635"/>
- <wx w="363"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="770"/>
- <wx w="647"/>
- <wx w="775"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="556"/>
- <wx w="274"/>
- <wx w="556"/>
- <wx w="295"/>
- <wx w="556"/>
- <wx w="458"/>
- <wx w="748"/>
- <wx w="632"/>
- <wx w="748"/>
- <wx w="632"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="695"/>
- <wx w="426"/>
- <wx w="695"/>
- <wx w="426"/>
- <wx w="683"/>
- <wx w="520"/>
- <wx w="616"/>
- <wx w="394"/>
- <wx w="616"/>
- <wx w="394"/>
- <wx w="731"/>
- <wx w="632"/>
- <wx w="731"/>
- <wx w="632"/>
- <wx w="685"/>
- <wx w="525"/>
- <wx w="685"/>
- <wx w="525"/>
- <wx w="566"/>
- <wx w="787"/>
- <wx w="818"/>
- <wx w="623"/>
- <wx w="607"/>
- <wx w="512"/>
- <wx w="630"/>
- <wx w="496"/>
- <wx w="790"/>
- <wx w="635"/>
- <wx w="624"/>
- <wx w="545"/>
- <wx w="1163"/>
- <wx w="870"/>
- <wx w="613"/>
- <wx w="730"/>
- <wx w="361"/>
- <wx w="557"/>
- <wx w="1076"/>
- <wx w="323"/>
- <wx w="604"/>
- <wx w="354"/>
- <wx w="354"/>
- <wx w="604"/>
- <wx w="354"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="698"/>
- <wx w="520"/>
- <wx w="698"/>
- <wx w="520"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="775"/>
- <wx w="623"/>
- <wx w="775"/>
- <wx w="623"/>
- <wx w="775"/>
- <wx w="623"/>
- <wx w="751"/>
- <wx w="632"/>
- <wx w="751"/>
- <wx w="632"/>
- <wx w="420"/>
- <wx w="274"/>
- <wx w="420"/>
- <wx w="274"/>
- <wx w="420"/>
- <wx w="274"/>
- <wx w="420"/>
- <wx w="274"/>
- <wx w="454"/>
- <wx w="344"/>
- <wx w="692"/>
- <wx w="591"/>
- <wx w="591"/>
- <wx w="556"/>
- <wx w="274"/>
- <wx w="748"/>
- <wx w="632"/>
- <wx w="748"/>
- <wx w="632"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="695"/>
- <wx w="426"/>
- <wx w="683"/>
- <wx w="520"/>
- <wx w="616"/>
- <wx w="394"/>
- <wx w="731"/>
- <wx w="632"/>
- <wx w="731"/>
- <wx w="632"/>
- <wx w="731"/>
- <wx w="630"/>
- <wx w="731"/>
- <wx w="630"/>
- <wx w="988"/>
- <wx w="818"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="300"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="984"/>
- <wx w="955"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="454"/>
- <wx w="988"/>
- <wx w="818"/>
- <wx w="988"/>
- <wx w="818"/>
- <wx w="988"/>
- <wx w="818"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="268"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="717"/>
- <wx w="1000"/>
- <wx w="1000"/>
- <wx w="1000"/>
- <wx w="1000"/>
- <wx w="210"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="683"/>
- <wx w="750"/>
- <wx w="870"/>
- <wx w="539"/>
- <wx w="880"/>
- <wx w="753"/>
- <wx w="907"/>
- <wx w="274"/>
- <wx w="683"/>
- <wx w="685"/>
- <wx w="703"/>
- <wx w="632"/>
- <wx w="685"/>
- <wx w="751"/>
- <wx w="420"/>
- <wx w="692"/>
- <wx w="685"/>
- <wx w="842"/>
- <wx w="748"/>
- <wx w="648"/>
- <wx w="787"/>
- <wx w="751"/>
- <wx w="603"/>
- <wx w="672"/>
- <wx w="616"/>
- <wx w="615"/>
- <wx w="685"/>
- <wx w="870"/>
- <wx w="818"/>
- <wx w="420"/>
- <wx w="615"/>
- <wx w="623"/>
- <wx w="512"/>
- <wx w="632"/>
- <wx w="274"/>
- <wx w="631"/>
- <wx w="620"/>
- <wx w="591"/>
- <wx w="457"/>
- <wx w="632"/>
- <wx w="624"/>
- <wx w="274"/>
- <wx w="591"/>
- <wx w="591"/>
- <wx w="639"/>
- <wx w="591"/>
- <wx w="502"/>
- <wx w="606"/>
- <wx w="625"/>
- <wx w="507"/>
- <wx w="631"/>
- <wx w="589"/>
- <wx w="821"/>
- <wx w="813"/>
- <wx w="274"/>
- <wx w="631"/>
- <wx w="606"/>
- <wx w="631"/>
- <wx w="813"/>
- <wx w="632"/>
- <wx w="792"/>
- <wx w="566"/>
- <wx w="700"/>
- <wx w="683"/>
- <wx w="420"/>
- <wx w="420"/>
- <wx w="454"/>
- <wx w="1118"/>
- <wx w="1103"/>
- <wx w="817"/>
- <wx w="692"/>
- <wx w="615"/>
- <wx w="751"/>
- <wx w="683"/>
- <wx w="685"/>
- <wx w="685"/>
- <wx w="566"/>
- <wx w="745"/>
- <wx w="632"/>
- <wx w="973"/>
- <wx w="615"/>
- <wx w="750"/>
- <wx w="750"/>
- <wx w="692"/>
- <wx w="734"/>
- <wx w="842"/>
- <wx w="751"/>
- <wx w="787"/>
- <wx w="751"/>
- <wx w="603"/>
- <wx w="698"/>
- <wx w="616"/>
- <wx w="615"/>
- <wx w="818"/>
- <wx w="685"/>
- <wx w="761"/>
- <wx w="711"/>
- <wx w="1030"/>
- <wx w="1044"/>
- <wx w="783"/>
- <wx w="920"/>
- <wx w="680"/>
- <wx w="701"/>
- <wx w="1034"/>
- <wx w="706"/>
- <wx w="600"/>
- <wx w="614"/>
- <wx w="594"/>
- <wx w="471"/>
- <wx w="621"/>
- <wx w="595"/>
- <wx w="797"/>
- <wx w="524"/>
- <wx w="640"/>
- <wx w="640"/>
- <wx w="591"/>
- <wx w="620"/>
- <wx w="696"/>
- <wx w="637"/>
- <wx w="606"/>
- <wx w="637"/>
- <wx w="623"/>
- <wx w="534"/>
- <wx w="496"/>
- <wx w="591"/>
- <wx w="840"/>
- <wx w="591"/>
- <wx w="644"/>
- <wx w="605"/>
- <wx w="875"/>
- <wx w="887"/>
- <wx w="640"/>
- <wx w="794"/>
- <wx w="570"/>
- <wx w="546"/>
- <wx w="838"/>
- <wx w="599"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="471"/>
- <wx w="546"/>
- <wx w="520"/>
- <wx w="274"/>
- <wx w="274"/>
- <wx w="344"/>
- <wx w="914"/>
- <wx w="914"/>
- <wx w="632"/>
- <wx w="591"/>
- <wx w="591"/>
- <wx w="637"/>
- <wx w="566"/>
- <wx w="471"/>
- <wx w="1000"/>
- <wx w="1171"/>
- <wx w="637"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="541"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="806"/>
- <wx w="606"/>
- <wx w="756"/>
- <wx w="659"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="635"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="683"/>
- <wx w="600"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="632"/>
- <wx w="595"/>
- <wx w="420"/>
- <wx w="274"/>
- <wx w="420"/>
- <wx w="274"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="787"/>
- <wx w="606"/>
- <wx w="806"/>
- <wx w="606"/>
- <wx w="806"/>
- <wx w="606"/>
- <wx w="806"/>
- <wx w="606"/>
- <wx w="806"/>
- <wx w="606"/>
- <wx w="806"/>
- <wx w="606"/>
- <wx w="731"/>
- <wx w="632"/>
- <wx w="731"/>
- <wx w="632"/>
- <wx w="756"/>
- <wx w="659"/>
- <wx w="756"/>
- <wx w="659"/>
- <wx w="756"/>
- <wx w="659"/>
- <wx w="756"/>
- <wx w="659"/>
- <wx w="756"/>
- <wx w="659"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="615"/>
- <wx w="591"/>
- <wx w="623"/>
- <wx w="0"/>
- <wx w="635"/>
- </cid-widths>
- </multibyte-extras>
- <kerning kpx1="93">
- <pair kpx2="111" kern="-4"/>
- <pair kpx2="178" kern="-9"/>
- <pair kpx2="177" kern="-9"/>
- <pair kpx2="16" kern="-9"/>
- <pair kpx2="84" kern="-4"/>
- <pair kpx2="82" kern="-5"/>
- <pair kpx2="74" kern="-4"/>
- <pair kpx2="72" kern="-5"/>
- <pair kpx2="71" kern="-4"/>
- <pair kpx2="70" kern="-4"/>
- <pair kpx2="161" kern="-5"/>
- </kerning>
- <kerning kpx1="92">
- <pair kpx2="160" kern="-19"/>
- <pair kpx2="68" kern="-19"/>
- <pair kpx2="111" kern="-8"/>
- <pair kpx2="178" kern="-19"/>
- <pair kpx2="17" kern="-92"/>
- <pair kpx2="177" kern="-19"/>
- <pair kpx2="16" kern="-19"/>
- <pair kpx2="176" kern="-7"/>
- <pair kpx2="84" kern="-4"/>
- <pair kpx2="15" kern="-92"/>
- <pair kpx2="82" kern="-8"/>
- <pair kpx2="171" kern="-87"/>
- <pair kpx2="74" kern="-4"/>
- <pair kpx2="72" kern="-8"/>
- <pair kpx2="71" kern="-4"/>
- <pair kpx2="70" kern="-8"/>
- <pair kpx2="161" kern="-8"/>
- </kerning>
- <kerning kpx1="91">
- <pair kpx2="111" kern="-9"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="177" kern="-24"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="176" kern="-9"/>
- <pair kpx2="82" kern="-11"/>
- <pair kpx2="74" kern="-4"/>
- <pair kpx2="72" kern="-11"/>
- <pair kpx2="71" kern="-4"/>
- <pair kpx2="70" kern="-9"/>
- <pair kpx2="161" kern="-11"/>
- </kerning>
- <kerning kpx1="90">
- <pair kpx2="171" kern="-34"/>
- <pair kpx2="160" kern="-9"/>
- <pair kpx2="17" kern="-34"/>
- <pair kpx2="16" kern="-9"/>
- <pair kpx2="15" kern="-34"/>
- <pair kpx2="178" kern="-9"/>
- <pair kpx2="68" kern="-9"/>
- <pair kpx2="177" kern="-9"/>
- </kerning>
- <kerning kpx1="89">
- <pair kpx2="68" kern="-19"/>
- <pair kpx2="160" kern="-19"/>
- <pair kpx2="178" kern="-19"/>
- <pair kpx2="17" kern="-87"/>
- <pair kpx2="177" kern="-19"/>
- <pair kpx2="16" kern="-19"/>
- <pair kpx2="176" kern="-7"/>
- <pair kpx2="15" kern="-87"/>
- <pair kpx2="82" kern="-8"/>
- <pair kpx2="171" kern="-87"/>
- <pair kpx2="72" kern="-8"/>
- <pair kpx2="161" kern="-8"/>
- </kerning>
- <kerning kpx1="182">
- <pair kpx2="87" kern="19"/>
- <pair kpx2="17" kern="-102"/>
- <pair kpx2="86" kern="-34"/>
- <pair kpx2="15" kern="-102"/>
- <pair kpx2="60" kern="53"/>
- <pair kpx2="36" kern="-48"/>
- <pair kpx2="58" kern="29"/>
- <pair kpx2="57" kern="48"/>
- <pair kpx2="171" kern="-102"/>
- <pair kpx2="55" kern="53"/>
- <pair kpx2="144" kern="-48"/>
- </kerning>
- <kerning kpx1="87">
- <pair kpx2="182" kern="9"/>
- <pair kpx2="16" kern="-19"/>
- <pair kpx2="180" kern="9"/>
- <pair kpx2="92" kern="-4"/>
- <pair kpx2="178" kern="-19"/>
- <pair kpx2="177" kern="-19"/>
- </kerning>
- <kerning kpx1="181">
- <pair kpx2="36" kern="-48"/>
- <pair kpx2="144" kern="-48"/>
- </kerning>
- <kerning kpx1="180">
- <pair kpx2="87" kern="19"/>
- <pair kpx2="17" kern="-102"/>
- <pair kpx2="86" kern="-34"/>
- <pair kpx2="15" kern="-102"/>
- <pair kpx2="60" kern="53"/>
- <pair kpx2="36" kern="-48"/>
- <pair kpx2="58" kern="29"/>
- <pair kpx2="57" kern="48"/>
- <pair kpx2="171" kern="-102"/>
- <pair kpx2="55" kern="53"/>
- <pair kpx2="144" kern="-48"/>
- </kerning>
- <kerning kpx1="85">
- <pair kpx2="68" kern="-17"/>
- <pair kpx2="160" kern="-19"/>
- <pair kpx2="182" kern="14"/>
- <pair kpx2="180" kern="14"/>
- <pair kpx2="178" kern="-9"/>
- <pair kpx2="17" kern="-141"/>
- <pair kpx2="177" kern="-9"/>
- <pair kpx2="16" kern="-9"/>
- <pair kpx2="15" kern="-141"/>
- <pair kpx2="171" kern="-141"/>
- </kerning>
- <kerning kpx1="179">
- <pair kpx2="36" kern="-48"/>
- <pair kpx2="144" kern="-48"/>
- </kerning>
- <kerning kpx1="178">
- <pair kpx2="93" kern="-19"/>
- <pair kpx2="92" kern="-19"/>
- <pair kpx2="45" kern="-48"/>
- <pair kpx2="44" kern="-14"/>
- <pair kpx2="91" kern="-24"/>
- <pair kpx2="90" kern="-9"/>
- <pair kpx2="89" kern="-19"/>
- <pair kpx2="36" kern="-24"/>
- <pair kpx2="68" kern="-9"/>
- <pair kpx2="160" kern="-9"/>
- <pair kpx2="61" kern="-4"/>
- <pair kpx2="60" kern="-68"/>
- <pair kpx2="59" kern="-39"/>
- <pair kpx2="58" kern="-24"/>
- <pair kpx2="57" kern="-24"/>
- <pair kpx2="55" kern="-73"/>
- <pair kpx2="54" kern="-9"/>
- <pair kpx2="144" kern="-24"/>
- </kerning>
- <kerning kpx1="83">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="92" kern="-2"/>
- <pair kpx2="15" kern="-14"/>
- </kerning>
- <kerning kpx1="177">
- <pair kpx2="93" kern="-19"/>
- <pair kpx2="92" kern="-19"/>
- <pair kpx2="45" kern="-48"/>
- <pair kpx2="44" kern="-14"/>
- <pair kpx2="91" kern="-24"/>
- <pair kpx2="90" kern="-9"/>
- <pair kpx2="89" kern="-19"/>
- <pair kpx2="36" kern="-24"/>
- <pair kpx2="68" kern="-9"/>
- <pair kpx2="160" kern="-9"/>
- <pair kpx2="61" kern="-4"/>
- <pair kpx2="60" kern="-68"/>
- <pair kpx2="59" kern="-39"/>
- <pair kpx2="58" kern="-24"/>
- <pair kpx2="57" kern="-24"/>
- <pair kpx2="55" kern="-73"/>
- <pair kpx2="54" kern="-9"/>
- <pair kpx2="144" kern="-24"/>
- </kerning>
- <kerning kpx1="82">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="92" kern="-7"/>
- <pair kpx2="15" kern="-14"/>
- <pair kpx2="91" kern="-9"/>
- <pair kpx2="89" kern="-7"/>
- </kerning>
- <kerning kpx1="81">
- <pair kpx2="92" kern="-9"/>
- <pair kpx2="90" kern="-4"/>
- <pair kpx2="89" kern="-9"/>
- </kerning>
- <kerning kpx1="80">
- <pair kpx2="92" kern="-9"/>
- <pair kpx2="90" kern="-4"/>
- <pair kpx2="89" kern="-9"/>
- </kerning>
- <kerning kpx1="78">
- <pair kpx2="161" kern="-9"/>
- <pair kpx2="72" kern="-9"/>
- <pair kpx2="82" kern="-9"/>
- <pair kpx2="16" kern="-48"/>
- <pair kpx2="178" kern="-48"/>
- <pair kpx2="177" kern="-48"/>
- <pair kpx2="176" kern="-9"/>
- </kerning>
- <kerning kpx1="171">
- <pair kpx2="182" kern="-102"/>
- <pair kpx2="180" kern="-102"/>
- </kerning>
- <kerning kpx1="75">
- <pair kpx2="92" kern="-9"/>
- <pair kpx2="90" kern="-4"/>
- <pair kpx2="89" kern="-9"/>
- </kerning>
- <kerning kpx1="73">
- <pair kpx2="182" kern="24"/>
- <pair kpx2="180" kern="24"/>
- <pair kpx2="64" kern="48"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="63" kern="48"/>
- <pair kpx2="17" kern="-58"/>
- <pair kpx2="177" kern="-24"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="15" kern="-63"/>
- <pair kpx2="13" kern="24"/>
- <pair kpx2="12" kern="48"/>
- <pair kpx2="34" kern="53"/>
- <pair kpx2="171" kern="-58"/>
- <pair kpx2="10" kern="29"/>
- <pair kpx2="5" kern="29"/>
- <pair kpx2="96" kern="48"/>
- <pair kpx2="92" kern="-4"/>
- </kerning>
- <kerning kpx1="72">
- <pair kpx2="55" kern="-68"/>
- </kerning>
- <kerning kpx1="70">
- <pair kpx2="16" kern="-9"/>
- <pair kpx2="178" kern="-9"/>
- <pair kpx2="177" kern="-9"/>
- <pair kpx2="55" kern="-29"/>
- </kerning>
- <kerning kpx1="69">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="92" kern="-2"/>
- <pair kpx2="15" kern="-14"/>
- </kerning>
- <kerning kpx1="68">
- <pair kpx2="92" kern="-7"/>
- <pair kpx2="90" kern="-4"/>
- <pair kpx2="89" kern="-7"/>
- </kerning>
- <kerning kpx1="161">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="92" kern="-7"/>
- <pair kpx2="15" kern="-14"/>
- <pair kpx2="91" kern="-9"/>
- <pair kpx2="89" kern="-7"/>
- </kerning>
- <kerning kpx1="61">
- <pair kpx2="92" kern="-31"/>
- <pair kpx2="90" kern="-19"/>
- <pair kpx2="42" kern="-9"/>
- <pair kpx2="38" kern="-9"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="177" kern="-24"/>
- <pair kpx2="82" kern="-29"/>
- <pair kpx2="176" kern="-29"/>
- <pair kpx2="175" kern="-9"/>
- <pair kpx2="72" kern="-29"/>
- <pair kpx2="68" kern="-24"/>
- <pair kpx2="161" kern="-29"/>
- <pair kpx2="160" kern="-24"/>
- <pair kpx2="16" kern="-29"/>
- <pair kpx2="61" kern="-4"/>
- <pair kpx2="100" kern="-9"/>
- <pair kpx2="145" kern="-9"/>
- <pair kpx2="50" kern="-9"/>
- </kerning>
- <kerning kpx1="60">
- <pair kpx2="89" kern="-48"/>
- <pair kpx2="88" kern="-53"/>
- <pair kpx2="86" kern="-53"/>
- <pair kpx2="85" kern="-48"/>
- <pair kpx2="178" kern="-68"/>
- <pair kpx2="84" kern="-63"/>
- <pair kpx2="177" kern="-68"/>
- <pair kpx2="36" kern="-39"/>
- <pair kpx2="83" kern="-48"/>
- <pair kpx2="176" kern="-63"/>
- <pair kpx2="82" kern="-63"/>
- <pair kpx2="175" kern="-9"/>
- <pair kpx2="81" kern="-48"/>
- <pair kpx2="80" kern="-48"/>
- <pair kpx2="171" kern="-141"/>
- <pair kpx2="30" kern="-97"/>
- <pair kpx2="29" kern="-97"/>
- <pair kpx2="74" kern="-63"/>
- <pair kpx2="72" kern="-63"/>
- <pair kpx2="71" kern="-58"/>
- <pair kpx2="68" kern="-68"/>
- <pair kpx2="161" kern="-63"/>
- <pair kpx2="160" kern="-68"/>
- <pair kpx2="17" kern="-141"/>
- <pair kpx2="16" kern="-68"/>
- <pair kpx2="15" kern="-141"/>
- <pair kpx2="145" kern="-9"/>
- <pair kpx2="144" kern="-39"/>
- <pair kpx2="50" kern="-9"/>
- </kerning>
- <kerning kpx1="59">
- <pair kpx2="160" kern="-24"/>
- <pair kpx2="68" kern="-24"/>
- <pair kpx2="88" kern="-14"/>
- <pair kpx2="42" kern="-4"/>
- <pair kpx2="178" kern="-39"/>
- <pair kpx2="177" kern="-39"/>
- <pair kpx2="16" kern="-39"/>
- <pair kpx2="176" kern="-29"/>
- <pair kpx2="38" kern="-4"/>
- <pair kpx2="175" kern="-4"/>
- <pair kpx2="82" kern="-29"/>
- <pair kpx2="100" kern="-4"/>
- <pair kpx2="145" kern="-4"/>
- <pair kpx2="50" kern="-4"/>
- <pair kpx2="72" kern="-29"/>
- <pair kpx2="161" kern="-29"/>
- <pair kpx2="92" kern="-39"/>
- </kerning>
- <kerning kpx1="58">
- <pair kpx2="92" kern="-31"/>
- <pair kpx2="88" kern="-29"/>
- <pair kpx2="85" kern="-29"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="177" kern="-24"/>
- <pair kpx2="36" kern="-24"/>
- <pair kpx2="82" kern="-48"/>
- <pair kpx2="176" kern="-48"/>
- <pair kpx2="30" kern="-39"/>
- <pair kpx2="171" kern="-107"/>
- <pair kpx2="29" kern="-39"/>
- <pair kpx2="72" kern="-48"/>
- <pair kpx2="68" kern="-48"/>
- <pair kpx2="161" kern="-48"/>
- <pair kpx2="160" kern="-48"/>
- <pair kpx2="17" kern="-107"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="15" kern="-141"/>
- <pair kpx2="144" kern="-29"/>
- </kerning>
- <kerning kpx1="57">
- <pair kpx2="92" kern="-31"/>
- <pair kpx2="88" kern="-29"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="36" kern="-29"/>
- <pair kpx2="177" kern="-24"/>
- <pair kpx2="82" kern="-48"/>
- <pair kpx2="176" kern="-48"/>
- <pair kpx2="30" kern="-39"/>
- <pair kpx2="171" kern="-141"/>
- <pair kpx2="29" kern="-39"/>
- <pair kpx2="72" kern="-48"/>
- <pair kpx2="68" kern="-48"/>
- <pair kpx2="161" kern="-48"/>
- <pair kpx2="160" kern="-48"/>
- <pair kpx2="17" kern="-141"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="15" kern="-141"/>
- <pair kpx2="144" kern="-34"/>
- </kerning>
- <kerning kpx1="56">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="15" kern="-9"/>
- <pair kpx2="36" kern="-4"/>
- <pair kpx2="144" kern="-9"/>
- </kerning>
- <kerning kpx1="55">
- <pair kpx2="93" kern="-83"/>
- <pair kpx2="92" kern="-97"/>
- <pair kpx2="90" kern="-97"/>
- <pair kpx2="89" kern="-97"/>
- <pair kpx2="42" kern="-19"/>
- <pair kpx2="88" kern="-97"/>
- <pair kpx2="86" kern="-87"/>
- <pair kpx2="85" kern="-97"/>
- <pair kpx2="38" kern="-19"/>
- <pair kpx2="178" kern="-73"/>
- <pair kpx2="177" kern="-73"/>
- <pair kpx2="36" kern="-58"/>
- <pair kpx2="176" kern="-107"/>
- <pair kpx2="82" kern="-107"/>
- <pair kpx2="175" kern="-24"/>
- <pair kpx2="34" kern="29"/>
- <pair kpx2="171" kern="-141"/>
- <pair kpx2="30" kern="-97"/>
- <pair kpx2="29" kern="-97"/>
- <pair kpx2="74" kern="-102"/>
- <pair kpx2="72" kern="-107"/>
- <pair kpx2="70" kern="-107"/>
- <pair kpx2="68" kern="-117"/>
- <pair kpx2="161" kern="-107"/>
- <pair kpx2="160" kern="-117"/>
- <pair kpx2="17" kern="-141"/>
- <pair kpx2="16" kern="-73"/>
- <pair kpx2="15" kern="-141"/>
- <pair kpx2="55" kern="-34"/>
- <pair kpx2="54" kern="-5"/>
- <pair kpx2="100" kern="-19"/>
- <pair kpx2="145" kern="-24"/>
- <pair kpx2="144" kern="-63"/>
- <pair kpx2="50" kern="-24"/>
- </kerning>
- <kerning kpx1="54">
- <pair kpx2="90" kern="-9"/>
- <pair kpx2="89" kern="-14"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="15" kern="-9"/>
- <pair kpx2="36" kern="-9"/>
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="54" kern="-10"/>
- <pair kpx2="144" kern="-9"/>
- <pair kpx2="92" kern="-14"/>
- </kerning>
- <kerning kpx1="53">
- <pair kpx2="160" kern="-24"/>
- <pair kpx2="68" kern="-19"/>
- <pair kpx2="182" kern="-34"/>
- <pair kpx2="180" kern="-34"/>
- <pair kpx2="88" kern="-9"/>
- <pair kpx2="178" kern="-48"/>
- <pair kpx2="177" kern="-48"/>
- <pair kpx2="16" kern="-48"/>
- <pair kpx2="176" kern="-29"/>
- <pair kpx2="60" kern="-9"/>
- <pair kpx2="82" kern="-24"/>
- <pair kpx2="55" kern="-29"/>
- <pair kpx2="72" kern="-24"/>
- <pair kpx2="161" kern="-24"/>
- <pair kpx2="92" kern="-26"/>
- </kerning>
- <kerning kpx1="52">
- <pair kpx2="171" kern="-14"/>
- <pair kpx2="17" kern="-14"/>
- <pair kpx2="15" kern="-14"/>
- </kerning>
- <kerning kpx1="51">
- <pair kpx2="160" kern="-24"/>
- <pair kpx2="68" kern="-24"/>
- <pair kpx2="17" kern="-146"/>
- <pair kpx2="176" kern="-24"/>
- <pair kpx2="15" kern="-146"/>
- <pair kpx2="60" kern="9"/>
- <pair kpx2="36" kern="-24"/>
- <pair kpx2="82" kern="-24"/>
- <pair kpx2="171" kern="-146"/>
- <pair kpx2="144" kern="-34"/>
- <pair kpx2="72" kern="-24"/>
- <pair kpx2="161" kern="-24"/>
- </kerning>
- <kerning kpx1="145">
- <pair kpx2="171" kern="-14"/>
- <pair kpx2="61" kern="-9"/>
- <pair kpx2="17" kern="-14"/>
- <pair kpx2="60" kern="-9"/>
- <pair kpx2="59" kern="-4"/>
- <pair kpx2="15" kern="-14"/>
- <pair kpx2="55" kern="-24"/>
- </kerning>
- <kerning kpx1="50">
- <pair kpx2="171" kern="-14"/>
- <pair kpx2="61" kern="-9"/>
- <pair kpx2="17" kern="-14"/>
- <pair kpx2="60" kern="-9"/>
- <pair kpx2="59" kern="-4"/>
- <pair kpx2="15" kern="-14"/>
- <pair kpx2="55" kern="-24"/>
- </kerning>
- <kerning kpx1="47">
- <pair kpx2="92" kern="-53"/>
- <pair kpx2="45" kern="48"/>
- <pair kpx2="42" kern="-9"/>
- <pair kpx2="89" kern="-53"/>
- <pair kpx2="182" kern="-78"/>
- <pair kpx2="180" kern="-78"/>
- <pair kpx2="38" kern="-9"/>
- <pair kpx2="178" kern="-78"/>
- <pair kpx2="177" kern="-78"/>
- <pair kpx2="175" kern="-9"/>
- <pair kpx2="16" kern="-78"/>
- <pair kpx2="60" kern="-78"/>
- <pair kpx2="58" kern="-48"/>
- <pair kpx2="10" kern="-58"/>
- <pair kpx2="57" kern="-53"/>
- <pair kpx2="55" kern="-83"/>
- <pair kpx2="100" kern="-9"/>
- <pair kpx2="145" kern="-9"/>
- <pair kpx2="50" kern="-9"/>
- </kerning>
- <kerning kpx1="46">
- <pair kpx2="160" kern="-29"/>
- <pair kpx2="68" kern="-29"/>
- <pair kpx2="90" kern="-34"/>
- <pair kpx2="89" kern="-39"/>
- <pair kpx2="88" kern="-24"/>
- <pair kpx2="178" kern="-53"/>
- <pair kpx2="177" kern="-53"/>
- <pair kpx2="16" kern="-53"/>
- <pair kpx2="176" kern="-34"/>
- <pair kpx2="175" kern="-9"/>
- <pair kpx2="82" kern="-34"/>
- <pair kpx2="145" kern="-9"/>
- <pair kpx2="50" kern="-9"/>
- <pair kpx2="72" kern="-34"/>
- <pair kpx2="161" kern="-34"/>
- <pair kpx2="92" kern="-39"/>
- </kerning>
- <kerning kpx1="45">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="15" kern="-9"/>
- <pair kpx2="36" kern="-4"/>
- <pair kpx2="144" kern="-4"/>
- </kerning>
- <kerning kpx1="44">
- <pair kpx2="16" kern="-14"/>
- <pair kpx2="178" kern="-14"/>
- <pair kpx2="177" kern="-14"/>
- </kerning>
- <kerning kpx1="41">
- <pair kpx2="160" kern="-48"/>
- <pair kpx2="68" kern="-48"/>
- <pair kpx2="17" kern="-146"/>
- <pair kpx2="176" kern="-24"/>
- <pair kpx2="15" kern="-146"/>
- <pair kpx2="82" kern="-24"/>
- <pair kpx2="36" kern="-48"/>
- <pair kpx2="34" kern="29"/>
- <pair kpx2="171" kern="-146"/>
- <pair kpx2="55" kern="14"/>
- <pair kpx2="30" kern="-29"/>
- <pair kpx2="144" kern="-53"/>
- <pair kpx2="29" kern="-29"/>
- <pair kpx2="72" kern="-24"/>
- <pair kpx2="161" kern="-24"/>
- </kerning>
- <kerning kpx1="39">
- <pair kpx2="171" kern="-24"/>
- <pair kpx2="61" kern="-9"/>
- <pair kpx2="17" kern="-24"/>
- <pair kpx2="60" kern="-9"/>
- <pair kpx2="59" kern="-4"/>
- <pair kpx2="15" kern="-24"/>
- <pair kpx2="58" kern="-9"/>
- <pair kpx2="55" kern="-24"/>
- </kerning>
- <kerning kpx1="38">
- <pair kpx2="175" kern="-12"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="177" kern="-24"/>
- </kerning>
- <kerning kpx1="37">
- <pair kpx2="171" kern="-9"/>
- <pair kpx2="17" kern="-9"/>
- <pair kpx2="16" kern="4"/>
- <pair kpx2="15" kern="-9"/>
- <pair kpx2="178" kern="4"/>
- <pair kpx2="177" kern="4"/>
- <pair kpx2="55" kern="-29"/>
- </kerning>
- <kerning kpx1="36">
- <pair kpx2="92" kern="-24"/>
- <pair kpx2="90" kern="-14"/>
- <pair kpx2="89" kern="-24"/>
- <pair kpx2="182" kern="-58"/>
- <pair kpx2="88" kern="-4"/>
- <pair kpx2="87" kern="-9"/>
- <pair kpx2="181" kern="-24"/>
- <pair kpx2="180" kern="-58"/>
- <pair kpx2="179" kern="-24"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="177" kern="-24"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="60" kern="-39"/>
- <pair kpx2="58" kern="-24"/>
- <pair kpx2="57" kern="-29"/>
- <pair kpx2="56" kern="-4"/>
- <pair kpx2="55" kern="-58"/>
- <pair kpx2="54" kern="-4"/>
- </kerning>
- <kerning kpx1="29">
- <pair kpx2="178" kern="-68"/>
- </kerning>
- <kerning kpx1="17">
- <pair kpx2="182" kern="-102"/>
- <pair kpx2="16" kern="-78"/>
- <pair kpx2="180" kern="-102"/>
- <pair kpx2="15" kern="-63"/>
- <pair kpx2="178" kern="-58"/>
- <pair kpx2="177" kern="-58"/>
- </kerning>
- <kerning kpx1="111">
- <pair kpx2="16" kern="-9"/>
- <pair kpx2="178" kern="-9"/>
- <pair kpx2="177" kern="-9"/>
- </kerning>
- <kerning kpx1="16">
- <pair kpx2="93" kern="-19"/>
- <pair kpx2="92" kern="-19"/>
- <pair kpx2="45" kern="-48"/>
- <pair kpx2="44" kern="-14"/>
- <pair kpx2="91" kern="-24"/>
- <pair kpx2="90" kern="-9"/>
- <pair kpx2="89" kern="-19"/>
- <pair kpx2="36" kern="-24"/>
- <pair kpx2="68" kern="-9"/>
- <pair kpx2="160" kern="-9"/>
- <pair kpx2="61" kern="-14"/>
- <pair kpx2="60" kern="-68"/>
- <pair kpx2="59" kern="-39"/>
- <pair kpx2="58" kern="-24"/>
- <pair kpx2="57" kern="-24"/>
- <pair kpx2="55" kern="-73"/>
- <pair kpx2="54" kern="-9"/>
- <pair kpx2="144" kern="-24"/>
- </kerning>
- <kerning kpx1="15">
- <pair kpx2="182" kern="-102"/>
- <pair kpx2="180" kern="-102"/>
- </kerning>
- <kerning kpx1="10">
- <pair kpx2="36" kern="-48"/>
- <pair kpx2="144" kern="-48"/>
- </kerning>
- <kerning kpx1="196">
- <pair kpx2="60" kern="-102"/>
- <pair kpx2="58" kern="-48"/>
- <pair kpx2="57" kern="-102"/>
- <pair kpx2="55" kern="-102"/>
- </kerning>
- <kerning kpx1="195">
- <pair kpx2="60" kern="-102"/>
- <pair kpx2="58" kern="-48"/>
- <pair kpx2="57" kern="-102"/>
- <pair kpx2="55" kern="-102"/>
- </kerning>
- <kerning kpx1="100">
- <pair kpx2="175" kern="-12"/>
- <pair kpx2="16" kern="-24"/>
- <pair kpx2="178" kern="-24"/>
- <pair kpx2="177" kern="-24"/>
- </kerning>
- <kerning kpx1="4">
- <pair kpx2="182" kern="-48"/>
- <pair kpx2="180" kern="-48"/>
- </kerning>
-</font-metrics>
diff --git a/src/documentation/poster/cfg/VERDANAB.ttf.xml b/src/documentation/poster/cfg/VERDANAB.ttf.xml
deleted file mode 100644
index 0666d19b2..000000000
--- a/src/documentation/poster/cfg/VERDANAB.ttf.xml
+++ /dev/null
@@ -1,1167 +0,0 @@
-<?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.
--->
-<!-- $Id$ -->
-<font-metrics type="TYPE0">
- <font-name>Verdana,Bold</font-name>
- <embed/>
- <cap-height>727</cap-height>
- <x-height>548</x-height>
- <ascender>764</ascender>
- <descender>-206</descender>
- <bbox>
- <left>-73</left>
- <bottom>-207</bottom>
- <right>1707</right>
- <top>1000</top>
- </bbox>
- <flags>33</flags>
- <stemv>0</stemv>
- <italicangle>0</italicangle>
- <subtype>TYPE0</subtype>
- <multibyte-extras>
- <cid-type>CIDFontType2</cid-type>
- <default-width>0</default-width>
- <bfranges>
- <bf us="32" ue="126" gi="3"/>
- <bf us="160" ue="160" gi="3"/>
- <bf us="161" ue="161" gi="163"/>
- <bf us="162" ue="163" gi="132"/>
- <bf us="164" ue="164" gi="892"/>
- <bf us="165" ue="165" gi="150"/>
- <bf us="166" ue="166" gi="230"/>
- <bf us="167" ue="167" gi="134"/>
- <bf us="168" ue="168" gi="142"/>
- <bf us="169" ue="169" gi="139"/>
- <bf us="170" ue="170" gi="157"/>
- <bf us="171" ue="171" gi="169"/>
- <bf us="172" ue="172" gi="164"/>
- <bf us="173" ue="173" gi="16"/>
- <bf us="174" ue="174" gi="138"/>
- <bf us="175" ue="175" gi="256"/>
- <bf us="176" ue="176" gi="131"/>
- <bf us="177" ue="177" gi="147"/>
- <bf us="178" ue="179" gi="240"/>
- <bf us="180" ue="180" gi="141"/>
- <bf us="181" ue="181" gi="151"/>
- <bf us="182" ue="182" gi="136"/>
- <bf us="183" ue="183" gi="257"/>
- <bf us="184" ue="184" gi="220"/>
- <bf us="185" ue="185" gi="239"/>
- <bf us="186" ue="186" gi="158"/>
- <bf us="187" ue="187" gi="170"/>
- <bf us="188" ue="188" gi="243"/>
- <bf us="189" ue="189" gi="242"/>
- <bf us="190" ue="190" gi="244"/>
- <bf us="191" ue="191" gi="162"/>
- <bf us="192" ue="192" gi="172"/>
- <bf us="193" ue="193" gi="200"/>
- <bf us="194" ue="194" gi="198"/>
- <bf us="195" ue="195" gi="173"/>
- <bf us="196" ue="197" gi="98"/>
- <bf us="198" ue="198" gi="144"/>
- <bf us="199" ue="199" gi="100"/>
- <bf us="200" ue="200" gi="202"/>
- <bf us="201" ue="201" gi="101"/>
- <bf us="202" ue="202" gi="199"/>
- <bf us="203" ue="203" gi="201"/>
- <bf us="204" ue="204" gi="206"/>
- <bf us="205" ue="207" gi="203"/>
- <bf us="208" ue="208" gi="231"/>
- <bf us="209" ue="209" gi="102"/>
- <bf us="210" ue="210" gi="209"/>
- <bf us="211" ue="212" gi="207"/>
- <bf us="213" ue="213" gi="174"/>
- <bf us="214" ue="214" gi="103"/>
- <bf us="215" ue="215" gi="238"/>
- <bf us="216" ue="216" gi="145"/>
- <bf us="217" ue="217" gi="212"/>
- <bf us="218" ue="219" gi="210"/>
- <bf us="220" ue="220" gi="104"/>
- <bf us="221" ue="221" gi="233"/>
- <bf us="222" ue="222" gi="235"/>
- <bf us="223" ue="223" gi="137"/>
- <bf us="224" ue="224" gi="106"/>
- <bf us="225" ue="225" gi="105"/>
- <bf us="226" ue="226" gi="107"/>
- <bf us="227" ue="227" gi="109"/>
- <bf us="228" ue="228" gi="108"/>
- <bf us="229" ue="229" gi="110"/>
- <bf us="230" ue="230" gi="160"/>
- <bf us="231" ue="231" gi="111"/>
- <bf us="232" ue="232" gi="113"/>
- <bf us="233" ue="233" gi="112"/>
- <bf us="234" ue="235" gi="114"/>
- <bf us="236" ue="236" gi="117"/>
- <bf us="237" ue="237" gi="116"/>
- <bf us="238" ue="239" gi="118"/>
- <bf us="240" ue="240" gi="232"/>
- <bf us="241" ue="241" gi="120"/>
- <bf us="242" ue="242" gi="122"/>
- <bf us="243" ue="243" gi="121"/>
- <bf us="244" ue="244" gi="123"/>
- <bf us="245" ue="245" gi="125"/>
- <bf us="246" ue="246" gi="124"/>
- <bf us="247" ue="247" gi="183"/>
- <bf us="248" ue="248" gi="161"/>
- <bf us="249" ue="249" gi="127"/>
- <bf us="250" ue="250" gi="126"/>
- <bf us="251" ue="252" gi="128"/>
- <bf us="253" ue="253" gi="234"/>
- <bf us="254" ue="254" gi="236"/>
- <bf us="255" ue="255" gi="185"/>
- <bf us="256" ue="257" gi="324"/>
- <bf us="258" ue="261" gi="258"/>
- <bf us="262" ue="263" gi="251"/>
- <bf us="264" ue="267" gi="326"/>
- <bf us="268" ue="269" gi="253"/>
- <bf us="270" ue="272" gi="262"/>
- <bf us="273" ue="273" gi="255"/>
- <bf us="274" ue="279" gi="330"/>
- <bf us="280" ue="283" gi="265"/>
- <bf us="284" ue="285" gi="336"/>
- <bf us="286" ue="287" gi="246"/>
- <bf us="288" ue="303" gi="338"/>
- <bf us="304" ue="304" gi="248"/>
- <bf us="305" ue="305" gi="213"/>
- <bf us="306" ue="307" gi="312"/>
- <bf us="308" ue="312" gi="354"/>
- <bf us="313" ue="314" gi="269"/>
- <bf us="315" ue="316" gi="359"/>
- <bf us="317" ue="320" gi="271"/>
- <bf us="321" ue="322" gi="224"/>
- <bf us="323" ue="324" gi="275"/>
- <bf us="325" ue="326" gi="361"/>
- <bf us="327" ue="328" gi="277"/>
- <bf us="329" ue="329" gi="314"/>
- <bf us="330" ue="335" gi="363"/>
- <bf us="336" ue="337" gi="279"/>
- <bf us="338" ue="339" gi="175"/>
- <bf us="340" ue="341" gi="281"/>
- <bf us="342" ue="343" gi="369"/>
- <bf us="344" ue="347" gi="283"/>
- <bf us="348" ue="349" gi="371"/>
- <bf us="350" ue="351" gi="249"/>
- <bf us="352" ue="353" gi="226"/>
- <bf us="354" ue="357" gi="287"/>
- <bf us="358" ue="365" gi="373"/>
- <bf us="366" ue="369" gi="291"/>
- <bf us="370" ue="375" gi="381"/>
- <bf us="376" ue="376" gi="186"/>
- <bf us="377" ue="380" gi="295"/>
- <bf us="381" ue="382" gi="228"/>
- <bf us="383" ue="383" gi="387"/>
- <bf us="402" ue="402" gi="166"/>
- <bf us="416" ue="417" gi="582"/>
- <bf us="431" ue="432" gi="584"/>
- <bf us="506" ue="511" gi="388"/>
- <bf us="710" ue="710" gi="214"/>
- <bf us="711" ue="711" gi="223"/>
- <bf us="713" ue="713" gi="216"/>
- <bf us="728" ue="730" gi="217"/>
- <bf us="731" ue="731" gi="222"/>
- <bf us="732" ue="732" gi="215"/>
- <bf us="733" ue="733" gi="221"/>
- <bf us="768" ue="769" gi="588"/>
- <bf us="771" ue="771" gi="891"/>
- <bf us="777" ue="777" gi="586"/>
- <bf us="803" ue="803" gi="587"/>
- <bf us="894" ue="894" gi="30"/>
- <bf us="900" ue="902" gi="413"/>
- <bf us="903" ue="903" gi="394"/>
- <bf us="904" ue="906" gi="416"/>
- <bf us="908" ue="908" gi="419"/>
- <bf us="910" ue="914" gi="420"/>
- <bf us="915" ue="915" gi="299"/>
- <bf us="916" ue="919" gi="425"/>
- <bf us="920" ue="920" gi="300"/>
- <bf us="921" ue="929" gi="429"/>
- <bf us="931" ue="933" gi="438"/>
- <bf us="934" ue="934" gi="301"/>
- <bf us="935" ue="944" gi="441"/>
- <bf us="945" ue="945" gi="302"/>
- <bf us="946" ue="947" gi="451"/>
- <bf us="948" ue="949" gi="303"/>
- <bf us="950" ue="959" gi="453"/>
- <bf us="960" ue="960" gi="570"/>
- <bf us="961" ue="962" gi="463"/>
- <bf us="963" ue="964" gi="305"/>
- <bf us="965" ue="965" gi="465"/>
- <bf us="966" ue="966" gi="307"/>
- <bf us="967" ue="974" gi="466"/>
- <bf us="1025" ue="1036" gi="474"/>
- <bf us="1038" ue="1103" gi="486"/>
- <bf us="1105" ue="1116" gi="552"/>
- <bf us="1118" ue="1119" gi="564"/>
- <bf us="1168" ue="1169" gi="566"/>
- <bf us="7808" ue="7813" gi="395"/>
- <bf us="7840" ue="7883" gi="605"/>
- <bf us="7884" ue="7921" gi="844"/>
- <bf us="7922" ue="7923" gi="401"/>
- <bf us="7924" ue="7929" gi="884"/>
- <bf us="8211" ue="8212" gi="177"/>
- <bf us="8213" ue="8213" gi="568"/>
- <bf us="8215" ue="8215" gi="308"/>
- <bf us="8216" ue="8217" gi="181"/>
- <bf us="8218" ue="8218" gi="195"/>
- <bf us="8219" ue="8219" gi="403"/>
- <bf us="8220" ue="8221" gi="179"/>
- <bf us="8222" ue="8222" gi="196"/>
- <bf us="8224" ue="8224" gi="130"/>
- <bf us="8225" ue="8225" gi="193"/>
- <bf us="8226" ue="8226" gi="135"/>
- <bf us="8230" ue="8230" gi="171"/>
- <bf us="8240" ue="8240" gi="197"/>
- <bf us="8242" ue="8243" gi="315"/>
- <bf us="8249" ue="8250" gi="189"/>
- <bf us="8252" ue="8252" gi="309"/>
- <bf us="8254" ue="8254" gi="404"/>
- <bf us="8260" ue="8260" gi="187"/>
- <bf us="8319" ue="8319" gi="310"/>
- <bf us="8355" ue="8355" gi="245"/>
- <bf us="8356" ue="8356" gi="405"/>
- <bf us="8359" ue="8359" gi="311"/>
- <bf us="8363" ue="8363" gi="890"/>
- <bf us="8364" ue="8364" gi="188"/>
- <bf us="8453" ue="8453" gi="317"/>
- <bf us="8467" ue="8467" gi="318"/>
- <bf us="8470" ue="8470" gi="569"/>
- <bf us="8482" ue="8482" gi="140"/>
- <bf us="8486" ue="8486" gi="159"/>
- <bf us="8494" ue="8494" gi="406"/>
- <bf us="8539" ue="8542" gi="407"/>
- <bf us="8706" ue="8706" gi="152"/>
- <bf us="8710" ue="8710" gi="168"/>
- <bf us="8719" ue="8719" gi="154"/>
- <bf us="8721" ue="8721" gi="153"/>
- <bf us="8722" ue="8722" gi="237"/>
- <bf us="8725" ue="8725" gi="187"/>
- <bf us="8729" ue="8729" gi="194"/>
- <bf us="8730" ue="8730" gi="165"/>
- <bf us="8734" ue="8734" gi="146"/>
- <bf us="8747" ue="8747" gi="156"/>
- <bf us="8776" ue="8776" gi="167"/>
- <bf us="8800" ue="8800" gi="143"/>
- <bf us="8804" ue="8805" gi="148"/>
- <bf us="9633" ue="9633" gi="319"/>
- <bf us="9642" ue="9643" gi="320"/>
- <bf us="9674" ue="9674" gi="184"/>
- <bf us="9679" ue="9679" gi="322"/>
- <bf us="9702" ue="9702" gi="323"/>
- <bf us="61441" ue="61442" gi="191"/>
- <bf us="61444" ue="61445" gi="411"/>
- <bf us="61446" ue="61450" gi="571"/>
- <bf us="64257" ue="64258" gi="191"/>
- <bf us="65535" ue="65535" gi="0"/>
- </bfranges>
- <cid-widths start-index="0">
- <wx w="1000"/>
- <wx w="0"/>
- <wx w="341"/>
- <wx w="341"/>
- <wx w="402"/>
- <wx w="587"/>
- <wx w="867"/>
- <wx w="710"/>
- <wx w="1271"/>
- <wx w="862"/>
- <wx w="332"/>
- <wx w="543"/>
- <wx w="543"/>
- <wx w="710"/>
- <wx w="867"/>
- <wx w="361"/>
- <wx w="479"/>
- <wx w="361"/>
- <wx w="689"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="402"/>
- <wx w="402"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="616"/>
- <wx w="963"/>
- <wx w="776"/>
- <wx w="761"/>
- <wx w="723"/>
- <wx w="830"/>
- <wx w="683"/>
- <wx w="650"/>
- <wx w="811"/>
- <wx w="837"/>
- <wx w="545"/>
- <wx w="555"/>
- <wx w="770"/>
- <wx w="637"/>
- <wx w="947"/>
- <wx w="846"/>
- <wx w="850"/>
- <wx w="732"/>
- <wx w="850"/>
- <wx w="782"/>
- <wx w="710"/>
- <wx w="681"/>
- <wx w="812"/>
- <wx w="763"/>
- <wx w="1128"/>
- <wx w="763"/>
- <wx w="736"/>
- <wx w="691"/>
- <wx w="543"/>
- <wx w="689"/>
- <wx w="543"/>
- <wx w="867"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="667"/>
- <wx w="699"/>
- <wx w="588"/>
- <wx w="699"/>
- <wx w="664"/>
- <wx w="422"/>
- <wx w="699"/>
- <wx w="712"/>
- <wx w="341"/>
- <wx w="402"/>
- <wx w="670"/>
- <wx w="341"/>
- <wx w="1058"/>
- <wx w="712"/>
- <wx w="686"/>
- <wx w="699"/>
- <wx w="699"/>
- <wx w="497"/>
- <wx w="593"/>
- <wx w="455"/>
- <wx w="712"/>
- <wx w="649"/>
- <wx w="979"/>
- <wx w="668"/>
- <wx w="650"/>
- <wx w="596"/>
- <wx w="710"/>
- <wx w="543"/>
- <wx w="710"/>
- <wx w="867"/>
- <wx w="776"/>
- <wx w="776"/>
- <wx w="723"/>
- <wx w="683"/>
- <wx w="846"/>
- <wx w="850"/>
- <wx w="812"/>
- <wx w="667"/>
- <wx w="667"/>
- <wx w="667"/>
- <wx w="667"/>
- <wx w="667"/>
- <wx w="667"/>
- <wx w="588"/>
- <wx w="664"/>
- <wx w="664"/>
- <wx w="664"/>
- <wx w="664"/>
- <wx w="341"/>
- <wx w="341"/>
- <wx w="341"/>
- <wx w="341"/>
- <wx w="712"/>
- <wx w="686"/>
- <wx w="686"/>
- <wx w="686"/>
- <wx w="686"/>
- <wx w="686"/>
- <wx w="712"/>
- <wx w="712"/>
- <wx w="712"/>
- <wx w="712"/>
- <wx w="710"/>
- <wx w="587"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="712"/>
- <wx w="963"/>
- <wx w="963"/>
- <wx w="963"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="867"/>
- <wx w="1093"/>
- <wx w="850"/>
- <wx w="1058"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="710"/>
- <wx w="721"/>
- <wx w="710"/>
- <wx w="698"/>
- <wx w="869"/>
- <wx w="708"/>
- <wx w="538"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="843"/>
- <wx w="1018"/>
- <wx w="686"/>
- <wx w="616"/>
- <wx w="402"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="710"/>
- <wx w="867"/>
- <wx w="805"/>
- <wx w="849"/>
- <wx w="849"/>
- <wx w="1048"/>
- <wx w="776"/>
- <wx w="776"/>
- <wx w="850"/>
- <wx w="1135"/>
- <wx w="1067"/>
- <wx w="710"/>
- <wx w="1000"/>
- <wx w="587"/>
- <wx w="587"/>
- <wx w="332"/>
- <wx w="332"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="650"/>
- <wx w="736"/>
- <wx w="439"/>
- <wx w="710"/>
- <wx w="543"/>
- <wx w="543"/>
- <wx w="727"/>
- <wx w="730"/>
- <wx w="710"/>
- <wx w="361"/>
- <wx w="332"/>
- <wx w="587"/>
- <wx w="1777"/>
- <wx w="776"/>
- <wx w="683"/>
- <wx w="776"/>
- <wx w="683"/>
- <wx w="683"/>
- <wx w="545"/>
- <wx w="545"/>
- <wx w="545"/>
- <wx w="545"/>
- <wx w="850"/>
- <wx w="850"/>
- <wx w="850"/>
- <wx w="812"/>
- <wx w="812"/>
- <wx w="812"/>
- <wx w="341"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="642"/>
- <wx w="351"/>
- <wx w="710"/>
- <wx w="593"/>
- <wx w="691"/>
- <wx w="596"/>
- <wx w="543"/>
- <wx w="830"/>
- <wx w="679"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="734"/>
- <wx w="699"/>
- <wx w="867"/>
- <wx w="867"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="1181"/>
- <wx w="1181"/>
- <wx w="1181"/>
- <wx w="710"/>
- <wx w="811"/>
- <wx w="699"/>
- <wx w="545"/>
- <wx w="710"/>
- <wx w="593"/>
- <wx w="723"/>
- <wx w="588"/>
- <wx w="723"/>
- <wx w="588"/>
- <wx w="699"/>
- <wx w="710"/>
- <wx w="361"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="830"/>
- <wx w="879"/>
- <wx w="830"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="637"/>
- <wx w="341"/>
- <wx w="637"/>
- <wx w="522"/>
- <wx w="637"/>
- <wx w="556"/>
- <wx w="846"/>
- <wx w="712"/>
- <wx w="846"/>
- <wx w="712"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="782"/>
- <wx w="497"/>
- <wx w="782"/>
- <wx w="497"/>
- <wx w="710"/>
- <wx w="593"/>
- <wx w="681"/>
- <wx w="455"/>
- <wx w="681"/>
- <wx w="465"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="691"/>
- <wx w="596"/>
- <wx w="691"/>
- <wx w="596"/>
- <wx w="637"/>
- <wx w="850"/>
- <wx w="952"/>
- <wx w="699"/>
- <wx w="686"/>
- <wx w="584"/>
- <wx w="725"/>
- <wx w="535"/>
- <wx w="914"/>
- <wx w="710"/>
- <wx w="703"/>
- <wx w="597"/>
- <wx w="1343"/>
- <wx w="1007"/>
- <wx w="727"/>
- <wx w="825"/>
- <wx w="352"/>
- <wx w="616"/>
- <wx w="1271"/>
- <wx w="414"/>
- <wx w="604"/>
- <wx w="354"/>
- <wx w="354"/>
- <wx w="604"/>
- <wx w="354"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="723"/>
- <wx w="588"/>
- <wx w="723"/>
- <wx w="588"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="811"/>
- <wx w="699"/>
- <wx w="811"/>
- <wx w="699"/>
- <wx w="811"/>
- <wx w="699"/>
- <wx w="837"/>
- <wx w="712"/>
- <wx w="837"/>
- <wx w="712"/>
- <wx w="545"/>
- <wx w="341"/>
- <wx w="545"/>
- <wx w="341"/>
- <wx w="545"/>
- <wx w="341"/>
- <wx w="545"/>
- <wx w="341"/>
- <wx w="555"/>
- <wx w="402"/>
- <wx w="770"/>
- <wx w="670"/>
- <wx w="670"/>
- <wx w="637"/>
- <wx w="341"/>
- <wx w="846"/>
- <wx w="712"/>
- <wx w="846"/>
- <wx w="712"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="782"/>
- <wx w="497"/>
- <wx w="710"/>
- <wx w="593"/>
- <wx w="681"/>
- <wx w="455"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="1128"/>
- <wx w="979"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="344"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="1093"/>
- <wx w="1018"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="402"/>
- <wx w="1128"/>
- <wx w="979"/>
- <wx w="1128"/>
- <wx w="979"/>
- <wx w="1128"/>
- <wx w="979"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="332"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="748"/>
- <wx w="1181"/>
- <wx w="1181"/>
- <wx w="1181"/>
- <wx w="1181"/>
- <wx w="332"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="797"/>
- <wx w="847"/>
- <wx w="1000"/>
- <wx w="705"/>
- <wx w="968"/>
- <wx w="939"/>
- <wx w="970"/>
- <wx w="341"/>
- <wx w="776"/>
- <wx w="761"/>
- <wx w="805"/>
- <wx w="683"/>
- <wx w="691"/>
- <wx w="837"/>
- <wx w="545"/>
- <wx w="770"/>
- <wx w="776"/>
- <wx w="947"/>
- <wx w="846"/>
- <wx w="714"/>
- <wx w="850"/>
- <wx w="837"/>
- <wx w="732"/>
- <wx w="683"/>
- <wx w="681"/>
- <wx w="736"/>
- <wx w="763"/>
- <wx w="976"/>
- <wx w="843"/>
- <wx w="545"/>
- <wx w="736"/>
- <wx w="699"/>
- <wx w="584"/>
- <wx w="712"/>
- <wx w="341"/>
- <wx w="706"/>
- <wx w="716"/>
- <wx w="650"/>
- <wx w="549"/>
- <wx w="712"/>
- <wx w="700"/>
- <wx w="341"/>
- <wx w="670"/>
- <wx w="650"/>
- <wx w="721"/>
- <wx w="649"/>
- <wx w="580"/>
- <wx w="686"/>
- <wx w="699"/>
- <wx w="562"/>
- <wx w="706"/>
- <wx w="635"/>
- <wx w="941"/>
- <wx w="894"/>
- <wx w="341"/>
- <wx w="706"/>
- <wx w="686"/>
- <wx w="706"/>
- <wx w="894"/>
- <wx w="683"/>
- <wx w="910"/>
- <wx w="637"/>
- <wx w="741"/>
- <wx w="710"/>
- <wx w="545"/>
- <wx w="545"/>
- <wx w="555"/>
- <wx w="1222"/>
- <wx w="1214"/>
- <wx w="936"/>
- <wx w="770"/>
- <wx w="736"/>
- <wx w="837"/>
- <wx w="776"/>
- <wx w="757"/>
- <wx w="761"/>
- <wx w="637"/>
- <wx w="841"/>
- <wx w="683"/>
- <wx w="1115"/>
- <wx w="706"/>
- <wx w="845"/>
- <wx w="845"/>
- <wx w="770"/>
- <wx w="845"/>
- <wx w="947"/>
- <wx w="837"/>
- <wx w="850"/>
- <wx w="837"/>
- <wx w="732"/>
- <wx w="723"/>
- <wx w="681"/>
- <wx w="736"/>
- <wx w="952"/>
- <wx w="763"/>
- <wx w="849"/>
- <wx w="787"/>
- <wx w="1163"/>
- <wx w="1177"/>
- <wx w="907"/>
- <wx w="1062"/>
- <wx w="757"/>
- <wx w="741"/>
- <wx w="1195"/>
- <wx w="794"/>
- <wx w="667"/>
- <wx w="696"/>
- <wx w="677"/>
- <wx w="531"/>
- <wx w="691"/>
- <wx w="664"/>
- <wx w="999"/>
- <wx w="587"/>
- <wx w="720"/>
- <wx w="720"/>
- <wx w="670"/>
- <wx w="709"/>
- <wx w="830"/>
- <wx w="719"/>
- <wx w="686"/>
- <wx w="719"/>
- <wx w="699"/>
- <wx w="598"/>
- <wx w="535"/>
- <wx w="650"/>
- <wx w="965"/>
- <wx w="668"/>
- <wx w="729"/>
- <wx w="684"/>
- <wx w="1002"/>
- <wx w="1012"/>
- <wx w="743"/>
- <wx w="937"/>
- <wx w="649"/>
- <wx w="605"/>
- <wx w="994"/>
- <wx w="681"/>
- <wx w="664"/>
- <wx w="712"/>
- <wx w="531"/>
- <wx w="605"/>
- <wx w="593"/>
- <wx w="341"/>
- <wx w="341"/>
- <wx w="402"/>
- <wx w="1012"/>
- <wx w="1019"/>
- <wx w="712"/>
- <wx w="670"/>
- <wx w="650"/>
- <wx w="719"/>
- <wx w="637"/>
- <wx w="531"/>
- <wx w="1000"/>
- <wx w="1293"/>
- <wx w="719"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="597"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="913"/>
- <wx w="686"/>
- <wx w="846"/>
- <wx w="741"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="710"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="776"/>
- <wx w="667"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="683"/>
- <wx w="664"/>
- <wx w="545"/>
- <wx w="341"/>
- <wx w="545"/>
- <wx w="341"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="0"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="850"/>
- <wx w="686"/>
- <wx w="913"/>
- <wx w="686"/>
- <wx w="913"/>
- <wx w="686"/>
- <wx w="913"/>
- <wx w="686"/>
- <wx w="913"/>
- <wx w="686"/>
- <wx w="913"/>
- <wx w="686"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="812"/>
- <wx w="712"/>
- <wx w="846"/>
- <wx w="741"/>
- <wx w="846"/>
- <wx w="741"/>
- <wx w="846"/>
- <wx w="741"/>
- <wx w="846"/>
- <wx w="741"/>
- <wx w="846"/>
- <wx w="741"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="736"/>
- <wx w="650"/>
- <wx w="699"/>
- <wx w="0"/>
- <wx w="710"/>
- </cid-widths>
- </multibyte-extras>
-</font-metrics>
diff --git a/src/documentation/poster/cfg/fop.xconf b/src/documentation/poster/cfg/fop.xconf
index 93b89465c..788d58920 100644
--- a/src/documentation/poster/cfg/fop.xconf
+++ b/src/documentation/poster/cfg/fop.xconf
@@ -17,23 +17,13 @@
-->
<!-- $Id$ -->
<fop>
- <base>.</base>
<source-resolution>72</source-resolution>
<target-resolution>300</target-resolution>
- <default-page-settings height="11in" width="8.26in"/>
<renderers>
<renderer mime="application/pdf">
<!--output-profile>cfg/ISOuncoated.icc</output-profile-->
<fonts>
- <font metrics-url="cfg\VERDANA.ttf.xml" kerning="yes" embed-url="cfg\VERDANA.ttf">
- <font-triplet name="Verdana" style="normal" weight="normal"/>
- </font>
- <font metrics-url="cfg\VERDANAB.ttf.xml" kerning="yes" embed-url="cfg\VERDANAB.ttf">
- <font-triplet name="Verdana" style="normal" weight="bold"/>
- </font>
- <font metrics-url="cfg\LUCON.ttf.xml" kerning="yes" embed-url="cfg\LUCON.ttf">
- <font-triplet name="Lucida Console" style="normal" weight="normal"/>
- </font>
+ <auto-detect/>
</fonts>
</renderer>
</renderers>
diff --git a/src/documentation/poster/cfg/lucon.ttf.xml b/src/documentation/poster/cfg/lucon.ttf.xml
deleted file mode 100644
index 27daebf6c..000000000
--- a/src/documentation/poster/cfg/lucon.ttf.xml
+++ /dev/null
@@ -1,925 +0,0 @@
-<?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.
--->
-<!-- $Id$ -->
-<font-metrics type="TYPE0">
- <font-name>LucidaConsole</font-name>
- <embed/>
- <cap-height>626</cap-height>
- <x-height>530</x-height>
- <ascender>783</ascender>
- <descender>-205</descender>
- <bbox>
- <left>0</left>
- <bottom>-210</bottom>
- <right>602</right>
- <top>789</top>
- </bbox>
- <flags>35</flags>
- <stemv>0</stemv>
- <italicangle>0</italicangle>
- <subtype>TYPE0</subtype>
- <multibyte-extras>
- <cid-type>CIDFontType2</cid-type>
- <default-width>0</default-width>
- <bfranges>
- <bf us="32" ue="126" gi="3"/>
- <bf us="160" ue="160" gi="172"/>
- <bf us="161" ue="161" gi="163"/>
- <bf us="162" ue="163" gi="132"/>
- <bf us="164" ue="164" gi="188"/>
- <bf us="165" ue="165" gi="150"/>
- <bf us="166" ue="166" gi="230"/>
- <bf us="167" ue="167" gi="134"/>
- <bf us="168" ue="168" gi="142"/>
- <bf us="169" ue="169" gi="139"/>
- <bf us="170" ue="170" gi="157"/>
- <bf us="171" ue="171" gi="169"/>
- <bf us="172" ue="172" gi="164"/>
- <bf us="173" ue="173" gi="256"/>
- <bf us="174" ue="174" gi="138"/>
- <bf us="175" ue="175" gi="257"/>
- <bf us="176" ue="176" gi="131"/>
- <bf us="177" ue="177" gi="147"/>
- <bf us="178" ue="179" gi="240"/>
- <bf us="180" ue="180" gi="141"/>
- <bf us="181" ue="181" gi="151"/>
- <bf us="182" ue="182" gi="136"/>
- <bf us="183" ue="183" gi="258"/>
- <bf us="184" ue="184" gi="220"/>
- <bf us="185" ue="185" gi="239"/>
- <bf us="186" ue="186" gi="158"/>
- <bf us="187" ue="187" gi="170"/>
- <bf us="188" ue="188" gi="243"/>
- <bf us="189" ue="189" gi="242"/>
- <bf us="190" ue="190" gi="244"/>
- <bf us="191" ue="191" gi="162"/>
- <bf us="192" ue="192" gi="173"/>
- <bf us="193" ue="193" gi="200"/>
- <bf us="194" ue="194" gi="198"/>
- <bf us="195" ue="195" gi="174"/>
- <bf us="196" ue="197" gi="98"/>
- <bf us="198" ue="198" gi="144"/>
- <bf us="199" ue="199" gi="100"/>
- <bf us="200" ue="200" gi="202"/>
- <bf us="201" ue="201" gi="101"/>
- <bf us="202" ue="202" gi="199"/>
- <bf us="203" ue="203" gi="201"/>
- <bf us="204" ue="204" gi="206"/>
- <bf us="205" ue="207" gi="203"/>
- <bf us="208" ue="208" gi="231"/>
- <bf us="209" ue="209" gi="102"/>
- <bf us="210" ue="210" gi="209"/>
- <bf us="211" ue="212" gi="207"/>
- <bf us="213" ue="213" gi="175"/>
- <bf us="214" ue="214" gi="103"/>
- <bf us="215" ue="215" gi="238"/>
- <bf us="216" ue="216" gi="145"/>
- <bf us="217" ue="217" gi="212"/>
- <bf us="218" ue="219" gi="210"/>
- <bf us="220" ue="220" gi="104"/>
- <bf us="221" ue="221" gi="233"/>
- <bf us="222" ue="222" gi="235"/>
- <bf us="223" ue="223" gi="137"/>
- <bf us="224" ue="224" gi="106"/>
- <bf us="225" ue="225" gi="105"/>
- <bf us="226" ue="226" gi="107"/>
- <bf us="227" ue="227" gi="109"/>
- <bf us="228" ue="228" gi="108"/>
- <bf us="229" ue="229" gi="110"/>
- <bf us="230" ue="230" gi="160"/>
- <bf us="231" ue="231" gi="111"/>
- <bf us="232" ue="232" gi="113"/>
- <bf us="233" ue="233" gi="112"/>
- <bf us="234" ue="235" gi="114"/>
- <bf us="236" ue="236" gi="117"/>
- <bf us="237" ue="237" gi="116"/>
- <bf us="238" ue="239" gi="118"/>
- <bf us="240" ue="240" gi="232"/>
- <bf us="241" ue="241" gi="120"/>
- <bf us="242" ue="242" gi="122"/>
- <bf us="243" ue="243" gi="121"/>
- <bf us="244" ue="244" gi="123"/>
- <bf us="245" ue="245" gi="125"/>
- <bf us="246" ue="246" gi="124"/>
- <bf us="247" ue="247" gi="184"/>
- <bf us="248" ue="248" gi="161"/>
- <bf us="249" ue="249" gi="127"/>
- <bf us="250" ue="250" gi="126"/>
- <bf us="251" ue="252" gi="128"/>
- <bf us="253" ue="253" gi="234"/>
- <bf us="254" ue="254" gi="236"/>
- <bf us="255" ue="255" gi="186"/>
- <bf us="256" ue="261" gi="259"/>
- <bf us="262" ue="263" gi="251"/>
- <bf us="264" ue="267" gi="265"/>
- <bf us="268" ue="269" gi="253"/>
- <bf us="270" ue="272" gi="269"/>
- <bf us="273" ue="273" gi="255"/>
- <bf us="274" ue="285" gi="272"/>
- <bf us="286" ue="287" gi="246"/>
- <bf us="288" ue="303" gi="284"/>
- <bf us="304" ue="304" gi="248"/>
- <bf us="305" ue="305" gi="213"/>
- <bf us="306" ue="320" gi="300"/>
- <bf us="321" ue="322" gi="224"/>
- <bf us="323" ue="337" gi="315"/>
- <bf us="338" ue="339" gi="176"/>
- <bf us="340" ue="349" gi="330"/>
- <bf us="350" ue="351" gi="249"/>
- <bf us="352" ue="353" gi="226"/>
- <bf us="354" ue="375" gi="340"/>
- <bf us="376" ue="376" gi="187"/>
- <bf us="377" ue="380" gi="362"/>
- <bf us="381" ue="382" gi="228"/>
- <bf us="383" ue="383" gi="366"/>
- <bf us="402" ue="402" gi="166"/>
- <bf us="506" ue="511" gi="367"/>
- <bf us="710" ue="710" gi="214"/>
- <bf us="711" ue="711" gi="223"/>
- <bf us="713" ue="713" gi="216"/>
- <bf us="728" ue="730" gi="217"/>
- <bf us="731" ue="731" gi="222"/>
- <bf us="732" ue="732" gi="215"/>
- <bf us="733" ue="733" gi="221"/>
- <bf us="894" ue="894" gi="373"/>
- <bf us="900" ue="906" gi="374"/>
- <bf us="908" ue="908" gi="381"/>
- <bf us="910" ue="929" gi="382"/>
- <bf us="931" ue="959" gi="402"/>
- <bf us="960" ue="960" gi="155"/>
- <bf us="961" ue="974" gi="431"/>
- <bf us="1025" ue="1036" gi="445"/>
- <bf us="1038" ue="1103" gi="457"/>
- <bf us="1105" ue="1116" gi="523"/>
- <bf us="1118" ue="1119" gi="535"/>
- <bf us="1168" ue="1169" gi="537"/>
- <bf us="7808" ue="7813" gi="539"/>
- <bf us="7922" ue="7923" gi="545"/>
- <bf us="8211" ue="8212" gi="178"/>
- <bf us="8213" ue="8213" gi="547"/>
- <bf us="8215" ue="8215" gi="548"/>
- <bf us="8216" ue="8217" gi="182"/>
- <bf us="8218" ue="8218" gi="195"/>
- <bf us="8220" ue="8221" gi="180"/>
- <bf us="8222" ue="8222" gi="196"/>
- <bf us="8224" ue="8224" gi="130"/>
- <bf us="8225" ue="8225" gi="193"/>
- <bf us="8226" ue="8226" gi="135"/>
- <bf us="8230" ue="8230" gi="171"/>
- <bf us="8240" ue="8240" gi="197"/>
- <bf us="8249" ue="8250" gi="189"/>
- <bf us="8252" ue="8252" gi="549"/>
- <bf us="8254" ue="8254" gi="550"/>
- <bf us="8260" ue="8260" gi="551"/>
- <bf us="8319" ue="8319" gi="552"/>
- <bf us="8355" ue="8355" gi="245"/>
- <bf us="8356" ue="8356" gi="553"/>
- <bf us="8359" ue="8359" gi="554"/>
- <bf us="8364" ue="8364" gi="665"/>
- <bf us="8470" ue="8470" gi="555"/>
- <bf us="8482" ue="8482" gi="140"/>
- <bf us="8486" ue="8486" gi="159"/>
- <bf us="8539" ue="8542" gi="556"/>
- <bf us="8592" ue="8597" gi="560"/>
- <bf us="8616" ue="8616" gi="566"/>
- <bf us="8706" ue="8706" gi="152"/>
- <bf us="8710" ue="8710" gi="168"/>
- <bf us="8719" ue="8719" gi="154"/>
- <bf us="8721" ue="8721" gi="153"/>
- <bf us="8722" ue="8722" gi="237"/>
- <bf us="8729" ue="8729" gi="194"/>
- <bf us="8730" ue="8730" gi="165"/>
- <bf us="8734" ue="8734" gi="146"/>
- <bf us="8735" ue="8735" gi="567"/>
- <bf us="8745" ue="8745" gi="568"/>
- <bf us="8747" ue="8747" gi="156"/>
- <bf us="8776" ue="8776" gi="167"/>
- <bf us="8800" ue="8800" gi="143"/>
- <bf us="8801" ue="8801" gi="569"/>
- <bf us="8804" ue="8805" gi="148"/>
- <bf us="8962" ue="8962" gi="570"/>
- <bf us="8976" ue="8976" gi="571"/>
- <bf us="8992" ue="8993" gi="572"/>
- <bf us="9472" ue="9472" gi="574"/>
- <bf us="9474" ue="9474" gi="575"/>
- <bf us="9484" ue="9484" gi="576"/>
- <bf us="9488" ue="9488" gi="577"/>
- <bf us="9492" ue="9492" gi="578"/>
- <bf us="9496" ue="9496" gi="579"/>
- <bf us="9500" ue="9500" gi="580"/>
- <bf us="9508" ue="9508" gi="581"/>
- <bf us="9516" ue="9516" gi="582"/>
- <bf us="9524" ue="9524" gi="583"/>
- <bf us="9532" ue="9532" gi="584"/>
- <bf us="9552" ue="9580" gi="585"/>
- <bf us="9600" ue="9600" gi="614"/>
- <bf us="9604" ue="9604" gi="615"/>
- <bf us="9608" ue="9608" gi="616"/>
- <bf us="9612" ue="9612" gi="617"/>
- <bf us="9616" ue="9619" gi="618"/>
- <bf us="9632" ue="9632" gi="622"/>
- <bf us="9644" ue="9644" gi="623"/>
- <bf us="9650" ue="9650" gi="624"/>
- <bf us="9658" ue="9658" gi="625"/>
- <bf us="9660" ue="9660" gi="626"/>
- <bf us="9668" ue="9668" gi="627"/>
- <bf us="9674" ue="9674" gi="185"/>
- <bf us="9675" ue="9675" gi="628"/>
- <bf us="9688" ue="9689" gi="629"/>
- <bf us="9786" ue="9788" gi="631"/>
- <bf us="9792" ue="9792" gi="634"/>
- <bf us="9794" ue="9794" gi="635"/>
- <bf us="9824" ue="9824" gi="636"/>
- <bf us="9827" ue="9827" gi="637"/>
- <bf us="9829" ue="9830" gi="638"/>
- <bf us="9834" ue="9835" gi="640"/>
- <bf us="61443" ue="61453" gi="642"/>
- <bf us="63512" ue="63523" gi="653"/>
- <bf us="64257" ue="64258" gi="191"/>
- <bf us="65535" ue="65535" gi="0"/>
- </bfranges>
- <cid-widths start-index="0">
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="602"/>
- <wx w="603"/>
- </cid-widths>
- </multibyte-extras>
-</font-metrics>
diff --git a/src/documentation/poster/svg/pepe-business-card.svg b/src/documentation/poster/svg/pepe-business-card.svg
index 6183e8cf2..559c87abe 100644
--- a/src/documentation/poster/svg/pepe-business-card.svg
+++ b/src/documentation/poster/svg/pepe-business-card.svg
@@ -16,7 +16,8 @@
limitations under the License.
-->
<!-- $Id$ -->
-<svg xml:space="preserve" x="-3.05102in" y="-2.2459in" width="3.31009in" height="2.08961in"
+<svg xmlns="http://www.w3.org/2000/svg"
+ xml:space="preserve" x="-3.05102in" y="-2.2459in" width="3.31009in" height="2.08961in"
style="shape-rendering:geometricPrecision; text-rendering:geometricPrecision; image-rendering:optimizeQuality" viewBox="-30510 0 33101 20896">
<g>
<g>
diff --git a/src/documentation/poster/xml/business-card-demo.xml b/src/documentation/poster/xml/business-card-demo.xml
index bfd56d793..9b7f80029 100644
--- a/src/documentation/poster/xml/business-card-demo.xml
+++ b/src/documentation/poster/xml/business-card-demo.xml
@@ -37,13 +37,13 @@
<fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg:svg width="150mm" height="70mm" viewBox="0 0 150 70">
<svg:g transform="rotate(-7)">
- <svg:image x="0" y="12" width="84" height="53" xlink:href="svg/pepe-business-card.svg"/>
+ <svg:image x="0" y="12" width="84" height="53" xlink:href="../svg/pepe-business-card.svg"/>
</svg:g>
</svg:svg>
</fo:instream-foreign-object>
</p>
- <fo:block-container absolute-position="absolute" left="80mm" top="20mm" width="2cm" height="10cm">
- <fo:block>
+ <fo:block-container absolute-position="absolute" left="80mm" top="20mm" width="3cm" height="10cm">
+ <fo:block font-size="0" line-height="0">
<fo:instream-foreign-object xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<svg xmlns="http://www.w3.org/2000/svg" version="1.0" width="1.8cm" height="10cm" viewBox="0 0 20 100">
<defs>
@@ -65,11 +65,11 @@
</fo:instream-foreign-object>
</fo:block>
</fo:block-container>
- <fo:block-container absolute-position="absolute" width="100%" height="100%">
- <fo:block start-indent="112mm">
- <p>The XSLT stylesheet which contains the rules to convert the business card XML to XSL-FO:</p>
- <fo:block text-align="start" font-family="'Lucida Console'" font-size="10pt" white-space="pre"
- ><![CDATA[<?xml version="1.0" encoding="utf-8"?>
+ <fo:block-container absolute-position="absolute" width="100%">
+ <fo:block start-indent="112mm">
+ <p>The XSLT stylesheet which contains the rules to convert the business card XML to XSL-FO:</p>
+ <fo:block text-align="start" font-family="'Lucida Console'" font-size="10pt" white-space="pre"
+ ><![CDATA[<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:fo="http://www.w3.org/1999/XSL/Format">
@@ -77,7 +77,8 @@
<xsl:template match="/">
<fo:root font-family="Helvetica" font-size="10pt">
<fo:layout-master-set>
- <fo:simple-page-master master-name="bc" page-height="53mm" page-width="84mm" margin="3mm">
+ <fo:simple-page-master master-name="bc"
+ page-height="53mm" page-width="84mm" margin="3mm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
diff --git a/src/documentation/poster/xml/fop-history.xml b/src/documentation/poster/xml/fop-history.xml
index ea8cc133f..0baa6340f 100644
--- a/src/documentation/poster/xml/fop-history.xml
+++ b/src/documentation/poster/xml/fop-history.xml
@@ -39,13 +39,12 @@
</p>
<p>
In 2005, the redesign finally took a leap forward, which resulted in the first release from
- the new codebase (FOP&#160;0.90alpha). Shortly thereafter, FOP&#160;0.91beta was released in December
- 2005 and FOP&#160;0.92beta in April&#160;2006. Although 0.92beta still carries the beta tag,
- it has many advantages over the old version 0.20.5.
+ the new codebase (FOP&#160;0.90alpha). The project team has published a number of releases
+ since then. FOP made big steps forward.
</p>
<p>
- The next version, to be released shortly, will be 0.93. This version should be the last release
- before the long-awaited version 1.0, for which the team only has to implement a handful of
- additional features.
+ The next version, to be released in March&#160;2008, will be 0.95. Although FOP still carries
+ pre&#160;1.0 version numbers it is production-ready. Some features are still missing before
+ version&#160;1.0 can be released.
</p>
</section>
diff --git a/src/documentation/poster/xml/fop-poster.xml b/src/documentation/poster/xml/fop-poster.xml
index 67b44480b..419378b27 100644
--- a/src/documentation/poster/xml/fop-poster.xml
+++ b/src/documentation/poster/xml/fop-poster.xml
@@ -21,11 +21,11 @@
<section href="fop-overview.xml" width="165" height="118"/>
<section href="fop-output-formats.xml" width="165" height="103"/>
<section href="fop-foreign-xml-support.xml" width="165" height="55"/>
- <section href="fop-image-support.xml" width="165" height="65"/>
- <section href="fop-use-cases.xml" width="165" height="96"/>
- <section href="fop-history.xml" width="165" height="181"/>
+ <section href="fop-image-support.xml" width="165" height="66"/>
+ <section href="fop-use-cases.xml" width="165" height="98"/>
+ <section href="fop-history.xml" width="165" height="180"/>
<section href="fop-getting-help.xml" width="165" height="67"/>
- <section href="fop-transformation-chain.xml" width="335" height="167"/>
+ <section href="fop-transformation-chain.xml" width="335" height="166"/>
<!-- section href="hello-world-in-fo.xml" width="165" height="115"/-->
- <section href="business-card-demo.xml" width="335" height="181"/>
+ <section href="business-card-demo.xml" width="335" height="185"/>
</poster>
diff --git a/src/documentation/poster/xml/fop-transformation-chain.xml b/src/documentation/poster/xml/fop-transformation-chain.xml
index 7a713fdb2..58c8de856 100644
--- a/src/documentation/poster/xml/fop-transformation-chain.xml
+++ b/src/documentation/poster/xml/fop-transformation-chain.xml
@@ -19,7 +19,7 @@
<section xmlns:fo="http://www.w3.org/1999/XSL/Format">
<title tab-width="80">Transformation Chain</title>
<fo:block space-before="10pt" space-before.conditionality="retain" space-after="10pt" text-align="center">
- <fo:external-graphic src="svg/fop-transformation-chain.svg" width="70%" content-width="scale-to-fit"/>
+ <fo:external-graphic src="../svg/fop-transformation-chain.svg" width="70%" content-width="scale-to-fit"/>
</fo:block>
<p>
This diagram shows a complete transformation chain (exemplary). It begins with your data source,
diff --git a/src/documentation/poster/xml/fop-use-cases.xml b/src/documentation/poster/xml/fop-use-cases.xml
index 250a6436c..d2f4878a5 100644
--- a/src/documentation/poster/xml/fop-use-cases.xml
+++ b/src/documentation/poster/xml/fop-use-cases.xml
@@ -19,8 +19,7 @@
<section xmlns:fo="http://www.w3.org/1999/XSL/Format">
<title tab-width="50">Use Cases</title>
<fo:table table-layout="fixed" width="100%" border-collapse="separate">
- <fo:table-column/>
- <fo:table-column/>
+ <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"/>
<fo:table-header>
<fo:table-row font-weight="bold">
<fo:table-cell border-bottom="solid 0.5mm black">
diff --git a/src/documentation/poster/xslt/common.xsl b/src/documentation/poster/xslt/common.xsl
index ad8ac0109..5b02f52fd 100644
--- a/src/documentation/poster/xslt/common.xsl
+++ b/src/documentation/poster/xslt/common.xsl
@@ -37,14 +37,14 @@
<xsl:choose>
<xsl:when test="ancestor::li and not(preceding-sibling::*)">
<fo:block
- space-after="4pt">
+ space-after.optimum="0.3em" space-after.maximum="1em">
<xsl:apply-templates/>
</fo:block>
</xsl:when>
<xsl:otherwise>
<fo:block
- space-before="4pt"
- space-after="4pt">
+ space-before.optimum="0.3em" space-before.maximum="1em"
+ space-after.optimum="0.3em" space-after.maximum="1em">
<xsl:apply-templates/>
</fo:block>
</xsl:otherwise>
diff --git a/src/documentation/poster/xslt/fop-poster.xsl b/src/documentation/poster/xslt/fop-poster.xsl
index 9c0b1a82b..dca0f6cfc 100644
--- a/src/documentation/poster/xslt/fop-poster.xsl
+++ b/src/documentation/poster/xslt/fop-poster.xsl
@@ -60,9 +60,6 @@
</fo:static-content>
<fo:flow flow-name="xsl-region-body">
<xsl:apply-templates select="section"/>
- <fo:block-container width="1cm" height="5cm">
- <fo:block/>
- </fo:block-container>
</fo:flow>
</fo:page-sequence>
</fo:root>
@@ -84,14 +81,14 @@
<path
d="M 840,575 L 280,575 c -40,0 -60,-50 -100,-50 L 0,525"
style="fill:none; stroke:blue; stroke-width:5;" />
- <image x="680" y="7" width="140" height="60" xlink:href="svg/fop-logo-reconstructed.svg"/>
+ <image x="680" y="7" width="140" height="60" xlink:href="../svg/fop-logo-reconstructed.svg"/>
<text x="15" y="35" style="fill:black; font-weight:bold; font-size:17">
Apache FOP - The leading open source XSL-FO formatter
</text>
<text x="685" y="74" style="fill:black; font-size:5.5">
A product of the Apache XML Graphics Project
</text>
- <image x="15" y="530" width="160" height="60" xlink:href="svg/asf-logo.svg"/>
+ <image x="15" y="530" width="160" height="60" xlink:href="../svg/asf-logo.svg"/>
<text x="360" y="560" style="fill:blue; font-size:12">
For more details, please visit: <a xlink:href="http://xmlgraphics.apache.org/fop/">http://xmlgraphics.apache.org/fop/</a>
</text>
@@ -111,7 +108,7 @@
</xsl:template>
<xsl:template match="section">
- <xsl:variable name="section-content" select="exslt:node-set(document(@href))"/>
+ <xsl:variable name="section-content" select="exslt:node-set(document(@href, .))"/>
<fo:block
space-before.minimum="2mm" space-before.optimum="5mm" space-before.maximum="30mm"
space-before.conditionality="discard" space-after.conditionality="discard"
@@ -129,7 +126,9 @@
</fo:instream-foreign-object>
</fo:block>
</fo:block-container>
- <fo:block-container width="{@width}mm - 8mm" height="{@height}mm - 20mm" padding="4mm" padding-top="16mm" margin="0pt">
+ <fo:block-container width="{@width}mm - 8mm" height="{@height}mm - 24mm"
+ padding="4mm" padding-top="16mm" padding-bottom="8mm" margin="0pt"
+ display-align="distribute" id="section{position()}">
<fo:block>
<xsl:apply-templates select="$section-content/section/*[local-name() != 'title']"/>
</fo:block>
diff --git a/src/documentation/sitemap.xmap b/src/documentation/sitemap.xmap
index bfc1e2bbe..470db0b7b 100644
--- a/src/documentation/sitemap.xmap
+++ b/src/documentation/sitemap.xmap
@@ -20,44 +20,13 @@
</map:components>
<map:pipelines>
- <map:pipeline>
-
- <map:match type="regexp" pattern="^(.*?)([^/]*)changes.xml$">
- <map:generate type="file" src="{project:status}" />
- <map:transform src="resources/stylesheets/changes2document.xsl" >
- <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
- <map:parameter name="path" value="{1}{2}"/>
- </map:transform>
- <map:serialize type="xml-document"/>
- </map:match>
-
- <map:match type="regexp" pattern="^(.*?)([^/]*)changes_(.*).xml$">
- <map:generate type="file" src="{project:status}" />
- <map:transform src="resources/stylesheets/changes2document.xsl" >
- <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
- <map:parameter name="path" value="{1}{2}"/>
- <map:parameter name="versionNumber" value="{3}"/>
- </map:transform>
- <map:serialize type="xml-document"/>
- </map:match>
-
- <map:match type="regexp" pattern="^(.*?)([^/]*)releaseNotes_(.*).xml$">
- <map:generate type="file" src="{project:status}" />
- <map:transform src="resources/stylesheets/releaseNotes2document.xsl">
- <map:parameter name="versionNumber" value="{3}"/>
- <map:parameter name="path" value="{1}{2}"/>
- </map:transform>
- <map:serialize type="xml-document"/>
- </map:match>
-
- </map:pipeline>
<!-- This is used by xinclude statements in knownissues.xml -->
<map:pipeline internal-only="true">
<map:match type="regexp" pattern="^(.*?)([^/]*)knownissues-raw-layoutengine.xml$">
<map:generate type="file" src="../../test/layoutengine/disabled-testcases.xml"/>
<map:transform src="resources/stylesheets/disabled-testcases2document.xsl" >
- <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
+ <map:parameter name="bugtracking-url" value="{properties:bugtracking-url}"/>
<map:parameter name="path" value="{1}{2}"/>
</map:transform>
<map:serialize type="xml-document"/>
@@ -65,13 +34,13 @@
<map:match type="regexp" pattern="^(.*?)([^/]*)knownissues-raw-fotree.xml$">
<map:generate type="file" src="../../test/fotree/disabled-testcases.xml"/>
<map:transform src="resources/stylesheets/disabled-testcases2document.xsl" >
- <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
+ <map:parameter name="bugtracking-url" value="{properties:bugtracking-url}"/>
<map:parameter name="path" value="{1}{2}"/>
</map:transform>
<map:serialize type="xml-document"/>
</map:match>
<map:match type="regexp" pattern="^(.*?)([^/]*)knownissues-raw-static.xml$">
- <!--<map:generate type="file" src="{project:knownissues}"/>-->
+ <!--<map:generate type="file" src="{properties:knownissues}"/>-->
<map:generate type="file" src="../../known-issues.xml"/>
<map:transform src="resources/stylesheets/known-issues2document.xsl"/>
<map:serialize type="xml-document"/>
@@ -80,7 +49,7 @@
<map:match type="regexp" pattern="^(.*?)([^/]*)knownissues-raw-layoutengine_(.*).xml$">
<map:generate type="file" src="content/xdocs/{3}/layoutengine/disabled-testcases.xml"/>
<map:transform src="resources/stylesheets/disabled-testcases2document.xsl" >
- <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
+ <map:parameter name="bugtracking-url" value="{properties:bugtracking-url}"/>
<map:parameter name="path" value="{1}{2}"/>
</map:transform>
<map:serialize type="xml-document"/>
@@ -88,13 +57,13 @@
<map:match type="regexp" pattern="^(.*?)([^/]*)knownissues-raw-fotree_(.*).xml$">
<map:generate type="file" src="content/xdocs/{3}/fotree/disabled-testcases.xml"/>
<map:transform src="resources/stylesheets/disabled-testcases2document.xsl" >
- <map:parameter name="bugtracking-url" value="{defaults:bugtracking-url}"/>
+ <map:parameter name="bugtracking-url" value="{properties:bugtracking-url}"/>
<map:parameter name="path" value="{1}{2}"/>
</map:transform>
<map:serialize type="xml-document"/>
</map:match>
<map:match type="regexp" pattern="^(.*?)([^/]*)knownissues-raw-static_(.*).xml$">
- <!--<map:generate type="file" src="{project:knownissues}"/>-->
+ <!--<map:generate type="file" src="{properties:knownissues}"/>-->
<map:generate type="file" src="content/xdocs/{3}/known-issues.xml"/>
<map:transform src="resources/stylesheets/known-issues2document.xsl"/>
<map:serialize type="xml-document"/>
diff --git a/src/documentation/skinconf.xml b/src/documentation/skinconf.xml
index 65a271a64..e87baab34 100644
--- a/src/documentation/skinconf.xml
+++ b/src/documentation/skinconf.xml
@@ -91,7 +91,7 @@ which will be used to configure the chosen Forrest skin.
<favicon-url></favicon-url>
<!-- The following used to construct a copyright statement -->
- <year>1999-2007</year>
+ <year>1999-2008</year>
<vendor>The Apache Software Foundation.</vendor>
<copyright-link>http://www.apache.org/licenses/</copyright-link>
@@ -164,6 +164,7 @@ which will be used to configure the chosen Forrest skin.
.ForrestTable td.partial { background-color: #FFFFCC; text-align: center; }
.ForrestTable td.category { /*background-color: #CFDCED;*/
font-size: 1.2em }
+ .menuitemgroup{ display: block;}
</extra-css>
@@ -311,8 +312,8 @@ which will be used to configure the chosen Forrest skin.
portrait).
Supported text alignments are left, right, justify (default left).
-->
- <page size="letter" orientation="portrait" text-align="left"/>
-
+ <page size="letter" orientation="portrait" text-align="justify"/>
+ <page-numbering-format>1</page-numbering-format>
<!--
Margins can be specified for top, bottom, inner, and outer
edges. If double-sided="false", the inner edge is always left
@@ -322,10 +323,10 @@ which will be used to configure the chosen Forrest skin.
Specified below are the default settings.
-->
<margins double-sided="false">
- <top>1in</top>
- <bottom>1in</bottom>
+ <top>0.5in</top>
+ <bottom>0.5in</bottom>
<inner>1in</inner>
- <outer>1in</outer>
+ <outer>0.5in</outer>
</margins>
<!--
@@ -375,6 +376,13 @@ which will be used to configure the chosen Forrest skin.
<width>125</width>
<height>125</height>
</credit>
+ <credit box-location="alt2">
+ <name>ApacheCon US 2008</name>
+ <url>http://us.apachecon.com/</url>
+ <image>http://apache.org/ads/ApacheCon/2008-usa-125x125.png</image>
+ <width>125</width>
+ <height>125</height>
+ </credit>
<credit role="pdf">
<name>PDF created by Apache FOP</name>
diff --git a/src/java-1.4/org/apache/fop/image/ImageIOImage.java b/src/java-1.4/org/apache/fop/image/ImageIOImage.java
deleted file mode 100644
index 7ec6b9004..000000000
--- a/src/java-1.4/org/apache/fop/image/ImageIOImage.java
+++ /dev/null
@@ -1,237 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// AWT
-import java.awt.Color;
-import java.awt.color.ColorSpace;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.BufferedImage;
-import java.util.Iterator;
-
-// ImageIO
-import javax.imageio.ImageIO;
-import javax.imageio.ImageReadParam;
-import javax.imageio.ImageReader;
-import javax.imageio.metadata.IIOMetadata;
-import javax.imageio.stream.ImageInputStream;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.fop.util.UnitConv;
-import org.w3c.dom.Element;
-import org.w3c.dom.NodeList;
-
-/**
- * FopImage object using ImageIO.
- * @see AbstractFopImage
- * @see FopImage
- */
-public class ImageIOImage extends AbstractFopImage {
-
- private byte[] softMask = null;
-
- /**
- * Creates a new ImageIOImage.
- * @param info the image info from the ImageReader
- */
- public ImageIOImage(FopImage.ImageInfo info) {
- super(info);
- if ("image/png".equals(info.mimeType)
- || "image/tiff".equals(info.mimeType)) {
- this.loaded = 0; //TODO The PNG and TIFF Readers cannot read the resolution, yet.
- }
- }
-
- /**
- * @see org.apache.fop.image.AbstractFopImage#loadDimensions()
- */
- protected boolean loadDimensions() {
- if (this.bitmaps == null) {
- return loadBitmap();
- }
- return true;
- }
-
- private Element getChild(Element el, String name) {
- NodeList nodes = el.getElementsByTagName(name);
- if (nodes.getLength() > 0) {
- return (Element)nodes.item(0);
- } else {
- return null;
- }
- }
-
- /** @see org.apache.fop.image.AbstractFopImage#loadBitmap() */
- protected boolean loadBitmap() {
- if (this.bitmaps != null) {
- return true;
- }
- try {
- inputStream.reset();
- ImageInputStream imgStream = ImageIO.createImageInputStream(inputStream);
- Iterator iter = ImageIO.getImageReaders(imgStream);
- if (!iter.hasNext()) {
- log.error("No ImageReader found.");
- return false;
- }
- ImageReader reader = (ImageReader)iter.next();
- ImageReadParam param = reader.getDefaultReadParam();
- reader.setInput(imgStream, true, false);
- BufferedImage imageData = reader.read(0, param);
-
- //Read image resolution
- IIOMetadata iiometa = reader.getImageMetadata(0);
- if (iiometa != null && iiometa.isStandardMetadataFormatSupported()) {
- Element metanode = (Element)iiometa.getAsTree("javax_imageio_1.0");
- Element dim = getChild(metanode, "Dimension");
- if (dim != null) {
- Element child;
- child = getChild(dim, "HorizontalPixelSize");
- if (child != null) {
- this.dpiHorizontal = UnitConv.IN2MM
- / Float.parseFloat(child.getAttribute("value"));
- }
- child = getChild(dim, "VerticalPixelSize");
- if (child != null) {
- this.dpiVertical = UnitConv.IN2MM
- / Float.parseFloat(child.getAttribute("value"));
- }
- }
- }
- imgStream.close();
- reader.dispose();
-
- this.height = imageData.getHeight();
- this.width = imageData.getWidth();
-
- ColorModel cm = imageData.getColorModel();
- this.bitsPerPixel = cm.getComponentSize(0); //only use first, we assume all are equal
- //this.colorSpace = cm.getColorSpace();
- //We currently force the image to sRGB
- this.colorSpace = ColorSpace.getInstance(ColorSpace.CS_sRGB);
-
- int[] tmpMap = imageData.getRGB(0, 0, this.width,
- this.height, null, 0, this.width);
-
- if (cm.hasAlpha()) {
- // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
- int transparencyType = cm.getTransparency();
-
- if (transparencyType == java.awt.Transparency.OPAQUE) {
- this.isTransparent = false;
- } else if (transparencyType == java.awt.Transparency.BITMASK) {
- if (cm instanceof IndexColorModel) {
- this.isTransparent = false;
- byte[] alphas = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] reds = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] greens = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] blues = new byte[
- ((IndexColorModel) cm).getMapSize()];
- ((IndexColorModel) cm).getAlphas(alphas);
- ((IndexColorModel) cm).getReds(reds);
- ((IndexColorModel) cm).getGreens(greens);
- ((IndexColorModel) cm).getBlues(blues);
- for (int i = 0;
- i < ((IndexColorModel) cm).getMapSize();
- i++) {
- if ((alphas[i] & 0xFF) == 0) {
- this.isTransparent = true;
- this.transparentColor = new Color(
- (int)(reds[i] & 0xFF),
- (int)(greens[i] & 0xFF),
- (int)(blues[i] & 0xFF));
- break;
- }
- }
- } else {
- //TODO Is there another case?
- this.isTransparent = false;
- }
- } else {
- // TRANSLUCENT
- this.softMask = new byte[width * height];
- imageData.getAlphaRaster().getDataElements(
- 0, 0, width, height, this.softMask);
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
-
- // Should take care of the ColorSpace and bitsPerPixel
- this.bitmaps = new byte[this.width * this.height * 3];
- for (int i = 0; i < this.height; i++) {
- for (int j = 0; j < this.width; j++) {
- int p = tmpMap[i * this.width + j];
- int r = (p >> 16) & 0xFF;
- int g = (p >> 8) & 0xFF;
- int b = (p) & 0xFF;
- this.bitmaps[3 * (i * this.width + j)]
- = (byte)(r & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 1]
- = (byte)(g & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 2]
- = (byte)(b & 0xFF);
- }
- }
-
- } catch (Exception ex) {
- log.error("Error while loading image: " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
- return true;
- }
-
- /** @see org.apache.fop.image.AbstractFopImage#loadOriginalData() */
- protected boolean loadOriginalData() {
- if (inputStream == null && getBitmaps() != null) {
- return false;
- } else {
- return loadDefaultOriginalData();
- }
- }
-
- /** @see org.apache.fop.image.FopImage#hasSoftMask() */
- public boolean hasSoftMask() {
- if (this.bitmaps == null && this.raw == null) {
- loadBitmap();
- }
-
- return (this.softMask != null);
- }
-
- /** @see org.apache.fop.image.FopImage#getSoftMask() */
- public byte[] getSoftMask() {
- if (this.bitmaps == null) {
- loadBitmap();
- }
-
- return this.softMask;
- }
-
-}
-
diff --git a/src/java-1.4/org/apache/fop/image/JpegImageIOImage.java b/src/java-1.4/org/apache/fop/image/JpegImageIOImage.java
deleted file mode 100644
index 86d78f666..000000000
--- a/src/java-1.4/org/apache/fop/image/JpegImageIOImage.java
+++ /dev/null
@@ -1,161 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// AWT
-import java.awt.Color;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.BufferedImage;
-
-// ImageIO
-import javax.imageio.ImageIO;
-
-import org.apache.commons.io.IOUtils;
-
-/**
- * FopImage object using ImageIO.
- * Special class to allow the use of JpegImage for those
- * renderers which can embed Jpeg directly but for renderers
- * which require the decoded data this class delivers it.
- * @see AbstractFopImage
- * @see JpegImage
- */
-public class JpegImageIOImage extends JpegImage {
-
- /**
- * Creates a new JpegImageIOImage.
- * @param info the image info from the ImageReader
- */
- public JpegImageIOImage(FopImage.ImageInfo info) {
- super(info);
- }
-
- /**
- * @see org.apache.fop.image.AbstractFopImage#loadDimensions()
- */
- protected boolean loadDimensions() {
- if (this.bitmaps == null) {
- return loadBitmap();
- }
- return true;
- }
-
- /** @see org.apache.fop.image.AbstractFopImage#loadBitmap() */
- protected boolean loadBitmap() {
- try {
- inputStream.reset();
- BufferedImage imageData = ImageIO.read(inputStream);
-
- this.height = imageData.getHeight();
- this.width = imageData.getWidth();
-
- ColorModel cm = imageData.getColorModel();
- this.bitsPerPixel = cm.getComponentSize(0); //only use first, we assume all are equal
- this.colorSpace = cm.getColorSpace();
-
- int[] tmpMap = imageData.getRGB(0, 0, this.width,
- this.height, null, 0, this.width);
-
- if (cm.hasAlpha()) {
- // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
- int transparencyType = cm.getTransparency();
-
- if (transparencyType == java.awt.Transparency.OPAQUE) {
- this.isTransparent = false;
- } else if (transparencyType == java.awt.Transparency.BITMASK) {
- if (cm instanceof IndexColorModel) {
- this.isTransparent = false;
- byte[] alphas = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] reds = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] greens = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] blues = new byte[
- ((IndexColorModel) cm).getMapSize()];
- ((IndexColorModel) cm).getAlphas(alphas);
- ((IndexColorModel) cm).getReds(reds);
- ((IndexColorModel) cm).getGreens(greens);
- ((IndexColorModel) cm).getBlues(blues);
- for (int i = 0;
- i < ((IndexColorModel) cm).getMapSize();
- i++) {
- if ((alphas[i] & 0xFF) == 0) {
- this.isTransparent = true;
- this.transparentColor = new Color(
- (int)(reds[i] & 0xFF),
- (int)(greens[i] & 0xFF),
- (int)(blues[i] & 0xFF));
- break;
- }
- }
- } else {
- // TRANSLUCENT
- /*
- * this.isTransparent = false;
- * for (int i = 0; i < this.width * this.height; i++) {
- * if (cm.getAlpha(tmpMap[i]) == 0) {
- * this.isTransparent = true;
- * this.transparentColor = new PDFColor(cm.getRed(tmpMap[i]),
- * cm.getGreen(tmpMap[i]), cm.getBlue(tmpMap[i]));
- * break;
- * }
- * }
- * // or use special API...
- */
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
-
- // Should take care of the ColorSpace and bitsPerPixel
- this.bitmaps = new byte[this.width * this.height * 3];
- for (int i = 0; i < this.height; i++) {
- for (int j = 0; j < this.width; j++) {
- int p = tmpMap[i * this.width + j];
- int r = (p >> 16) & 0xFF;
- int g = (p >> 8) & 0xFF;
- int b = (p) & 0xFF;
- this.bitmaps[3 * (i * this.width + j)]
- = (byte)(r & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 1]
- = (byte)(g & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 2]
- = (byte)(b & 0xFF);
- }
- }
-
- } catch (Exception ex) {
- log.error("Error while loading image: " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
- return true;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/apps/FopFactory.java b/src/java/org/apache/fop/apps/FopFactory.java
index e6ac70d67..ce77d9040 100644
--- a/src/java/org/apache/fop/apps/FopFactory.java
+++ b/src/java/org/apache/fop/apps/FopFactory.java
@@ -46,7 +46,6 @@ import org.apache.fop.fo.ElementMapping;
import org.apache.fop.fo.ElementMappingRegistry;
import org.apache.fop.fonts.FontCache;
import org.apache.fop.hyphenation.HyphenationTreeResolver;
-import org.apache.fop.image.ImageFactory;
import org.apache.fop.layoutmgr.LayoutManagerMaker;
import org.apache.fop.render.RendererFactory;
import org.apache.fop.render.XMLHandlerRegistry;
@@ -82,9 +81,6 @@ public class FopFactory implements ImageContext {
private ColorSpaceCache colorSpaceCache = null;
- /** Image factory for creating fop image objects */
- private ImageFactory imageFactory;
-
/** Image manager for loading and caching image objects */
private ImageManager imageManager;
@@ -155,7 +151,6 @@ public class FopFactory implements ImageContext {
this.elementMappingRegistry = new ElementMappingRegistry(this);
this.foURIResolver = new FOURIResolver(validateUserConfigStrictly());
this.colorSpaceCache = new ColorSpaceCache(foURIResolver);
- this.imageFactory = new ImageFactory();
this.imageManager = new ImageManager(this);
this.rendererFactory = new RendererFactory();
this.xmlHandlers = new XMLHandlerRegistry();
@@ -290,11 +285,6 @@ public class FopFactory implements ImageContext {
return this.contentHandlerFactoryRegistry;
}
- /** @return the image factory */
- public ImageFactory getImageFactory() {
- return this.imageFactory;
- }
-
/**
* Returns the image manager.
* @return the image manager
diff --git a/src/java/org/apache/fop/cli/InputHandler.java b/src/java/org/apache/fop/cli/InputHandler.java
index 68af6ae51..4c38fa5c7 100644
--- a/src/java/org/apache/fop/cli/InputHandler.java
+++ b/src/java/org/apache/fop/cli/InputHandler.java
@@ -39,8 +39,13 @@ import javax.xml.transform.sax.SAXSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import org.xml.sax.InputSource;
+import org.xml.sax.SAXException;
+import org.xml.sax.XMLReader;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
@@ -150,6 +155,7 @@ public class InputHandler implements ErrorListener, Renderable {
try {
InputSource is = new InputSource(new FileInputStream(
this.sourcefile));
+ is.setSystemId(this.sourcefile.toURI().toASCIIString());
SAXParserFactory spf = SAXParserFactory.newInstance();
spf.setFeature("http://xml.org/sax/features/namespaces", true);
spf.setFeature("http://apache.org/xml/features/xinclude", true);
@@ -221,7 +227,7 @@ public class InputHandler implements ErrorListener, Renderable {
* {@inheritDoc}
*/
public void warning(TransformerException exc) {
- log.warn(exc.toString());
+ log.warn(exc.getLocalizedMessage());
}
/**
diff --git a/src/java/org/apache/fop/fo/ElementMapping.java b/src/java/org/apache/fop/fo/ElementMapping.java
index 0f436ae28..495983750 100644
--- a/src/java/org/apache/fop/fo/ElementMapping.java
+++ b/src/java/org/apache/fop/fo/ElementMapping.java
@@ -19,7 +19,7 @@
package org.apache.fop.fo;
-import java.util.HashMap;
+import java.util.Map;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
@@ -37,7 +37,7 @@ public abstract class ElementMapping {
public static final String DEFAULT = "<default>";
/** The HashMap table of formatting objects defined by the ElementMapping */
- protected HashMap foObjs = null;
+ protected Map foObjs = null;
/** The namespace for the ElementMapping */
protected String namespaceURI = null;
@@ -47,7 +47,7 @@ public abstract class ElementMapping {
*
* @return Table of Maker objects for this ElementMapping
*/
- public HashMap getTable() {
+ public Map getTable() {
if (foObjs == null) {
initialize();
}
diff --git a/src/java/org/apache/fop/fo/FOPropertyMapping.java b/src/java/org/apache/fop/fo/FOPropertyMapping.java
index 9910f1ce7..539648f5a 100644
--- a/src/java/org/apache/fop/fo/FOPropertyMapping.java
+++ b/src/java/org/apache/fop/fo/FOPropertyMapping.java
@@ -412,6 +412,7 @@ public final class FOPropertyMapping implements Constants {
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.setDefault("auto");
+ l.setPercentBase(LengthBase.CONTAINING_BLOCK_HEIGHT);
addPropertyMaker("top", l);
// right
@@ -419,6 +420,7 @@ public final class FOPropertyMapping implements Constants {
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.setDefault("auto");
+ l.setPercentBase(LengthBase.CONTAINING_BLOCK_WIDTH);
addPropertyMaker("right", l);
// bottom
@@ -426,6 +428,7 @@ public final class FOPropertyMapping implements Constants {
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.setDefault("auto");
+ l.setPercentBase(LengthBase.CONTAINING_BLOCK_HEIGHT);
addPropertyMaker("bottom", l);
// left
@@ -433,6 +436,7 @@ public final class FOPropertyMapping implements Constants {
l.setInherited(false);
l.addEnum("auto", getEnumProperty(EN_AUTO, "AUTO"));
l.setDefault("auto");
+ l.setPercentBase(LengthBase.CONTAINING_BLOCK_WIDTH);
addPropertyMaker("left", l);
}
@@ -1161,6 +1165,7 @@ public final class FOPropertyMapping implements Constants {
m = new LengthProperty.Maker(PR_START_INDENT);
m.setInherited(true);
m.setDefault("0pt");
+ m.setPercentBase(LengthBase.CONTAINING_REFAREA_WIDTH);
IndentPropertyMaker sCorr = new IndentPropertyMaker(m);
sCorr.setCorresponding(PR_MARGIN_LEFT, PR_MARGIN_RIGHT, PR_MARGIN_TOP);
sCorr.setUseParent(false);
@@ -1177,6 +1182,7 @@ public final class FOPropertyMapping implements Constants {
m = new LengthProperty.Maker(PR_END_INDENT);
m.setInherited(true);
m.setDefault("0pt");
+ m.setPercentBase(LengthBase.CONTAINING_REFAREA_WIDTH);
IndentPropertyMaker eCorr = new IndentPropertyMaker(m);
eCorr.setCorresponding(PR_MARGIN_RIGHT, PR_MARGIN_LEFT, PR_MARGIN_BOTTOM);
eCorr.setUseParent(false);
diff --git a/src/java/org/apache/fop/fo/FOTreeBuilder.java b/src/java/org/apache/fop/fo/FOTreeBuilder.java
index 63fc5cb5b..d02a058fe 100644
--- a/src/java/org/apache/fop/fo/FOTreeBuilder.java
+++ b/src/java/org/apache/fop/fo/FOTreeBuilder.java
@@ -38,7 +38,6 @@ import org.apache.fop.area.AreaTreeHandler;
import org.apache.fop.fo.ElementMapping.Maker;
import org.apache.fop.fo.extensions.ExtensionElementMapping;
import org.apache.fop.fo.pagination.Root;
-import org.apache.fop.image.ImageFactory;
import org.apache.fop.util.ContentHandlerFactory;
import org.apache.fop.util.ContentHandlerFactory.ObjectBuiltListener;
import org.apache.fop.util.ContentHandlerFactory.ObjectSource;
@@ -57,9 +56,7 @@ public class FOTreeBuilder extends DefaultHandler {
/** The registry for ElementMapping instances */
protected ElementMappingRegistry elementMappingRegistry;
- /**
- * The root of the formatting object tree
- */
+ /** The root of the formatting object tree */
protected Root rootFObj = null;
/** Main DefaultHandler that handles the FO namespace. */
@@ -68,10 +65,7 @@ public class FOTreeBuilder extends DefaultHandler {
/** Current delegate ContentHandler to receive the SAX events */
protected ContentHandler delegate;
- /**
- * The class that handles formatting and rendering to a stream
- * (mark-fop@inomial.com)
- */
+ /** The object that handles formatting and rendering to a stream */
private FOEventHandler foEventHandler;
/** The SAX locator object managing the line and column counters */
@@ -86,14 +80,18 @@ public class FOTreeBuilder extends DefaultHandler {
private int depth;
/**
- * FOTreeBuilder constructor
+ * <code>FOTreeBuilder</code> constructor
+ *
* @param outputFormat the MIME type of the output format to use (ex. "application/pdf").
- * @param foUserAgent in effect for this process
- * @param stream OutputStream to direct results
- * @throws FOPException if the FOTreeBuilder cannot be properly created
+ * @param foUserAgent the {@link FOUserAgent} in effect for this process
+ * @param stream the <code>OutputStream</code> to direct the results to
+ * @throws FOPException if the <code>FOTreeBuilder</code> cannot be properly created
*/
- public FOTreeBuilder(String outputFormat, FOUserAgent foUserAgent,
- OutputStream stream) throws FOPException {
+ public FOTreeBuilder(
+ String outputFormat,
+ FOUserAgent foUserAgent,
+ OutputStream stream)
+ throws FOPException {
this.userAgent = foUserAgent;
this.elementMappingRegistry = userAgent.getFactory().getElementMappingRegistry();
@@ -108,40 +106,25 @@ public class FOTreeBuilder extends DefaultHandler {
});
}
- /**
- * This method enables to reduce memory consumption of the FO tree slightly. When it returns
- * true no Locator is passed to the FO tree nodes which would copy the information into
- * a SAX LocatorImpl instance.
- * @return true if no context information should be stored on each node in the FO tree.
- * @deprecated Use FOUserAgent.isLocatorEnabled() instead.
- */
- protected boolean isLocatorDisabled() {
- return !userAgent.isLocatorEnabled();
- }
-
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void setDocumentLocator(Locator locator) {
this.locator = locator;
}
- /** @return a Locator instance if it is available and not disabled */
+ /**
+ * @return a {@link Locator} instance if it is available and not disabled
+ */
protected Locator getEffectiveLocator() {
return (userAgent.isLocatorEnabled() ? this.locator : null);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void characters(char[] data, int start, int length)
throws SAXException {
delegate.characters(data, start, length);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void startDocument() throws SAXException {
if (used) {
throw new IllegalStateException("FOTreeBuilder (and the Fop class) cannot be reused."
@@ -159,9 +142,7 @@ public class FOTreeBuilder extends DefaultHandler {
this.delegate = this.mainFOHandler;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void endDocument() throws SAXException {
this.delegate.endDocument();
if (this.rootFObj == null && empty) {
@@ -173,24 +154,16 @@ public class FOTreeBuilder extends DefaultHandler {
log.debug("Parsing of document complete");
}
foEventHandler.endDocument();
-
- //Notify the image factory that this user agent has expired.
- ImageFactory imageFactory = userAgent.getFactory().getImageFactory();
- imageFactory.removeContext(this.userAgent);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void startElement(String namespaceURI, String localName, String rawName,
Attributes attlist) throws SAXException {
this.depth++;
delegate.startElement(namespaceURI, localName, rawName, attlist);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void endElement(String uri, String localName, String rawName)
throws SAXException {
this.delegate.endElement(uri, localName, rawName);
@@ -206,7 +179,8 @@ public class FOTreeBuilder extends DefaultHandler {
}
/**
- * Finds the Maker used to create node objects of a particular type
+ * Finds the {@link Maker} used to create {@link FONode} objects of a particular type
+ *
* @param namespaceURI URI for the namespace of the element
* @param localName name of the Element
* @return the ElementMapping.Maker that can create an FO object for this element
@@ -218,7 +192,7 @@ public class FOTreeBuilder extends DefaultHandler {
/** {@inheritDoc} */
public void warning(SAXParseException e) {
- log.warn(e.toString());
+ log.warn(e.getLocalizedMessage());
}
/** {@inheritDoc} */
@@ -233,7 +207,8 @@ public class FOTreeBuilder extends DefaultHandler {
}
/**
- * Provides access to the underlying FOEventHandler object.
+ * Provides access to the underlying {@link FOEventHandler} object.
+ *
* @return the FOEventHandler object
*/
public FOEventHandler getEventHandler() {
@@ -244,6 +219,7 @@ public class FOTreeBuilder extends DefaultHandler {
* Returns the results of the rendering process. Information includes
* the total number of pages generated and the number of pages per
* page-sequence.
+ *
* @return the results of the rendering process.
*/
public FormattingResults getResults() {
@@ -257,23 +233,17 @@ public class FOTreeBuilder extends DefaultHandler {
}
/**
- * Main DefaultHandler implementation which builds the FO tree.
+ * Main <code>DefaultHandler</code> implementation which builds the FO tree.
*/
private class MainFOHandler extends DefaultHandler {
- /**
- * Current formatting object being handled
- */
+ /** Current formatting object being handled */
protected FONode currentFObj = null;
- /**
- * Current propertyList for the node being handled.
- */
+ /** Current propertyList for the node being handled */
protected PropertyList currentPropertyList;
- /**
- * Current marker nesting-depth
- */
+ /** Current marker nesting-depth */
private int nestedMarkerDepth = 0;
/** {@inheritDoc} */
@@ -298,11 +268,7 @@ public class FOTreeBuilder extends DefaultHandler {
} else { // check that incoming node is valid for currentFObj
if (namespaceURI.equals(FOElementMapping.URI)
|| namespaceURI.equals(ExtensionElementMapping.URI)) {
- try {
- currentFObj.validateChildNode(locator, namespaceURI, localName);
- } catch (ValidationException e) {
- throw e;
- }
+ currentFObj.validateChildNode(locator, namespaceURI, localName);
}
}
@@ -391,12 +357,11 @@ public class FOTreeBuilder extends DefaultHandler {
if (currentFObj.getParent() == null) {
log.debug("endElement for top-level " + currentFObj.getName());
}
+
currentFObj = currentFObj.getParent();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void characters(char[] data, int start, int length)
throws FOPException {
if (currentFObj != null) {
@@ -405,6 +370,7 @@ public class FOTreeBuilder extends DefaultHandler {
}
}
+ /** {@inheritDoc} */
public void endDocument() throws SAXException {
currentFObj = null;
}
diff --git a/src/java/org/apache/fop/fo/flow/table/EmptyGridUnit.java b/src/java/org/apache/fop/fo/flow/table/EmptyGridUnit.java
index 201029ff1..2c910d3f8 100644
--- a/src/java/org/apache/fop/fo/flow/table/EmptyGridUnit.java
+++ b/src/java/org/apache/fop/fo/flow/table/EmptyGridUnit.java
@@ -25,8 +25,6 @@ package org.apache.fop.fo.flow.table;
*/
public class EmptyGridUnit extends GridUnit {
- private TableBody body;
-
/**
* @param table the containing table
* @param row the table-row element this grid unit belongs to (if any)
@@ -57,11 +55,6 @@ public class EmptyGridUnit extends GridUnit {
}
/** {@inheritDoc} */
- public TableBody getBody() {
- return this.body;
- }
-
- /** {@inheritDoc} */
public boolean isLastGridUnitColSpan() {
return true;
}
diff --git a/src/java/org/apache/fop/fo/flow/table/GridUnit.java b/src/java/org/apache/fop/fo/flow/table/GridUnit.java
index 23d1cc001..b9394ff31 100644
--- a/src/java/org/apache/fop/fo/flow/table/GridUnit.java
+++ b/src/java/org/apache/fop/fo/flow/table/GridUnit.java
@@ -19,7 +19,6 @@
package org.apache.fop.fo.flow.table;
-import org.apache.fop.fo.FONode;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground.BorderInfo;
import org.apache.fop.layoutmgr.table.CollapsingBorderModel;
@@ -165,14 +164,6 @@ public class GridUnit {
this.row = row;
}
- public TableBody getBody() {
- FONode node = getCell();
- while (node != null && !(node instanceof TableBody)) {
- node = node.getParent();
- }
- return (TableBody) node;
- }
-
/**
* Returns the before-start grid unit of the cell containing this grid unit.
*
diff --git a/src/java/org/apache/fop/fo/flow/table/PrimaryGridUnit.java b/src/java/org/apache/fop/fo/flow/table/PrimaryGridUnit.java
index 1a47a7dcf..8af896fa2 100644
--- a/src/java/org/apache/fop/fo/flow/table/PrimaryGridUnit.java
+++ b/src/java/org/apache/fop/fo/flow/table/PrimaryGridUnit.java
@@ -23,6 +23,7 @@ import java.util.LinkedList;
import java.util.List;
import org.apache.fop.fo.Constants;
+import org.apache.fop.fo.FONode;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.table.TableCellLayoutManager;
@@ -71,6 +72,19 @@ public class PrimaryGridUnit extends GridUnit {
.getValue() / 2; // TODO
}
+ /**
+ * Returns the fo:table-header/footer/body element containing this cell.
+ *
+ * @return the enclosing table part
+ */
+ public TableBody getTableBody() {
+ FONode node = cell.getParent();
+ if (node instanceof TableRow) {
+ node = node.getParent();
+ }
+ return (TableBody) node;
+ }
+
public TableCellLayoutManager getCellLM() {
assert cellLM != null;
return cellLM;
@@ -224,18 +238,6 @@ public class PrimaryGridUnit extends GridUnit {
return contentLength;
}
- /** @return true if cell/row has an explicit BPD/height */
- public boolean hasBPD() {
- if (!getCell().getBlockProgressionDimension().getOptimum(null).isAuto()) {
- return true;
- }
- if (getRow() != null
- && !getRow().getBlockProgressionDimension().getOptimum(null).isAuto()) {
- return true;
- }
- return false;
- }
-
/**
* Returns the grid units belonging to the same span as this one.
*
diff --git a/src/java/org/apache/fop/fo/properties/CommonHyphenation.java b/src/java/org/apache/fop/fo/properties/CommonHyphenation.java
index 26747c24d..f47ddbe0c 100644
--- a/src/java/org/apache/fop/fo/properties/CommonHyphenation.java
+++ b/src/java/org/apache/fop/fo/properties/CommonHyphenation.java
@@ -21,6 +21,7 @@ package org.apache.fop.fo.properties;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.PropertyList;
import org.apache.fop.fo.expr.PropertyException;
@@ -142,7 +143,7 @@ public final class CommonHyphenation {
FontMetrics metrics = font.getFontMetrics();
if (metrics instanceof Typeface) {
Typeface typeface = (Typeface)metrics;
- if ("SymbolEncoding".equals(typeface.getEncoding())) {
+ if ("SymbolEncoding".equals(typeface.getEncodingName())) {
//SymbolEncoding doesn't have HYPHEN_MINUS, so replace by MINUS_SIGN
} else {
//only warn if the encoding is not SymbolEncoding
@@ -154,7 +155,7 @@ public final class CommonHyphenation {
FontMetrics metrics = font.getFontMetrics();
if (metrics instanceof Typeface) {
Typeface typeface = (Typeface)metrics;
- if ("ZapfDingbatsEncoding".equals(typeface.getEncoding())) {
+ if ("ZapfDingbatsEncoding".equals(typeface.getEncodingName())) {
//ZapfDingbatsEncoding doesn't have HYPHEN_MINUS, so replace by ' '
} else {
//only warn if the encoding is not ZapfDingbatsEncoding
diff --git a/src/java/org/apache/fop/fo/properties/XMLLangShorthandParser.java b/src/java/org/apache/fop/fo/properties/XMLLangShorthandParser.java
index 69ca372e5..5a5cf95c5 100644
--- a/src/java/org/apache/fop/fo/properties/XMLLangShorthandParser.java
+++ b/src/java/org/apache/fop/fo/properties/XMLLangShorthandParser.java
@@ -14,7 +14,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*
-/* $Id:$ */
+/* $Id$ */
package org.apache.fop.fo.properties;
diff --git a/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java b/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java
index 91d13da85..3a2ac5022 100644
--- a/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java
+++ b/src/java/org/apache/fop/fonts/AbstractCodePointMapping.java
@@ -29,7 +29,7 @@ import org.apache.fop.util.CharUtilities;
/**
* Abstract base class for code point mapping classes (1-byte character encodings).
*/
-public class AbstractCodePointMapping {
+public class AbstractCodePointMapping implements SingleByteEncoding {
private String name;
private char[] latin1Map;
@@ -114,19 +114,12 @@ public class AbstractCodePointMapping {
}
}
- /**
- * Returns the encoding's name.
- * @return the name of the encoding
- */
+ /** {@inheritDoc} */
public String getName() {
return this.name;
}
- /**
- * Maps a Unicode character to a code point in the encoding.
- * @param c the Unicode character to map
- * @return the coid point in the encoding or 0 (=.notdef) if not found
- */
+ /** {@inheritDoc} */
public final char mapChar(char c) {
if (c < 256) {
char latin1 = latin1Map[c];
@@ -172,8 +165,8 @@ public class AbstractCodePointMapping {
}
}
- putFallbackCharacter(c, '\0');
- return 0;
+ putFallbackCharacter(c, NOT_FOUND_CODE_POINT);
+ return NOT_FOUND_CODE_POINT;
}
private void putFallbackCharacter(char c, char mapTo) {
@@ -227,11 +220,7 @@ public class AbstractCodePointMapping {
return -1;
}
- /**
- * Returns the array of character names for this encoding.
- * @return the array of character names
- * (unmapped code points are represented by a ".notdef" value)
- */
+ /** {@inheritDoc} */
public String[] getCharNameMap() {
if (this.charNameMap != null) {
String[] copy = new String[this.charNameMap.length];
diff --git a/src/java-1.3/org/apache/fop/svg/GraphicsConfiguration.java b/src/java/org/apache/fop/fonts/Base14Font.java
index 76bb3e4bc..26c11e72b 100644
--- a/src/java-1.3/org/apache/fop/svg/GraphicsConfiguration.java
+++ b/src/java/org/apache/fop/fonts/Base14Font.java
@@ -17,15 +17,11 @@
/* $Id$ */
+package org.apache.fop.fonts;
-package org.apache.fop.svg;
/**
- * Adapter to allow subclassing java.awt.GraphicsConfiguration without
- * compilation errors.
- * The version for JDK 1.3 is just empty.
- *
+ * Base class for all Base 14 fonts.
*/
-abstract public class GraphicsConfiguration extends java.awt.GraphicsConfiguration {
-
+public abstract class Base14Font extends Typeface {
}
diff --git a/src/java/org/apache/fop/fonts/CIDFont.java b/src/java/org/apache/fop/fonts/CIDFont.java
index c554d2165..7216c8f15 100644
--- a/src/java/org/apache/fop/fonts/CIDFont.java
+++ b/src/java/org/apache/fop/fonts/CIDFont.java
@@ -20,31 +20,14 @@
package org.apache.fop.fonts;
//Java
-import java.util.Map;
/**
* Abstract base class for CID fonts.
*/
public abstract class CIDFont extends CustomFont {
- /**
- * usedGlyphs contains orginal, new glyph index
- */
- public Map usedGlyphs = new java.util.HashMap();
-
- /**
- * usedGlyphsIndex contains new glyph, original index
- */
- public Map usedGlyphsIndex = new java.util.HashMap();
- public int usedGlyphsCount = 0;
-
- /**
- * usedCharsIndex contains new glyph, original char
- */
- public Map usedCharsIndex = new java.util.HashMap();
-
- //private PDFWArray warray = new PDFWArray();
- public int width[] = null;
+ /** Contains the character widths for all characters in the font */
+ protected int[] width = null;
// ---- Required ----
/**
@@ -73,6 +56,11 @@ public abstract class CIDFont extends CustomFont {
*/
public abstract int getSupplement();
+ /**
+ * Returns the subset information for this font.
+ * @return the subset information
+ */
+ public abstract CIDSubset getCIDSubset();
// ---- Optional ----
/**
@@ -88,9 +76,4 @@ public abstract class CIDFont extends CustomFont {
return true;
}
- /**
- * Returns a char array containing all Unicode characters that have been accessed.
- * @return a char array with all used Unicode characters
- */
- public abstract char[] getCharsUsed();
-} \ No newline at end of file
+}
diff --git a/src/java/org/apache/fop/fonts/CIDSubset.java b/src/java/org/apache/fop/fonts/CIDSubset.java
new file mode 100644
index 000000000..6bcfc0b71
--- /dev/null
+++ b/src/java/org/apache/fop/fonts/CIDSubset.java
@@ -0,0 +1,177 @@
+/*
+ * 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.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts;
+
+import java.util.BitSet;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.Map;
+
+import org.apache.fop.util.CharUtilities;
+
+//Naming:
+//glyph index: original index of the glyph in the non-subset font (!= unicode index)
+//character selector: index into a set of glyphs. For subset CID fonts, this starts at 0. For
+// non-subset fonts, this is the same as the glyph index.
+//Unicode index: The Unicode codepoint of a character.
+//Glyph name: the Adobe glyph name (as found in Glyphs.java)
+
+/**
+ * Keeps track of the glyphs used in a document. This information is later used to build
+ * a subset of a font.
+ */
+public class CIDSubset {
+
+ /**
+ * usedGlyphs contains orginal, new glyph index (glyph index -> char selector)
+ */
+ private Map/*<Integer, Integer>*/ usedGlyphs = new java.util.HashMap();
+
+ /**
+ * usedGlyphsIndex contains new glyph, original index (char selector -> glyph index)
+ */
+ private Map/*<Integer, Integer>*/ usedGlyphsIndex = new java.util.HashMap();
+ private int usedGlyphsCount = 0;
+
+ /**
+ * usedCharsIndex contains new glyph, original char (char selector -> Unicode)
+ */
+ private Map/*<Integer, Character>*/ usedCharsIndex = new java.util.HashMap();
+
+ public CIDSubset() {
+ }
+
+ /**
+ * Adds the initial 3 glyphs which are the same for all CID subsets.
+ */
+ public void setupFirstThreeGlyphs() {
+ // Make sure that the 3 first glyphs are included
+ usedGlyphs.put(new Integer(0), new Integer(0));
+ usedGlyphsIndex.put(new Integer(0), new Integer(0));
+ usedGlyphsCount++;
+ usedGlyphs.put(new Integer(1), new Integer(1));
+ usedGlyphsIndex.put(new Integer(1), new Integer(1));
+ usedGlyphsCount++;
+ usedGlyphs.put(new Integer(2), new Integer(2));
+ usedGlyphsIndex.put(new Integer(2), new Integer(2));
+ usedGlyphsCount++;
+ }
+
+ /**
+ * Returns the original index of the glyph inside the (non-subset) font's glyph list. This
+ * index can be used to access the character width information, for example.
+ * @param subsetIndex the subset index (character selector) to access the glyph
+ * @return the original index (or -1 if no glyph index is available for the subset index)
+ */
+ public int getGlyphIndexForSubsetIndex(int subsetIndex) {
+ Integer glyphIndex = (Integer)usedGlyphsIndex.get(new Integer(subsetIndex));
+ if (glyphIndex != null) {
+ return glyphIndex.intValue();
+ } else {
+ return -1;
+ }
+ }
+
+ /**
+ * Returns the Unicode value for a subset index (character selector). If there's no such
+ * Unicode value, the "NOT A CHARACTER" (0xFFFF) is returned.
+ * @param subsetIndex the subset index (character selector)
+ * @return the Unicode value or "NOT A CHARACTER" (0xFFFF)
+ */
+ public char getUnicodeForSubsetIndex(int subsetIndex) {
+ Character mapValue = (Character)usedCharsIndex.get(new Integer(subsetIndex));
+ if (mapValue != null) {
+ return mapValue.charValue();
+ } else {
+ return CharUtilities.NOT_A_CHARACTER;
+ }
+ }
+
+ /**
+ * Maps a character to a character selector for a font subset. If the character isn't in the
+ * subset, yet, it is added and a new character selector returned. Otherwise, the already
+ * allocated character selector is returned from the existing map/subset.
+ * @param glyphIndex the glyph index of the character
+ * @param unicode the Unicode index of the character
+ * @return the subset index
+ */
+ public int mapSubsetChar(int glyphIndex, char unicode) {
+ // Reencode to a new subset font or get the reencoded value
+ // IOW, accumulate the accessed characters and build a character map for them
+ Integer subsetCharSelector = (Integer)usedGlyphs.get(new Integer(glyphIndex));
+ if (subsetCharSelector == null) {
+ int selector = usedGlyphsCount;
+ usedGlyphs.put(new Integer(glyphIndex),
+ new Integer(selector));
+ usedGlyphsIndex.put(new Integer(selector),
+ new Integer(glyphIndex));
+ usedCharsIndex.put(new Integer(selector),
+ new Character(unicode));
+ usedGlyphsCount++;
+ return selector;
+ } else {
+ return subsetCharSelector.intValue();
+ }
+ }
+
+ /**
+ * Returns an unmodifiable Map of the font subset. It maps from glyph index to
+ * character selector (i.e. the subset index in this case).
+ * @return Map Map&lt;Integer, Integer&gt; of the font subset
+ */
+ public Map/*<Integer, Integer>*/ getSubsetGlyphs() {
+ return Collections.unmodifiableMap(this.usedGlyphs);
+ }
+
+ /**
+ * Returns a char array containing all Unicode characters that are in the subset.
+ * @return a char array with all used Unicode characters
+ */
+ public char[] getSubsetChars() {
+ char[] charArray = new char[usedGlyphsCount];
+ for (int i = 0; i < usedGlyphsCount; i++) {
+ charArray[i] = getUnicodeForSubsetIndex(i);
+ }
+ return charArray;
+ }
+
+ /**
+ * Returns the number of glyphs in the subset.
+ * @return the number of glyphs in the subset
+ */
+ public int getSubsetSize() {
+ return this.usedGlyphsCount;
+ }
+
+ /**
+ * Returns a BitSet with bits set for each available glyph index.
+ * @return a BitSet indicating available glyph indices
+ */
+ public BitSet getGlyphIndexBitSet() {
+ BitSet bitset = new BitSet();
+ Iterator iter = usedGlyphs.keySet().iterator();
+ while (iter.hasNext()) {
+ Integer cid = (Integer)iter.next();
+ bitset.set(cid.intValue());
+ }
+ return bitset;
+ }
+
+}
diff --git a/src/java/org/apache/fop/fonts/Font.java b/src/java/org/apache/fop/fonts/Font.java
index e123513c2..ff71434c6 100644
--- a/src/java/org/apache/fop/fonts/Font.java
+++ b/src/java/org/apache/fop/fonts/Font.java
@@ -199,7 +199,7 @@ public class Font {
// Use default CodePointMapping
char d = CodePointMapping.getMapping("WinAnsiEncoding").mapChar(c);
- if (d != 0) {
+ if (d != SingleByteEncoding.NOT_FOUND_CODE_POINT) {
c = d;
} else {
log.warn("Glyph " + (int) c + " not available in font " + fontName);
diff --git a/src/java/org/apache/fop/fonts/LazyFont.java b/src/java/org/apache/fop/fonts/LazyFont.java
index e6ed7e881..8997069d4 100644
--- a/src/java/org/apache/fop/fonts/LazyFont.java
+++ b/src/java/org/apache/fop/fonts/LazyFont.java
@@ -64,11 +64,10 @@ public class LazyFont extends Typeface implements FontDescriptor {
this.resolver = resolver;
}
- /**
- * String representation of LazyFont
- */
+ /** {@inheritDoc} */
public String toString() {
- return ( "metrics-url=" + metricsFileName + ", embed-url=" + fontEmbedPath + ", kerning=" + useKerning );
+ return ( "metrics-url=" + metricsFileName + ", embed-url=" + fontEmbedPath
+ + ", kerning=" + useKerning );
}
private void load(boolean fail) {
@@ -80,8 +79,9 @@ public class LazyFont extends Typeface implements FontDescriptor {
if (resolver != null) {
Source source = resolver.resolve(metricsFileName);
if (source == null) {
- String err = "Cannot load font: failed to create Source from metrics file "
- + metricsFileName;
+ String err
+ = "Cannot load font: failed to create Source from metrics file "
+ + metricsFileName;
if (fail) {
throw new RuntimeException(err);
} else {
@@ -112,8 +112,8 @@ public class LazyFont extends Typeface implements FontDescriptor {
src.setSystemId(source.getSystemId());
reader = new FontReader(src);
} else {
- reader
- = new FontReader(new InputSource(new URL(metricsFileName).openStream()));
+ reader = new FontReader(new InputSource(
+ new URL(metricsFileName).openStream()));
}
reader.setKerningEnabled(useKerning);
reader.setFontEmbedPath(fontEmbedPath);
@@ -153,12 +153,10 @@ public class LazyFont extends Typeface implements FontDescriptor {
}
// ---- Font ----
- /**
- * {@inheritDoc}
- */
- public String getEncoding() {
+ /** {@inheritDoc} */
+ public String getEncodingName() {
load(true);
- return realFont.getEncoding();
+ return realFont.getEncodingName();
}
/**
diff --git a/src/java/org/apache/fop/fonts/MultiByteFont.java b/src/java/org/apache/fop/fonts/MultiByteFont.java
index e40c40985..5849379bd 100644
--- a/src/java/org/apache/fop/fonts/MultiByteFont.java
+++ b/src/java/org/apache/fop/fonts/MultiByteFont.java
@@ -39,6 +39,9 @@ public class MultiByteFont extends CIDFont {
private String namePrefix = null; // Quasi unique prefix
+ private CIDSubset subset = new CIDSubset();
+
+ /** A map from Unicode indices to glyph indices */
private BFEntry[] bfentries = null;
/**
@@ -46,15 +49,7 @@ public class MultiByteFont extends CIDFont {
*/
public MultiByteFont() {
// Make sure that the 3 first glyphs are included
- usedGlyphs.put(new Integer(0), new Integer(0));
- usedGlyphsIndex.put(new Integer(0), new Integer(0));
- usedGlyphsCount++;
- usedGlyphs.put(new Integer(1), new Integer(1));
- usedGlyphsIndex.put(new Integer(1), new Integer(1));
- usedGlyphsCount++;
- usedGlyphs.put(new Integer(2), new Integer(2));
- usedGlyphsIndex.put(new Integer(2), new Integer(2));
- usedGlyphsCount++;
+ subset.setupFirstThreeGlyphs();
// Create a quasiunique prefix for fontname
synchronized (this.getClass()) {
@@ -77,37 +72,27 @@ public class MultiByteFont extends CIDFont {
setFontType(FontType.TYPE0);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public int getDefaultWidth() {
return defaultWidth;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public String getRegistry() {
return "Adobe";
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public String getOrdering() {
return "UCS";
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public int getSupplement() {
return 0;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public CIDFontType getCIDType() {
return cidType;
}
@@ -133,68 +118,47 @@ public class MultiByteFont extends CIDFont {
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean isEmbeddable() {
return !(getEmbedFileName() == null && getEmbedResourceName() == null);
}
- /**
- * {@inheritDoc}
- */
- public String getEncoding() {
+ /** {@inheritDoc} */
+ public CIDSubset getCIDSubset() {
+ return this.subset;
+ }
+
+ /** {@inheritDoc} */
+ public String getEncodingName() {
return encoding;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public int getWidth(int i, int size) {
if (isEmbeddable()) {
- Integer idx = (Integer)usedGlyphsIndex.get(new Integer(i));
- return size * width[idx.intValue()];
+ int glyphIndex = subset.getGlyphIndexForSubsetIndex(i);
+ return size * width[glyphIndex];
} else {
return size * width[i];
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public int[] getWidths() {
int[] arr = new int[width.length];
System.arraycopy(width, 0, arr, 0, width.length - 1);
- /*
- for (int i = 0; i < arr.length; i++)
- arr[i] *= size;
- */
return arr;
}
/**
- * Remaps a codepoint based.
- * @param i codepoint to remap
- * @return new codepoint
+ * Returns the glyph index for a Unicode character. The method returns 0 if there's no
+ * such glyph in the character map.
+ * @param c the Unicode character index
+ * @return the glyph index (or 0 if the glyph is not available)
*/
-/* unused
- public Integer reMap(Integer i) {
- if (isEmbeddable()) {
- Integer ret = (Integer)usedGlyphsIndex.get(i);
- if (ret == null) {
- ret = i;
- }
- return ret;
- } else {
- return i;
- }
-
- }
-*/
-
private int findGlyphIndex(char c) {
int idx = (int)c;
- int retIdx = 0;
+ int retIdx = 0; //.notdef
for (int i = 0; (i < bfentries.length) && retIdx == 0; i++) {
if (bfentries[i].getUnicodeStart() <= idx
@@ -208,48 +172,30 @@ public class MultiByteFont extends CIDFont {
return retIdx;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public char mapChar(char c) {
notifyMapOperation();
- int retIdx = findGlyphIndex(c);
+ int glyphIndex = findGlyphIndex(c);
if (isEmbeddable()) {
- // Reencode to a new subset font or get
- // the reencoded value
- Integer newIdx = (Integer)usedGlyphs.get(new Integer(retIdx));
- if (newIdx == null) {
- usedGlyphs.put(new Integer(retIdx),
- new Integer(usedGlyphsCount));
- usedGlyphsIndex.put(new Integer(usedGlyphsCount),
- new Integer(retIdx));
- usedCharsIndex.put(new Integer(usedGlyphsCount),
- new Integer((int) c));
- retIdx = usedGlyphsCount;
- usedGlyphsCount++;
- } else {
- retIdx = newIdx.intValue();
- }
+ glyphIndex = subset.mapSubsetChar(glyphIndex, c);
}
- return (char)retIdx;
+ return (char)glyphIndex;
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean hasChar(char c) {
return (findGlyphIndex(c) > 0);
}
-
/**
- * Sets the bfentries.
- * @param bfentries The bfentries to set
+ * Sets the array of BFEntry instances which constitutes the Unicode to glyph index map for
+ * a font. ("BF" means "base font")
+ * @param entries the Unicode to glyph index map
*/
- public void setBFEntries(BFEntry[] bfentries) {
- this.bfentries = bfentries;
+ public void setBFEntries(BFEntry[] entries) {
+ this.bfentries = entries;
}
/**
@@ -277,17 +223,6 @@ public class MultiByteFont extends CIDFont {
}
/**
- * Adds a new CID width entry to the font.
- * @param cidWidthIndex index
- * @param wds array of widths
- */
- /*
- public void addCIDWidthEntry(int cidWidthIndex, int[] wds) {
- this.warray.addEntry(cidWidthIndex, wds);
- }*/
-
-
- /**
* Sets the width array.
* @param wds array of widths.
*/
@@ -300,30 +235,15 @@ public class MultiByteFont extends CIDFont {
* @return Map Map of used Glyphs
*/
public Map getUsedGlyphs() {
- return usedGlyphs;
+ return subset.getSubsetGlyphs();
}
- /** The invalid Unicode character, suitable as a return value in methods
- * that need to return an invalid character. */
- public static final char INVALID_UNICODE_CHAR = 0xFFFF;
-
/** {@inheritDoc} */
public char[] getCharsUsed() {
if (!isEmbeddable()) {
return null;
}
- char[] charArray = new char[usedGlyphsCount];
- for (int i = 0; i < usedGlyphsCount; i++) {
- Integer mapValue = (Integer)usedCharsIndex.get(new Integer(i));
- if (mapValue != null) {
- char arrayItem = (char) mapValue.intValue();
- charArray[i] = arrayItem;
- }
- else {
- charArray[i] = INVALID_UNICODE_CHAR;
- }
- }
- return charArray;
+ return subset.getSubsetChars();
}
}
diff --git a/src/java/org/apache/fop/fonts/NamedCharacter.java b/src/java/org/apache/fop/fonts/NamedCharacter.java
new file mode 100644
index 000000000..2c8007ba1
--- /dev/null
+++ b/src/java/org/apache/fop/fonts/NamedCharacter.java
@@ -0,0 +1,142 @@
+/*
+ * 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.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts;
+
+import org.apache.xmlgraphics.fonts.Glyphs;
+
+import org.apache.fop.util.CharUtilities;
+
+/**
+ * Represents an named character with character name (from the Adobe glyph list) and a Unicode
+ * sequence that this character represents.
+ */
+public class NamedCharacter {
+
+ private String charName;
+ private String unicodeSequence;
+
+ /**
+ * Main constructor.
+ * @param charName the character name
+ * @param unicodeSequence the Unicode sequence associated with this character
+ */
+ public NamedCharacter(String charName, String unicodeSequence) {
+ if (charName == null) {
+ throw new NullPointerException("charName must not be null");
+ }
+ this.charName = charName;
+ if (unicodeSequence != null) {
+ this.unicodeSequence = unicodeSequence;
+ } else {
+ this.unicodeSequence = Glyphs.getUnicodeSequenceForGlyphName(charName);
+ }
+ }
+
+ /**
+ * Simple constructor.
+ * @param charName the character name
+ */
+ public NamedCharacter(String charName) {
+ this(charName, null);
+ }
+
+ /** {@inheritDoc} */
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((charName == null) ? 0 : charName.hashCode());
+ return result;
+ }
+
+ /** {@inheritDoc} */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (getClass() != obj.getClass()) {
+ return false;
+ }
+ final NamedCharacter other = (NamedCharacter)obj;
+ return charName.equals(other.charName);
+ }
+
+ /**
+ * Returns the character name (as defined by the Adobe glyph list).
+ * @return the character name
+ */
+ public String getName() {
+ return this.charName;
+ }
+
+ /**
+ * Returns the Unicode sequence associated with this character.
+ * @return the Unicode sequence (or null if no Unicode sequence is associated)
+ */
+ public String getUnicodeSequence() {
+ return this.unicodeSequence;
+ }
+
+ /**
+ * Indicates whether a single Unicode value is associated with this character.
+ * @return true if exactly one Unicode value is associated with this character, false otherwise
+ */
+ public boolean hasSingleUnicodeValue() {
+ return (this.unicodeSequence != null && this.unicodeSequence.length() == 1);
+ }
+
+ /**
+ * Returns the single Unicode value associated with this named character. Check
+ * {@link #hasSingleUnicodeValue()} before you call this method because an
+ * IllegalStateException is thrown is a Unicode sequence with more than one character is
+ * associated with this character.
+ * @return the single Unicode value (or FFFF ("NOT A CHARACTER") if no Unicode value is
+ * available)
+ * @throws IllegalStateException if a Unicode sequence with more than one value is associated
+ * with the named character
+ */
+ public char getSingleUnicodeValue() throws IllegalStateException {
+ if (this.unicodeSequence == null) {
+ return CharUtilities.NOT_A_CHARACTER;
+ }
+ if (this.unicodeSequence.length() > 1) {
+ throw new IllegalStateException("getSingleUnicodeValue() may not be called for a"
+ + " named character that has more than one Unicode value (a sequence)"
+ + " associated with the named character!");
+ }
+ return this.unicodeSequence.charAt(0);
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ StringBuffer sb = new StringBuffer(this.unicodeSequence);
+ sb.append(" (");
+ if (this.unicodeSequence != null) {
+ for (int i = 0, c = this.unicodeSequence.length(); i < c; i++) {
+ sb.append("0x").append(Integer.toHexString(this.unicodeSequence.charAt(0)));
+ }
+ sb.append(", ");
+ }
+ sb.append(getName()).append(')');
+ return sb.toString();
+ }
+} \ No newline at end of file
diff --git a/src/java/org/apache/fop/fonts/SimpleSingleByteEncoding.java b/src/java/org/apache/fop/fonts/SimpleSingleByteEncoding.java
new file mode 100644
index 000000000..a5ba1a33b
--- /dev/null
+++ b/src/java/org/apache/fop/fonts/SimpleSingleByteEncoding.java
@@ -0,0 +1,145 @@
+/*
+ * 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.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.fonts;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+import org.apache.xmlgraphics.fonts.Glyphs;
+
+/**
+ * A simple implementation of the OneByteEncoding mostly used for encodings that are constructed
+ * on-the-fly.
+ */
+public class SimpleSingleByteEncoding implements SingleByteEncoding {
+
+ private String name;
+ private List mapping = new java.util.ArrayList();
+ //List<NamedCharacter>
+ private Map charMap = new java.util.HashMap();
+ //Map<Character(Unicode), Character(code point)>
+
+ /**
+ * Main constructor.
+ * @param name the encoding's name
+ */
+ public SimpleSingleByteEncoding(String name) {
+ this.name = name;
+ }
+
+ /** {@inheritDoc} */
+ public String getName() {
+ return this.name;
+ }
+
+ /** {@inheritDoc} */
+ public char mapChar(char c) {
+ Character nc = (Character)charMap.get(new Character(c));
+ if (nc != null) {
+ return nc.charValue();
+ }
+ return NOT_FOUND_CODE_POINT;
+ }
+
+ /** {@inheritDoc} */
+ public String[] getCharNameMap() {
+ String[] map = new String[getSize()];
+ Arrays.fill(map, Glyphs.NOTDEF);
+ for (int i = getFirstChar(); i <= getLastChar(); i++) {
+ NamedCharacter ch = (NamedCharacter)this.mapping.get(i - 1);
+ map[i] = ch.getName();
+ }
+ return map;
+ }
+
+ /**
+ * Returns the index of the first defined character.
+ * @return the index of the first defined character (always 1 for this class)
+ */
+ public int getFirstChar() {
+ return 1;
+ }
+
+ /**
+ * Returns the index of the last defined character.
+ * @return the index of the last defined character
+ */
+ public int getLastChar() {
+ return this.mapping.size();
+ }
+
+ /**
+ * Returns the number of characters defined by this encoding.
+ * @return the number of characters
+ */
+ public int getSize() {
+ return this.mapping.size() + 1;
+ }
+
+ /**
+ * Indicates whether the encoding is full (with 256 code points).
+ * @return true if the encoding is full
+ */
+ public boolean isFull() {
+ return (getSize() == 256);
+ }
+
+ /**
+ * Adds a new character to the encoding.
+ * @param ch the named character
+ * @return the code point assigned to the character
+ */
+ public char addCharacter(NamedCharacter ch) {
+ if (!ch.hasSingleUnicodeValue()) {
+ throw new IllegalArgumentException("Only NamedCharacters with a single Unicode value"
+ + " are currently supported!");
+ }
+ if (isFull()) {
+ throw new IllegalStateException("Encoding is full!");
+ }
+ char newSlot = (char)(getLastChar() + 1);
+ this.mapping.add(ch);
+ this.charMap.put(new Character(ch.getSingleUnicodeValue()), new Character(newSlot));
+ return newSlot;
+ }
+
+ /**
+ * Returns the named character at a given code point in the encoding.
+ * @param codePoint the code point of the character
+ * @return the NamedCharacter (or null if no character is at this position)
+ */
+ public NamedCharacter getCharacterForIndex(int codePoint) {
+ if (codePoint < 0 || codePoint > 255) {
+ throw new IllegalArgumentException("codePoint must be between 0 and 255");
+ }
+ if (codePoint <= getLastChar()) {
+ return (NamedCharacter)this.mapping.get(codePoint - 1);
+ } else {
+ return null;
+ }
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return getName() + " (" + getSize() + " chars)";
+ }
+
+}
diff --git a/src/java/org/apache/fop/image/RegisterableImageProvider.java b/src/java/org/apache/fop/fonts/SingleByteEncoding.java
index fd79ebd91..ac7241e24 100644
--- a/src/java/org/apache/fop/image/RegisterableImageProvider.java
+++ b/src/java/org/apache/fop/fonts/SingleByteEncoding.java
@@ -16,34 +16,35 @@
*/
/* $Id$ */
-
-package org.apache.fop.image;
+
+package org.apache.fop.fonts;
/**
- * This interface is used to dynamically register FopImage implementations.
- * <p>
- * NOTE: Please don't rely on this interface too much. It is a temporary measure
- * until the whole image package can be redesigned. The redesign will likely
- * provide a different mechanism to dynamically register new implementations.
+ * The interface defines a 1-byte character encoding (with 256 characters).
*/
-public interface RegisterableImageProvider {
+public interface SingleByteEncoding {
+
+ /** Code point that is used if no code point for a specific character has been found. */
+ char NOT_FOUND_CODE_POINT = '\0';
/**
- * Returns the MIME type the implementation supports.
- * @return the MIME type
- */
- String getSupportedMimeType();
-
- /**
- * Returns the name of the implementation.
- * @return the name
+ * Returns the encoding's name.
+ * @return the name of the encoding
*/
String getName();
-
+
/**
- * Returns the fully qualified class name for the implementing class.
- * @return the class name
+ * Maps a Unicode character to a code point in the encoding.
+ * @param c the Unicode character to map
+ * @return the code point in the encoding or 0 (=.notdef) if not found
*/
- String getClassName();
+ char mapChar(char c);
+ /**
+ * Returns the array of character names for this encoding.
+ * @return the array of character names
+ * (unmapped code points are represented by a ".notdef" value)
+ */
+ String[] getCharNameMap();
+
}
diff --git a/src/java/org/apache/fop/fonts/SingleByteFont.java b/src/java/org/apache/fop/fonts/SingleByteFont.java
index 814d05a2c..ac12b7615 100644
--- a/src/java/org/apache/fop/fonts/SingleByteFont.java
+++ b/src/java/org/apache/fop/fonts/SingleByteFont.java
@@ -19,6 +19,8 @@
package org.apache.fop.fonts;
+import java.util.List;
+import java.util.Map;
import java.util.Set;
import org.apache.commons.logging.Log;
@@ -31,14 +33,21 @@ import org.apache.xmlgraphics.fonts.Glyphs;
*/
public class SingleByteFont extends CustomFont {
+ /** Code point that is used if no code point for a specific character has been found. */
+ public static final char NOT_FOUND = '#';
+
/** logger */
private static Log log = LogFactory.getLog(SingleByteFont.class);
- private CodePointMapping mapping;
+ private SingleByteEncoding mapping;
private int[] width = null;
private Set warnedChars;
+
+ private Map unencodedCharacters;
+ //Map<Character, UnencodedCharacter>
+ private List additionalEncodings;
/**
* Main constructor.
@@ -54,7 +63,7 @@ public class SingleByteFont extends CustomFont {
}
/** {@inheritDoc} */
- public String getEncoding() {
+ public String getEncodingName() {
return this.mapping.getName();
}
@@ -62,18 +71,28 @@ public class SingleByteFont extends CustomFont {
* Returns the code point mapping (encoding) of this font.
* @return the code point mapping
*/
- public CodePointMapping getCodePointMapping() {
+ public SingleByteEncoding getEncoding() {
return this.mapping;
}
/** {@inheritDoc} */
public int getWidth(int i, int size) {
- int idx = i - getFirstChar();
- if (idx >= 0 && idx < width.length) {
- return size * width[i - getFirstChar()];
- } else {
- return 0;
+ if (i < 256) {
+ int idx = i - getFirstChar();
+ if (idx >= 0 && idx < width.length) {
+ return size * width[i - getFirstChar()];
+ }
+ } else if (this.additionalEncodings != null) {
+ int encodingIndex = (i / 256) - 1;
+ SimpleSingleByteEncoding encoding = getAdditionalEncoding(encodingIndex);
+ int codePoint = i % 256;
+ NamedCharacter nc = encoding.getCharacterForIndex(codePoint);
+ UnencodedCharacter uc
+ = (UnencodedCharacter)this.unencodedCharacters.get(
+ new Character(nc.getSingleUnicodeValue()));
+ return size * uc.getWidth();
}
+ return 0;
}
/** {@inheritDoc} */
@@ -87,30 +106,80 @@ public class SingleByteFont extends CustomFont {
public char mapChar(char c) {
notifyMapOperation();
char d = mapping.mapChar(c);
- if (d != 0) {
+ if (d != SingleByteEncoding.NOT_FOUND_CODE_POINT) {
return d;
- } else {
- Character ch = new Character(c);
- if (warnedChars == null) {
- warnedChars = new java.util.HashSet();
+ }
+
+ //Check unencoded characters which are available in the font by character name
+ d = mapUnencodedChar(c);
+ if (d != SingleByteEncoding.NOT_FOUND_CODE_POINT) {
+ return d;
+ }
+
+ //Give up, character is not available
+ Character ch = new Character(c);
+ if (warnedChars == null) {
+ warnedChars = new java.util.HashSet();
+ }
+ if (warnedChars.size() < 8 && !warnedChars.contains(ch)) {
+ warnedChars.add(ch);
+ if (warnedChars.size() == 8) {
+ log.warn("Many requested glyphs are not available in font " + getFontName());
+ } else {
+ log.warn("Glyph " + (int)c + " (0x" + Integer.toHexString(c)
+ + ", " + Glyphs.charToGlyphName(c)
+ + ") not available in font " + getFontName());
}
- if (warnedChars.size() < 8 && !warnedChars.contains(ch)) {
- warnedChars.add(ch);
- if (warnedChars.size() == 8) {
- log.warn("Many requested glyphs are not available in font " + getFontName());
- } else {
- log.warn("Glyph " + (int)c + " (0x" + Integer.toHexString(c)
- + ", " + Glyphs.charToGlyphName(c)
- + ") not available in font " + getFontName());
+ }
+ return NOT_FOUND;
+ }
+
+ private char mapUnencodedChar(char ch) {
+ if (this.unencodedCharacters != null) {
+ UnencodedCharacter unencoded
+ = (UnencodedCharacter)this.unencodedCharacters.get(new Character(ch));
+ if (unencoded != null) {
+ if (this.additionalEncodings == null) {
+ this.additionalEncodings = new java.util.ArrayList();
+ }
+ SimpleSingleByteEncoding encoding = null;
+ char mappedStart = 0;
+ int additionalsCount = this.additionalEncodings.size();
+ for (int i = 0; i < additionalsCount; i++) {
+ mappedStart += 256;
+ encoding = getAdditionalEncoding(i);
+ char alt = encoding.mapChar(ch);
+ if (alt != 0) {
+ return (char)(mappedStart + alt);
+ }
+ }
+ if (encoding != null && encoding.isFull()) {
+ encoding = null;
}
+ if (encoding == null) {
+ encoding = new SimpleSingleByteEncoding(
+ getFontName() + "EncodingSupp" + (additionalsCount + 1));
+ this.additionalEncodings.add(encoding);
+ mappedStart += 256;
+ }
+ return (char)(mappedStart + encoding.addCharacter(unencoded.getCharacter()));
}
- return '#';
}
+ return 0;
}
/** {@inheritDoc} */
public boolean hasChar(char c) {
- return (mapping.mapChar(c) > 0);
+ char d = mapping.mapChar(c);
+ if (d != SingleByteEncoding.NOT_FOUND_CODE_POINT) {
+ return true;
+ }
+ //Check unencoded characters which are available in the font by character name
+ d = mapUnencodedChar(c);
+ if (d != SingleByteEncoding.NOT_FOUND_CODE_POINT) {
+ return true;
+ }
+ return false;
}
/* ---- single byte font specific setters --- */
@@ -146,13 +215,106 @@ public class SingleByteFont extends CustomFont {
/**
* Sets a width for a character.
* @param index index of the character
- * @param width the width of the character
+ * @param w the width of the character
*/
- public void setWidth(int index, int width) {
+ public void setWidth(int index, int w) {
if (this.width == null) {
this.width = new int[getLastChar() - getFirstChar() + 1];
}
- this.width[index - getFirstChar()] = width;
+ this.width[index - getFirstChar()] = w;
+ }
+
+ /**
+ * Adds an unencoded character (one that is not supported by the primary encoding).
+ * @param ch the named character
+ * @param width the width of the character
+ */
+ public void addUnencodedCharacter(NamedCharacter ch, int width) {
+ if (this.unencodedCharacters == null) {
+ this.unencodedCharacters = new java.util.HashMap();
+ }
+ if (ch.hasSingleUnicodeValue()) {
+ UnencodedCharacter uc = new UnencodedCharacter(ch, width);
+ this.unencodedCharacters.put(new Character(ch.getSingleUnicodeValue()), uc);
+ } else {
+ //Cannot deal with unicode sequences, so ignore this character
+ }
+ }
+
+ /**
+ * Indicates whether the encoding has additional encodings besides the primary encoding.
+ * @return true if there are additional encodings.
+ */
+ public boolean hasAdditionalEncodings() {
+ return (this.additionalEncodings != null) && (this.additionalEncodings.size() > 0);
+ }
+
+ /**
+ * Returns the number of additional encodings this single-byte font maintains.
+ * @return the number of additional encodings
+ */
+ public int getAdditionalEncodingCount() {
+ if (hasAdditionalEncodings()) {
+ return this.additionalEncodings.size();
+ } else {
+ return 0;
+ }
+ }
+
+ /**
+ * Returns an additional encoding.
+ * @param index the index of the additional encoding
+ * @return the additional encoding
+ * @throws IndexOutOfBoundsException if the index is out of bounds
+ */
+ public SimpleSingleByteEncoding getAdditionalEncoding(int index)
+ throws IndexOutOfBoundsException {
+ if (hasAdditionalEncodings()) {
+ return (SimpleSingleByteEncoding)this.additionalEncodings.get(index);
+ } else {
+ throw new IndexOutOfBoundsException("No additional encodings available");
+ }
+ }
+
+ /**
+ * Returns an array with the widths for an additional encoding.
+ * @param index the index of the additional encoding
+ * @return the width array
+ */
+ public int[] getAdditionalWidths(int index) {
+ SimpleSingleByteEncoding enc = getAdditionalEncoding(index);
+ int[] arr = new int[enc.getLastChar() - enc.getFirstChar() + 1];
+ for (int i = 0, c = arr.length; i < c; i++) {
+ NamedCharacter nc = enc.getCharacterForIndex(enc.getFirstChar() + i);
+ UnencodedCharacter uc = (UnencodedCharacter)this.unencodedCharacters.get(
+ new Character(nc.getSingleUnicodeValue()));
+ arr[i] = uc.getWidth();
+ }
+ return arr;
+ }
+
+ private static final class UnencodedCharacter {
+
+ private NamedCharacter character;
+ private int width;
+
+ public UnencodedCharacter(NamedCharacter character, int width) {
+ this.character = character;
+ this.width = width;
+ }
+
+ public NamedCharacter getCharacter() {
+ return this.character;
+ }
+
+ public int getWidth() {
+ return this.width;
+ }
+
+ /** {@inheritDoc} */
+ public String toString() {
+ return getCharacter().toString();
+ }
}
}
diff --git a/src/java/org/apache/fop/fonts/Typeface.java b/src/java/org/apache/fop/fonts/Typeface.java
index 3bc3be772..173d2e8a3 100644
--- a/src/java/org/apache/fop/fonts/Typeface.java
+++ b/src/java/org/apache/fop/fonts/Typeface.java
@@ -19,11 +19,8 @@
package org.apache.fop.fonts;
-// FOP
-
-
/**
- * Base class for PDF font classes
+ * Base class for font classes
*/
public abstract class Typeface implements FontMetrics {
@@ -37,7 +34,7 @@ public abstract class Typeface implements FontMetrics {
* Get the encoding of the font.
* @return the encoding
*/
- public abstract String getEncoding();
+ public abstract String getEncodingName();
/**
* Map a Unicode character to a code point in the font.
diff --git a/src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java b/src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java
index 99fd10315..d593c4544 100644
--- a/src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java
+++ b/src/java/org/apache/fop/fonts/truetype/TTFSubSetFile.java
@@ -592,8 +592,8 @@ public class TTFSubSetFile extends TTFFile {
+ mtxTab[origIndex.intValue()].getOffset()) < 0) {
// origIndex is a composite glyph
allComposites.put(origIndex, glyphs.get(origIndex));
- List composites =
- getIncludedGlyphs(in, (int)entry.getOffset(),
+ List composites
+ = getIncludedGlyphs(in, (int)entry.getOffset(),
origIndex);
// Iterate through all composites pointed to
@@ -651,6 +651,9 @@ public class TTFSubSetFile extends TTFFile {
if (!checkTTC(in, name)) {
throw new IOException("Failed to read font");
}
+
+ //Copy the Map as we're going to modify it
+ Map subsetGlyphs = new java.util.HashMap(glyphs);
output = new byte[in.getFileSize()];
@@ -661,14 +664,14 @@ public class TTFSubSetFile extends TTFFile {
readHorizontalMetrics(in);
readIndexToLocation(in);
- scanGlyphs(in, glyphs);
+ scanGlyphs(in, subsetGlyphs);
createDirectory(); // Create the TrueType header and directory
createHead(in);
- createHhea(in, glyphs.size()); // Create the hhea table
- createHmtx(in, glyphs); // Create hmtx table
- createMaxp(in, glyphs.size()); // copy the maxp table
+ createHhea(in, subsetGlyphs.size()); // Create the hhea table
+ createHmtx(in, subsetGlyphs); // Create hmtx table
+ createMaxp(in, subsetGlyphs.size()); // copy the maxp table
boolean optionalTableFound;
optionalTableFound = createCvt(in); // copy the cvt table
@@ -689,8 +692,8 @@ public class TTFSubSetFile extends TTFFile {
log.debug("TrueType: prep table not present. Skipped.");
}
- createLoca(glyphs.size()); // create empty loca table
- createGlyf(in, glyphs); //create glyf table and update loca table
+ createLoca(subsetGlyphs.size()); // create empty loca table
+ createGlyf(in, subsetGlyphs); //create glyf table and update loca table
pad4();
createCheckSumAdjustment();
diff --git a/src/java/org/apache/fop/fonts/type1/AFMCharMetrics.java b/src/java/org/apache/fop/fonts/type1/AFMCharMetrics.java
index 1b7f814b8..758078af4 100644
--- a/src/java/org/apache/fop/fonts/type1/AFMCharMetrics.java
+++ b/src/java/org/apache/fop/fonts/type1/AFMCharMetrics.java
@@ -21,6 +21,8 @@ package org.apache.fop.fonts.type1;
import java.awt.geom.RectangularShape;
+import org.apache.fop.fonts.NamedCharacter;
+
/**
* Holds the metrics of a single character from an AFM file.
@@ -28,8 +30,7 @@ import java.awt.geom.RectangularShape;
public class AFMCharMetrics {
private int charCode = -1;
- private String unicodeSequence;
- private String charName;
+ private NamedCharacter character;
private double widthX;
private double widthY;
private RectangularShape bBox;
@@ -59,36 +60,45 @@ public class AFMCharMetrics {
}
/**
- * Returns the Unicode sequence for this character.
- * @return the Unicode characters
- * (or null if no such Unicode sequence exists for this character)
+ * Returns the named character represented by this instance.
+ * @return the named character (or null if no named character is associated)
*/
- public String getUnicodeSequence() {
- return this.unicodeSequence;
+ public NamedCharacter getCharacter() {
+ return this.character;
+ }
+
+ /**
+ * Sets the named character represented by this instance.
+ * @param ch the named character
+ */
+ public void setCharacter(NamedCharacter ch) {
+ this.character = ch;
}
/**
- * Sets the Unicode sequence for this character.
+ * Sets the named character represented by this instance.
+ * @param charName the character name (as defined in the Adobe glyph list)
* @param unicodeSequence the Unicode sequence
*/
- public void setUnicodeSequence(String unicodeSequence) {
- this.unicodeSequence = unicodeSequence;
+ public void setCharacter(String charName, String unicodeSequence) {
+ setCharacter(new NamedCharacter(charName, unicodeSequence));
}
/**
- * Returns the PostScript character name.
- * @return the charName
+ * Returns the Unicode sequence for this character.
+ * @return the Unicode characters
+ * (or null if no such Unicode sequence exists for this character)
*/
- public String getCharName() {
- return charName;
+ public String getUnicodeSequence() {
+ return (getCharacter() != null ? getCharacter().getUnicodeSequence() : null);
}
/**
- * Sets the PostScript character name.
- * @param charName the charName to set
+ * Returns the PostScript character name.
+ * @return the charName (or null if no character name is associated)
*/
- public void setCharName(String charName) {
- this.charName = charName;
+ public String getCharName() {
+ return (getCharacter() != null ? getCharacter().getName() : null);
}
/**
diff --git a/src/java/org/apache/fop/fonts/type1/AFMFile.java b/src/java/org/apache/fop/fonts/type1/AFMFile.java
index b51485485..6a1973843 100644
--- a/src/java/org/apache/fop/fonts/type1/AFMFile.java
+++ b/src/java/org/apache/fop/fonts/type1/AFMFile.java
@@ -26,7 +26,6 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import org.apache.xmlgraphics.fonts.Glyphs;
import org.apache.xmlgraphics.java2d.Dimension2DDouble;
/**
@@ -315,15 +314,8 @@ public class AFMFile {
public void addCharMetrics(AFMCharMetrics metrics) {
String name = metrics.getCharName();
if (metrics.getUnicodeSequence() == null) {
- if (name != null) {
- String u = Glyphs.getUnicodeSequenceForGlyphName(metrics.getCharName());
- if (u != null) {
- metrics.setUnicodeSequence(u);
- }
- } else {
- //Ignore as no Unicode assignment is possible
- return;
- }
+ //Ignore as no Unicode assignment is possible
+ return;
}
this.charMetrics.add(metrics);
if (name != null) {
diff --git a/src/java/org/apache/fop/fonts/type1/AFMParser.java b/src/java/org/apache/fop/fonts/type1/AFMParser.java
index bb7ea3d30..2e63ea729 100644
--- a/src/java/org/apache/fop/fonts/type1/AFMParser.java
+++ b/src/java/org/apache/fop/fonts/type1/AFMParser.java
@@ -31,6 +31,8 @@ import java.util.Stack;
import org.apache.commons.io.IOUtils;
+import org.apache.fop.fonts.NamedCharacter;
+
/**
* Parses the contents of a Type 1 AFM font metrics file into an object structure ({@link AFMFile}).
*/
@@ -126,7 +128,7 @@ public class AFMParser {
VALUE_PARSERS.put(W, new NotImplementedYet(W));
VALUE_PARSERS.put(W0, new NotImplementedYet(W0));
VALUE_PARSERS.put(W1, new NotImplementedYet(W1));
- VALUE_PARSERS.put(N, new StringSetter("CharName"));
+ VALUE_PARSERS.put(N, new NamedCharacterSetter("Character"));
VALUE_PARSERS.put(B, new CharBBox());
VALUE_PARSERS.put(START_TRACK_KERN, new NotImplementedYet(START_TRACK_KERN));
VALUE_PARSERS.put(END_TRACK_KERN, new NotImplementedYet(END_TRACK_KERN));
@@ -379,6 +381,19 @@ public class AFMParser {
}
}
+ private static class NamedCharacterSetter extends BeanSetter {
+
+ public NamedCharacterSetter(String variable) {
+ super(variable);
+ }
+
+ public void parse(String line, int startpos, Stack stack) throws IOException {
+ NamedCharacter ch = new NamedCharacter(getStringValue(line, startpos));
+ Object obj = stack.peek();
+ setValue(obj, ch);
+ }
+ }
+
private static class NumberSetter extends BeanSetter {
public NumberSetter(String variable) {
super(variable);
diff --git a/src/java/org/apache/fop/fonts/type1/Type1FontLoader.java b/src/java/org/apache/fop/fonts/type1/Type1FontLoader.java
index 910ee82cc..8cf6f2371 100644
--- a/src/java/org/apache/fop/fonts/type1/Type1FontLoader.java
+++ b/src/java/org/apache/fop/fonts/type1/Type1FontLoader.java
@@ -108,6 +108,11 @@ public class Type1FontLoader extends FontLoader {
throw new java.io.FileNotFoundException(
"Neither an AFM nor a PFM file was found for " + this.fontFileURI);
}
+ if (pfm == null) {
+ //Cannot do without the PFM for now
+ throw new java.io.FileNotFoundException(
+ "No PFM file was found for " + this.fontFileURI);
+ }
buildFont(afm, pfm);
this.loaded = true;
}
@@ -122,12 +127,17 @@ public class Type1FontLoader extends FontLoader {
singleFont.setEmbedFileName(this.fontFileURI);
returnFont = singleFont;
+ handleEncoding(afm, pfm);
+ handleFontName(afm, pfm);
+ handleMetrics(afm, pfm);
+ }
+
+ private void handleEncoding(AFMFile afm, PFMFile pfm) {
//Encoding
if (afm != null) {
String encoding = afm.getEncodingScheme();
if ("AdobeStandardEncoding".equals(encoding)) {
- //Use WinAnsi in this case as it better fits the usual character set people need
- singleFont.setEncoding(CodePointMapping.WIN_ANSI_ENCODING);
+ singleFont.setEncoding(CodePointMapping.STANDARD_ENCODING);
} else {
String effEncodingName;
if ("FontSpecific".equals(encoding)) {
@@ -142,6 +152,14 @@ public class Type1FontLoader extends FontLoader {
CodePointMapping mapping = buildCustomEncoding(effEncodingName, afm);
singleFont.setEncoding(mapping);
}
+ List charMetrics = afm.getCharMetrics();
+ for (int i = 0, c = afm.getCharCount(); i < c; i++) {
+ AFMCharMetrics metrics = (AFMCharMetrics)charMetrics.get(i);
+ if (!metrics.hasCharCode() && metrics.getCharacter() != null) {
+ singleFont.addUnencodedCharacter(metrics.getCharacter(),
+ (int)Math.round(metrics.getWidthX()));
+ }
+ }
} else {
if (pfm.getCharSet() >= 0 && pfm.getCharSet() <= 2) {
singleFont.setEncoding(pfm.getCharSetName() + "Encoding");
@@ -151,7 +169,9 @@ public class Type1FontLoader extends FontLoader {
singleFont.setEncoding("WinAnsiEncoding"); //Try fallback, no guarantees!
}
}
-
+ }
+
+ private void handleFontName(AFMFile afm, PFMFile pfm) {
//Font name
if (afm != null) {
returnFont.setFontName(afm.getFontName()); //PostScript font name
@@ -168,7 +188,9 @@ public class Type1FontLoader extends FontLoader {
names.add(pfm.getWindowsName()); //emulate afm.getFamilyName()
returnFont.setFamilyNames(names);
}
-
+ }
+
+ private void handleMetrics(AFMFile afm, PFMFile pfm) {
//Basic metrics
if (afm != null) {
if (afm.getCapHeight() != null) {
@@ -268,6 +290,7 @@ public class Type1FontLoader extends FontLoader {
if (afm != null) {
//TODO returnFont.setFlags(flags);
+
returnFont.setFirstChar(afm.getFirstChar());
returnFont.setLastChar(afm.getLastChar());
Iterator iter = afm.getCharMetrics().iterator();
@@ -279,7 +302,6 @@ public class Type1FontLoader extends FontLoader {
}
returnFont.replaceKerningMap(afm.createXKerningMapEncoded());
} else {
- returnFont.setFlags(pfm.getFlags());
returnFont.setFirstChar(pfm.getFirstChar());
returnFont.setLastChar(pfm.getLastChar());
for (short i = pfm.getFirstChar(); i <= pfm.getLastChar(); i++) {
@@ -287,6 +309,7 @@ public class Type1FontLoader extends FontLoader {
}
returnFont.replaceKerningMap(pfm.getKerning());
}
+ returnFont.setFlags(pfm.getFlags());
}
private CodePointMapping buildCustomEncoding(String encodingName, AFMFile afm) {
diff --git a/src/java/org/apache/fop/image/AbstractFopImage.java b/src/java/org/apache/fop/image/AbstractFopImage.java
deleted file mode 100644
index 68949b9c9..000000000
--- a/src/java/org/apache/fop/image/AbstractFopImage.java
+++ /dev/null
@@ -1,376 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_ColorSpace;
-import java.awt.color.ICC_Profile;
-import java.io.InputStream;
-import java.awt.Color;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fop.datatypes.Length;
-
-/**
- * Base class to implement the FopImage interface.
- *
- * @see FopImage
- */
-public abstract class AbstractFopImage implements FopImage {
-
- /**
- * logging instance
- */
- protected static Log log = LogFactory.getLog(AbstractFopImage.class);
-
- /**
- * Keeps track of what has been loaded.
- */
- protected int loaded = 0;
-
- /**
- * Image width (in pixel).
- */
- protected int width = 0;
-
- /**
- * Image height (in pixel).
- */
- protected int height = 0;
-
- /** Horizontal bitmap resolution (in dpi) */
- protected double dpiHorizontal = 72.0f;
-
- /** Vertical bitmap resolution (in dpi) */
- protected double dpiVertical = 72.0f;
-
- /**
- * Image input stream.
- */
- protected InputStream inputStream = null;
-
- /**
- * ImageReader object (to obtain image header informations).
- */
- protected FopImage.ImageInfo imageInfo = null;
-
- /**
- * Image color space (java.awt.color.ColorSpace).
- */
- protected ColorSpace colorSpace = null;
-
- /**
- * Bits per pixel.
- */
- protected int bitsPerPixel = 0;
-
- /**
- * Image data (pixels, uncompressed).
- */
- protected byte[] bitmaps = null;
-
- /**
- * Image data (undecoded, compressed, for image formats that can be embedded without decoding.
- */
- protected byte[] raw = null;
-
- /**
- * Image transparency.
- */
- protected boolean isTransparent = false;
-
- /**
- * Transparent color (java.awt.Color).
- */
- protected Color transparentColor = null;
-
- /**
- * Photoshop generated CMYK JPEGs are inverted.
- */
- protected boolean invertImage = false;
-
- /**
- * Constructor.
- * Construct a new FopImage object and initialize its default properties:
- * <UL>
- * <LI>image width
- * <LI>image height
- * </UL>
- * The image data isn't kept in memory.
- * @param info image information
- */
- public AbstractFopImage(FopImage.ImageInfo info) {
- this.inputStream = info.inputStream;
- this.imageInfo = info;
- if (this.imageInfo.width != -1) {
- width = imageInfo.width;
- height = imageInfo.height;
- dpiHorizontal = imageInfo.dpiHorizontal;
- dpiVertical = imageInfo.dpiVertical;
- loaded = loaded | DIMENSIONS;
- }
- }
-
- /**
- * Get the mime type for this image.
- *
- * @return the mime type for the image
- */
- public String getMimeType() {
- return imageInfo.mimeType;
- }
-
- /** {@inheritDoc} */
- public String getOriginalURI() {
- return this.imageInfo.originalURI;
- }
-
- /**
- * Load image data and initialize its properties.
- *
- * @param type the type of loading to do
- * @return true if the loading was successful
- */
- public synchronized boolean load(int type) {
- if ((loaded & type) != 0) {
- return true;
- }
- boolean success = true;
- if (((type & DIMENSIONS) != 0) && ((loaded & DIMENSIONS) == 0)) {
- success = success && loadDimensions();
-
- if (!success) {
- return false;
- }
- loaded = loaded | DIMENSIONS;
- }
- if (((type & BITMAP) != 0) && ((loaded & BITMAP) == 0)) {
- success = success && loadBitmap();
- if (success) {
- loaded = loaded | BITMAP;
- }
- }
- if (((type & ORIGINAL_DATA) != 0) && ((loaded & ORIGINAL_DATA) == 0)) {
- success = success && loadOriginalData();
- if (success) {
- loaded = loaded | ORIGINAL_DATA;
- }
- }
- return success;
- }
-
- /**
- * Load the dimensions of the image.
- * All implementations should override this to get and
- * return the dimensions.
- *
- * @return true if the loading was successful
- */
- protected boolean loadDimensions() {
- return false;
- }
-
- /**
- * Load a bitmap array of the image.
- * If the renderer requires a bitmap image then the
- * implementations should override this to load the bitmap.
- *
- * @return true if the loading was successful
- */
- protected boolean loadBitmap() {
- return false;
- }
-
- /**
- * Load the original image data.
- * In some cases the original data can be used by the renderer.
- * This should load the data and any other associated information.
- *
- * @return true if the loading was successful
- */
- protected boolean loadOriginalData() {
- return false;
- }
-
- /**
- * Load the original image data. This is generic code for use by any
- * subclass that wants to use this from a loadOriginalData() implementation.
- *
- * @return true if the loading was successful
- */
- protected boolean loadDefaultOriginalData() {
- if (inputStream == null) {
- throw new IllegalStateException("inputStream is already null or was never set");
- }
- try {
- this.raw = IOUtils.toByteArray(inputStream);
- } catch (java.io.IOException ex) {
- log.error("Error while reading raw image: " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
- return true;
- }
-
- /**
- * @return the image width (in pixels)
- */
- public int getWidth() {
- return this.width;
- }
-
- /**
- * @return the image height (in pixels)
- */
- public int getHeight() {
- return this.height;
- }
-
- /** {@inheritDoc} */
- public int getIntrinsicWidth() {
- return (int)(getWidth() * 72000 / getHorizontalResolution());
- }
-
- /** {@inheritDoc} */
- public int getIntrinsicHeight() {
- return (int)(getHeight() * 72000 / getVerticalResolution());
- }
-
- /** {@inheritDoc} */
- public Length getIntrinsicAlignmentAdjust() {
- return this.imageInfo.alignmentAdjust;
- }
-
- /** {@inheritDoc} */
- public double getHorizontalResolution() {
- return this.dpiHorizontal;
- }
-
- /** {@inheritDoc} */
- public double getVerticalResolution() {
- return this.dpiVertical;
- }
-
- /**
- * Return the image color space.
- * @return the image color space (java.awt.color.ColorSpace)
- */
- public ColorSpace getColorSpace() {
- return this.colorSpace;
- }
-
- /**
- * Get ICC profile for this image.
- * @return the icc profile or null if not applicable
- */
- public ICC_Profile getICCProfile() {
- if (this.colorSpace != null && this.colorSpace instanceof ICC_ColorSpace) {
- return ((ICC_ColorSpace)this.colorSpace).getProfile();
- }
- return null;
- }
-
- /**
- * Return the number of bits per pixel.
- * @return number of bits per pixel
- */
- public int getBitsPerPixel() {
- return this.bitsPerPixel;
- }
-
- /**
- * Return the image transparency.
- * @return true if the image is transparent
- */
- public boolean isTransparent() {
- return this.isTransparent;
- }
-
- /**
- * Check if this image has a soft mask.
- *
- * @return true if the image also has a soft transparency mask
- */
- public boolean hasSoftMask() {
- return false;
- }
-
- /**
- * Get the soft mask.
- * The soft mask should have the same bitdepth as the image data.
- *
- * @return the data array of soft mask values
- */
- public byte[] getSoftMask() {
- return null;
- }
-
- /**
- * Return the transparent color.
- * @return the transparent color (java.awt.Color)
- */
- public Color getTransparentColor() {
- return this.transparentColor;
- }
-
- /** @return true for CMYK images generated by Adobe Photoshop */
- public boolean isInverted() {
- return this.invertImage;
- }
-
- /**
- * Return the image data (pixels, uncompressed).
- * @return the image data
- */
- public byte[] getBitmaps() {
- return this.bitmaps;
- }
-
- /**
- * Return the image data size (number of bytes taken up by the uncompressed pixels).
- * @return the image data size
- */
- public int getBitmapsSize() {
- return (bitmaps != null ? bitmaps.length : 0);
- }
-
- /**
- * Return the original image data (compressed).
- * @return the original image data
- */
- public byte[] getResourceBytes() {
- return raw;
- }
-
- /**
- * Return the original image data size (compressed).
- * @return the original image data size
- */
- public int getResourceBytesSize() {
- return (raw != null ? raw.length : 0);
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/BmpImage.java b/src/java/org/apache/fop/image/BmpImage.java
deleted file mode 100644
index 5ebf522e9..000000000
--- a/src/java/org/apache/fop/image/BmpImage.java
+++ /dev/null
@@ -1,220 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import java.io.IOException;
-import java.awt.color.ColorSpace;
-
-import org.apache.commons.io.IOUtils;
-
-/**
- * Bitmap image.
- * This supports loading a bitmap image into bitmap data.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class BmpImage extends AbstractFopImage {
- /**
- * Create a bitmap image with the image data.
- *
- * @param imgInfo the image information
- */
- public BmpImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- }
-
- /**
- * Load the bitmap.
- * This laods the bitmap data from the bitmap image.
- *
- * @return true if it was loaded successfully
- */
- protected boolean loadBitmap() {
- int wpos = 18;
- int hpos = 22; // offset positioning for w and height in bmp files
- int[] headermap = new int[54];
- int filepos = 0;
- byte[] palette = null;
- try {
- boolean eof = false;
- while ((!eof) && (filepos < 54)) {
- int input = inputStream.read();
- if (input == -1) {
- eof = true;
- } else {
- headermap[filepos++] = input;
- }
- }
-
- if (headermap[28] == 4 || headermap[28] == 8) {
- int palettesize = 1 << headermap[28];
- palette = new byte[palettesize * 3];
- int countr = 0;
- while (!eof && countr < palettesize) {
- int count2 = 2;
- while (!eof && count2 >= -1) {
- int input = inputStream.read();
- if (input == -1) {
- eof = true;
- } else if (count2 >= 0) {
- palette[countr * 3 + count2] = (byte)(input & 0xFF);
- }
- count2--;
- filepos++;
- }
- countr++;
- }
- }
- } catch (IOException ex) {
- log.error("Error while loading image (Bmp): " + ex.getMessage(), ex);
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- return false;
- }
- // gets h & w from headermap
- this.width = headermap[wpos]
- + headermap[wpos + 1] * 256
- + headermap[wpos + 2] * 256 * 256
- + headermap[wpos + 3] * 256 * 256 * 256;
- this.height = headermap[hpos]
- + headermap[hpos + 1] * 256
- + headermap[hpos + 2] * 256 * 256
- + headermap[hpos + 3] * 256 * 256 * 256;
-
- int imagestart = headermap[10]
- + headermap[11] * 256
- + headermap[12] * 256 * 256
- + headermap[13] * 256 * 256 * 256;
- this.bitsPerPixel = headermap[28];
- this.colorSpace = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);
- int bytes = 0;
- if (this.bitsPerPixel == 1) {
- bytes = (this.width + 7) / 8;
- } else if (this.bitsPerPixel == 24) {
- bytes = this.width * 3;
- } else if (this.bitsPerPixel == 4 || this.bitsPerPixel == 8) {
- bytes = this.width / (8 / this.bitsPerPixel);
- } else {
- log.error("Image (" + ""
- + ") has " + this.bitsPerPixel
- + " which is not a supported BMP format.");
- return false;
- }
- if ((bytes & 0x03) != 0) {
- bytes |= 0x03;
- bytes++;
- }
-
- // Should take care of the ColorSpace and bitsPerPixel
- this.bitmaps = new byte[this.width * this.height * 3];
-
- int[] temp = new int[bytes * this.height];
- try {
- int input;
- int count = 0;
- inputStream.skip((long)(imagestart - filepos));
- while ((input = inputStream.read()) != -1) {
- if (count >= temp.length) {
- log.warn("Data longer than expected while loading image");
- break;
- } else {
- temp[count++] = input;
- }
- }
- } catch (IOException ex) {
- log.error("Error while loading image (Bmp): " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
-
- for (int i = 0; i < this.height; i++) {
- int x = 0;
- int j = 0;
- while (j < bytes) {
- int p = temp[(this.height - i - 1) * bytes + j];
-
- if (this.bitsPerPixel == 24 && x < this.width) {
- int countr = 2;
- do {
- this.bitmaps[3 * (i * this.width + x) + countr]
- = (byte)(temp[(this.height - i - 1) * bytes + j] & 0xFF);
- j++;
- } while (--countr >= 0)
- ;
- x++;
- } else if (this.bitsPerPixel == 1) {
- for (int countr = 0;
- countr < 8 && x < this.width; countr++) {
- if ((p & 0x80) != 0) {
- this.bitmaps[3 * (i * this.width + x)] = (byte) 0xFF;
- this.bitmaps[3 * (i * this.width + x) + 1] = (byte) 0xFF;
- this.bitmaps[3 * (i * this.width + x) + 2] = (byte) 0xFF;
- } else {
- this.bitmaps[3 * (i * this.width + x)] = (byte) 0;
- this.bitmaps[3 * (i * this.width + x) + 1] = (byte) 0;
- this.bitmaps[3 * (i * this.width + x) + 2] = (byte) 0;
- }
- p <<= 1;
- x++;
- }
- j++;
- } else if (this.bitsPerPixel == 4) {
- for (int countr = 0;
- countr < 2 && x < this.width; countr++) {
- int pal = ((p & 0xF0) >> 4) * 3;
- this.bitmaps[3 * (i * this.width + x)] = palette[pal];
- this.bitmaps[3 * (i * this.width + x) + 1] = palette[pal + 1];
- this.bitmaps[3 * (i * this.width + x) + 2] = palette[pal + 2];
- p <<= 4;
- x++;
- }
- j++;
- } else if (this.bitsPerPixel == 8) {
- if (x < this.width) {
- p *= 3;
- this.bitmaps[3 * (i * this.width + x)] = palette[p];
- this.bitmaps[3 * (i * this.width + x) + 1] = palette[p + 1];
- this.bitmaps[3 * (i * this.width + x) + 2] = palette[p + 2];
- j++;
- x++;
- } else {
- j = bytes;
- }
- } else {
- j++;
- }
- }
- }
-
- // This seems really strange to me, but I noticed that
- // JimiImage hardcodes bitsPerPixel to 8. If I do not
- // do this Acrobat is unable to read the resultant PDF,
- // so we will hardcode this...
- this.bitsPerPixel = 8;
-
- return true;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/EPSImage.java b/src/java/org/apache/fop/image/EPSImage.java
deleted file mode 100644
index ab708f2a4..000000000
--- a/src/java/org/apache/fop/image/EPSImage.java
+++ /dev/null
@@ -1,122 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-
-/**
- * EPS image handler.
- * This handles the Encapulated PostScript images.
- * It gets the dimensions and original data from the analyser.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class EPSImage extends AbstractFopImage {
-
- private String docName;
- private int[] bbox;
-
- private EPSData epsData = null;
-
- /**
- * Create an EPS image with the image information.
- *
- * @param imgInfo the information containing the data and bounding box
- */
- public EPSImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- init("");
- if (imgInfo.data instanceof EPSData) {
- epsData = (EPSData) imgInfo.data;
- bbox = new int[4];
- bbox[0] = (int) epsData.bbox[0];
- bbox[1] = (int) epsData.bbox[1];
- bbox[2] = (int) epsData.bbox[2];
- bbox[3] = (int) epsData.bbox[3];
-
- loaded = loaded | ORIGINAL_DATA;
- }
- }
-
- /**
- * Initialize docName and bounding box.
- * @param name the document name
- */
- private void init(String name) {
- bbox = new int[4];
- bbox[0] = 0;
- bbox[1] = 0;
- bbox[2] = 0;
- bbox[3] = 0;
-
- docName = name;
- }
-
- /**
- * Return the name of the eps
- * @return the name of the eps
- */
- public String getDocName() {
- return docName;
- }
-
- /**
- * Return the bounding box
- * @return an int array containing the bounding box
- */
- public int[] getBBox() {
- return bbox;
- }
-
- /**
- * Get the eps image.
- *
- * @return the original eps image data
- */
- public byte[] getEPSImage() {
- if (epsData.epsFile == null) {
- //log.error("ERROR LOADING EXTERNAL EPS");
- }
- return epsData.epsFile;
- }
-
- /**
- * Data for EPS image.
- */
- public static class EPSData {
- public long[] bbox;
- public boolean isAscii; // True if plain ascii eps file
-
- // offsets if not ascii
- public long psStart = 0;
- public long psLength = 0;
- public long wmfStart = 0;
- public long wmfLength = 0;
- public long tiffStart = 0;
- public long tiffLength = 0;
-
- /** raw eps file */
- public byte[] rawEps;
- /** eps part */
- public byte[] epsFile;
- public byte[] preview = null;
- }
-
-}
diff --git a/src/java/org/apache/fop/image/EmfImage.java b/src/java/org/apache/fop/image/EmfImage.java
deleted file mode 100644
index 73bbad232..000000000
--- a/src/java/org/apache/fop/image/EmfImage.java
+++ /dev/null
@@ -1,51 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-/**
- * Enhanced metafile image.
- * This supports loading a EMF image.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class EmfImage extends AbstractFopImage {
-
- /**
- * Create a bitmap image with the image data.
- *
- * @param imgInfo the image information
- */
- public EmfImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- }
-
- /**
- * Load the original EMF data.
- * This loads the original EMF data and reads the color space,
- * and icc profile if any.
- *
- * @return true if loaded false for any error
- */
- protected boolean loadOriginalData() {
- return loadDefaultOriginalData();
- }
-}
-
diff --git a/src/java/org/apache/fop/image/FopImage.java b/src/java/org/apache/fop/image/FopImage.java
deleted file mode 100644
index abe11ef25..000000000
--- a/src/java/org/apache/fop/image/FopImage.java
+++ /dev/null
@@ -1,207 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-import java.io.InputStream;
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_Profile;
-import java.awt.Color;
-
-import org.apache.fop.datatypes.Length;
-
-/**
- * Fop image interface for loading images.
- */
-public interface FopImage {
- /**
- * Flag for loading dimensions.
- */
- int DIMENSIONS = 1;
-
- /**
- * Flag for loading original data.
- */
- int ORIGINAL_DATA = 2;
-
- /**
- * Flag for loading bitmap data.
- */
- int BITMAP = 4;
-
- /**
- * Get the mime type of this image.
- * This is used so that when reading from the image it knows
- * what type of image it is.
- *
- * @return the mime type string
- */
- String getMimeType();
-
- /** @return the original URI used to access this image. */
- String getOriginalURI();
-
- /**
- * Load particular inforamtion for this image
- * This must be called before attempting to get
- * the information.
- *
- * @param type the type of loading required
- * @return boolean true if the information could be loaded
- */
- boolean load(int type);
-
- /**
- * Returns the image width.
- * @return the width in pixels
- */
- int getWidth();
-
- /**
- * Returns the image height.
- * @return the height in pixels
- */
- int getHeight();
-
- /**
- * @return the intrinsic image width (in millipoints)
- */
- int getIntrinsicWidth();
-
- /**
- * @return the intrinsic image width (in millipoints)
- */
- int getIntrinsicHeight();
-
- /**
- * @return the intrinsic alignment-adjust value or NULL if the image does
- * not have one.
- */
- Length getIntrinsicAlignmentAdjust();
-
- /**
- * @return the horizontal bitmap resolution (in dpi)
- */
- double getHorizontalResolution();
-
- /**
- * @return the vertical bitmap resolution (in dpi)
- */
- double getVerticalResolution();
-
- /**
- * Returns the color space of the image.
- * @return the color space
- */
- ColorSpace getColorSpace();
-
- /**
- * Returns the ICC profile.
- * @return the ICC profile, null if none is available
- */
- ICC_Profile getICCProfile();
-
- /**
- * Returns the number of bits per pixel for the image.
- * @return the number of bits per pixel
- */
- int getBitsPerPixel();
-
- /**
- * Indicates whether the image is transparent.
- * @return True if it is transparent
- */
- boolean isTransparent();
-
- /**
- * For transparent images. Returns the transparent color.
- * @return the transparent color
- */
- Color getTransparentColor();
-
- /**
- * Indicates whether the image has a Soft Mask (See section 7.5.4 in the
- * PDF specs)
- * @return True if a Soft Mask exists
- */
- boolean hasSoftMask();
-
- /**
- * For images with a Soft Mask. Returns the Soft Mask as an array.
- * @return the Soft Mask
- */
- byte[] getSoftMask();
-
- /** @return true for CMYK images generated by Adobe Photoshop */
- boolean isInverted();
-
- /**
- * Returns the decoded and uncompressed image as a array of
- * width * height * [colorspace-multiplicator] pixels.
- * @return the bitmap
- */
- byte[] getBitmaps();
- /**
- * Returns the size of the image.
- * width * (bitsPerPixel / 8) * height, no ?
- * @return the size
- */
- int getBitmapsSize();
-
- /**
- * Returns the encoded/compressed image as an array of bytes.
- * @return the raw image
- */
- byte[] getResourceBytes();
-
- /**
- * Returns the number of bytes of the raw image.
- * @return the size in bytes
- */
- int getResourceBytesSize();
-
- /**
- * Image info class.
- * Information loaded from analyser and passed to image object.
- */
- public static class ImageInfo {
- /** InputStream to load the image from */
- public InputStream inputStream;
- /** Original URI the image was accessed with */
- public String originalURI;
- /** image width (in pixels) */
- public int width;
- /** image height (in pixels) */
- public int height;
- /** horizontal bitmap resolution (in dpi) */
- public double dpiHorizontal = 72.0f;
- /** vertical bitmap resolution (in dpi) */
- public double dpiVertical = 72.0f;
- /** implementation-specific data object (ex. a SVG DOM for SVG images) */
- public Object data;
- /** MIME type of the image */
- public String mimeType;
- /** implementation-specific String (ex. the namespace for XML-based images) */
- public String str;
- /** intrinsic alignment-adjust or null if there is none */
- public Length alignmentAdjust;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/FopImageConsumer.java b/src/java/org/apache/fop/image/FopImageConsumer.java
deleted file mode 100644
index 4e4d7be48..000000000
--- a/src/java/org/apache/fop/image/FopImageConsumer.java
+++ /dev/null
@@ -1,211 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import java.util.Hashtable;
-import java.awt.image.ColorModel;
-import java.awt.image.ImageConsumer;
-import java.awt.image.ImageProducer;
-import java.awt.image.PixelGrabber;
-
-/**
- * ImageConsumer implementation for FopImage classes.
- */
-public class FopImageConsumer implements ImageConsumer {
-
- /** Image width in pixels */
- protected int width = -1;
- /** Image height in pixels */
- protected int height = -1;
- /** Image status */
- protected Integer imageStatus = new Integer(-1);
- /** hints */
- protected int hints = 0;
- /** Image properties */
- protected Hashtable properties = null;
- /** Color model */
- protected ColorModel cm = null;
- /** Image producer */
- protected ImageProducer ip = null;
-
- /**
- * Main constructor
- * @param iprod ImageProducer to use
- */
- public FopImageConsumer(ImageProducer iprod) {
- this.ip = iprod;
- }
-
- /**
- * {@inheritDoc}
- */
- public void imageComplete(int status) {
- /*
- * log.error("Status ");
- * if (status == ImageConsumer.COMPLETESCANLINES) {
- * log.error("CompleteScanLines");
- * } else if (status == ImageConsumer.IMAGEABORTED) {
- * log.error("ImageAborted");
- * } else if (status == ImageConsumer.IMAGEERROR) {
- * log.error("ImageError");
- * } else if (status == ImageConsumer.RANDOMPIXELORDER) {
- * log.error("RandomPixelOrder");
- * } else if (status == ImageConsumer.SINGLEFRAME) {
- * log.error("SingleFrame");
- * } else if (status == ImageConsumer.SINGLEFRAMEDONE) {
- * log.error("SingleFrameDone");
- * } else if (status == ImageConsumer.SINGLEPASS) {
- * log.error("SinglePass");
- * } else if (status == ImageConsumer.STATICIMAGEDONE) {
- * log.error("StaticImageDone");
- * } else if (status == ImageConsumer.TOPDOWNLEFTRIGHT) {
- * log.error("TopDownLeftRight");
- * }
- */
- synchronized (this.imageStatus) {
- // Need to stop status if image done
- if (imageStatus.intValue() != ImageConsumer.STATICIMAGEDONE
- && imageStatus.intValue() != ImageConsumer.SINGLEFRAMEDONE) {
- this.imageStatus = new Integer(status);
- }
- }
- }
-
- /**
- * {@inheritDoc}
- */
- public void setColorModel(ColorModel model) {
- // log.error("setColorModel: " + model);
- this.cm = model;
- }
-
- /**
- * {@inheritDoc}
- */
- public void setDimensions(int width, int height) {
- // log.error("setDimension: w=" + width + " h=" + height);
- this.width = width;
- this.height = height;
- }
-
- /**
- * {@inheritDoc}
- */
- public void setHints(int hintflags) {
- // log.error("setHints: " + hintflags);
- this.hints = hintflags;
- }
-
- /**
- * {@inheritDoc}
- */
- public void setProperties(Hashtable props) {
- // log.error("setProperties: " + props);
- this.properties = props;
- }
-
- /**
- * {@inheritDoc}
- */
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- byte[] pixels, int off, int scansize) {
- }
-
- /**
- * {@inheritDoc}
- */
- public void setPixels(int x, int y, int w, int h, ColorModel model,
- int[] pixels, int off, int scansize) {
- }
-
- /**
- * Indicates whether the image is ready.
- * @return boolean True if the image is ready, false if it's still loading
- * @throws Exception If an error happened while loading the image
- */
- public boolean isImageReady() throws Exception {
- /**@todo Use a better exception than Exception */
- synchronized (this.imageStatus) {
- if (this.imageStatus.intValue() == ImageConsumer.IMAGEABORTED) {
- throw new Exception("Image aborted");
- }
- if (this.imageStatus.intValue() == ImageConsumer.IMAGEERROR) {
- throw new Exception("Image error");
- }
-
- if (imageStatus.intValue() == ImageConsumer.STATICIMAGEDONE
- || imageStatus.intValue() == ImageConsumer.SINGLEFRAMEDONE) {
- return true;
- }
-
- return false;
- }
- }
-
- /**
- * Returns the image width
- * @return the width in pixels
- */
- public int getWidth() {
- return this.width;
- }
-
- /**
- * Returns the image height
- * @return the height in pixels
- */
- public int getHeight() {
- return this.height;
- }
-
- /**
- * Returns the color model of the image
- * @return the color model
- */
- public ColorModel getColorModel() {
- return this.cm;
- }
-
- /**
- * Returns the bitmap as an array.
- * @return the bitmap as an array.
- * @throws Exception if an error occured while generating the array
- */
- public int[] getImage() throws Exception {
- int tmpMap[] = new int[this.width * this.height];
- PixelGrabber pg = new PixelGrabber(this.ip, 0, 0, this.width,
- this.height, tmpMap, 0, this.width);
- pg.setDimensions(this.width, this.height);
- pg.setColorModel(this.cm);
- pg.setHints(this.hints);
- pg.setProperties(this.properties);
- try {
- pg.grabPixels();
- } catch (InterruptedException intex) {
- /**@todo Use a better exception than Exception */
- throw new Exception("Image grabbing interrupted : "
- + intex.getMessage());
- }
- return tmpMap;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/GifImage.java b/src/java/org/apache/fop/image/GifImage.java
deleted file mode 100644
index 27e81c4fc..000000000
--- a/src/java/org/apache/fop/image/GifImage.java
+++ /dev/null
@@ -1,218 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import java.awt.image.ImageProducer;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.color.ColorSpace;
-import java.awt.Color;
-import java.io.InputStream;
-import java.io.IOException;
-import java.net.URLConnection;
-
-import org.apache.commons.io.IOUtils;
-
-/**
- * FopImage object for GIF images, using Java native classes.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class GifImage extends AbstractFopImage {
-
- /**
- * Create a new gif image.
- *
- * @param imgInfo the image info for this gif image
- */
- public GifImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- }
-
- /**
- * Load the bitmap for this gif image.
- * This loads the data and creates a bitmap byte array
- * of the image data.
- * To decode the image a dummy URLConnection is used that
- * will do the conversion.
- *
- * @return True if the load process succeeded
- */
- protected boolean loadBitmap() {
- int[] tmpMap = null;
- try {
- URLConnection con = new DummyConnection(inputStream);
-
- ImageProducer ip = (ImageProducer) con.getContent();
- if (ip == null) {
- return false;
- }
- FopImageConsumer consumer = new FopImageConsumer(ip);
- ip.startProduction(consumer);
-
- //Load the image into memory
- while (!consumer.isImageReady()) {
- Thread.sleep(500);
- }
-
- this.height = consumer.getHeight();
- this.width = consumer.getWidth();
-
- try {
- tmpMap = consumer.getImage();
- } catch (Exception ex) {
- log.error("Image grabbing interrupted : "
- + ex.getMessage(), ex);
- return false;
- }
-
- ColorModel cm = consumer.getColorModel();
- this.bitsPerPixel = 8;
- // this.bitsPerPixel = cm.getPixelSize();
- this.colorSpace = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);
- if (cm.hasAlpha()) {
- // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
- int transparencyType = cm.getTransparency();
-
- if (transparencyType == java.awt.Transparency.OPAQUE) {
- this.isTransparent = false;
- } else if (transparencyType == java.awt.Transparency.BITMASK) {
- if (cm instanceof IndexColorModel) {
- IndexColorModel indexcm = (IndexColorModel) cm;
- this.isTransparent = false;
- byte[] alphas = new byte[indexcm.getMapSize()];
- byte[] reds = new byte[indexcm.getMapSize()];
- byte[] greens = new byte[indexcm.getMapSize()];
- byte[] blues = new byte[indexcm.getMapSize()];
- indexcm.getAlphas(alphas);
- indexcm.getReds(reds);
- indexcm.getGreens(greens);
- indexcm.getBlues(blues);
- for (int i = 0;
- i < indexcm.getMapSize();
- i++) {
- if ((alphas[i] & 0xFF) == 0) {
- this.isTransparent = true;
- this.transparentColor = new Color(
- (int)(reds[i] & 0xFF),
- (int)(greens[i] & 0xFF),
- (int)(blues[i] & 0xFF));
- break;
- }
- }
- } else {
- // TRANSLUCENT
- /*
- * this.isTransparent = false;
- * for (int i = 0; i < this.width * this.height; i++) {
- * if (cm.getAlpha(tmpMap[i]) == 0) {
- * this.isTransparent = true;
- * this.transparentColor = new PDFColor(cm.getRed(tmpMap[i]),
- * cm.getGreen(tmpMap[i]), cm.getBlue(tmpMap[i]));
- * break;
- * }
- * }
- */
- // use special API...
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
- } catch (Exception ex) {
- log.error("Error while loading image (Gif): " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
-
- // Should take care of the ColorSpace and bitsPerPixel
- this.bitmaps = new byte[this.width * this.height * 3];
- for (int i = 0; i < this.height; i++) {
- for (int j = 0; j < this.width; j++) {
- int p = tmpMap[i * this.width + j];
- int r = (p >> 16) & 0xFF;
- int g = (p >> 8) & 0xFF;
- int b = (p) & 0xFF;
- this.bitmaps[3 * (i * this.width + j)] = (byte)(r & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 1] = (byte)(g & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 2] = (byte)(b & 0xFF);
- }
- }
- return true;
- }
-
- /** {@inheritDoc} */
- protected boolean loadOriginalData() {
- return loadDefaultOriginalData();
- }
-
- /**
- * A dummy url connection for a gif image in an input stream.
- */
- protected static class DummyConnection extends URLConnection {
- private InputStream inputStream;
-
- DummyConnection(InputStream is) {
- super(null);
- inputStream = is;
- }
-
- /**
- * {@inheritDoc}
- */
- public InputStream getInputStream() throws IOException {
- return inputStream;
- }
-
- /**
- * {@inheritDoc}
- */
- public void connect() throws IOException {
- // do nothing
- }
-
- /**
- * {@inheritDoc}
- */
- public String getContentType() {
- return "image/gif";
- }
-
- /**
- * {@inheritDoc}
- */
- public int getContentLength() {
- try {
- return inputStream.available();
- } catch (IOException e) {
- return -1;
- }
- }
-
- }
-}
-
diff --git a/src/java/org/apache/fop/image/ImageCache.java b/src/java/org/apache/fop/image/ImageCache.java
deleted file mode 100644
index 3dd639823..000000000
--- a/src/java/org/apache/fop/image/ImageCache.java
+++ /dev/null
@@ -1,72 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// FOP
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * Image cache holder.
- * This interface is used for caching images.
- */
-public interface ImageCache {
-
- /**
- * Get an image from the cache.
- *
- * @param url the url and key for the image
- * @param context the user agent context
- * @return the requested image
- */
- FopImage getImage(String url, FOUserAgent context);
-
- /**
- * Release an image in the current context.
- *
- * @param url the url and key for the image
- * @param context the user agent context
- */
- void releaseImage(String url, FOUserAgent context);
-
- /**
- * Invalidate image.
- * If during loading this image is found to be invalid
- * it will be invalidated to prevent further attempts at
- * loading the image.
- *
- * @param url the url and key for the image
- * @param context the user agent context
- */
- void invalidateImage(String url, FOUserAgent context);
-
- /**
- * Remove a context and handle all images in the context.
- *
- * @param context the user agent context
- */
- void removeContext(FOUserAgent context);
-
- /**
- * Forces the cache to fully cleared.
- */
- void clearAll();
-
-}
-
diff --git a/src/java/org/apache/fop/image/ImageFactory.java b/src/java/org/apache/fop/image/ImageFactory.java
deleted file mode 100644
index 5c9f198e8..000000000
--- a/src/java/org/apache/fop/image/ImageFactory.java
+++ /dev/null
@@ -1,708 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import java.io.InputStream;
-import java.lang.ref.Reference;
-import java.lang.ref.ReferenceQueue;
-import java.lang.ref.SoftReference;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.Map.Entry;
-
-import javax.xml.transform.Source;
-import javax.xml.transform.stream.StreamSource;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.datatypes.URISpecification;
-import org.apache.fop.image.analyser.ImageReaderFactory;
-import org.apache.xmlgraphics.util.Service;
-
-/**
- * Create FopImage objects (with a configuration file - not yet implemented).
- * @author Eric SCHAEFFER
- */
-public final class ImageFactory {
-
- /**
- * logging instance
- */
- protected static Log log = LogFactory.getLog(FopImage.class);
-
- private HashMap imageMimeTypes = new HashMap();
-
- private ImageCache cache = new ContextImageCache(true);
-
- /**
- * Main constructor for the ImageFactory.
- */
- public ImageFactory() {
- /* @todo The mappings set up below of image mime types to implementing
- * classes should be made externally configurable
- */
- ImageProvider jaiImage = new ImageProvider("JAIImage", "org.apache.fop.image.JAIImage");
- ImageProvider jimiImage = new ImageProvider("JIMIImage", "org.apache.fop.image.JimiImage");
- ImageProvider imageIoImage = new ImageProvider(
- "ImageIOImage", "org.apache.fop.image.ImageIOImage");
- ImageProvider gifImage = new ImageProvider("GIFImage", "org.apache.fop.image.GifImage");
- ImageProvider jpegImage = new ImageProvider("JPEGImage", "org.apache.fop.image.JpegImage");
- ImageProvider jpegImageIOImage = new ImageProvider(
- "JPEGImage", "org.apache.fop.image.JpegImageIOImage");
- ImageProvider bmpImage = new ImageProvider("BMPImage", "org.apache.fop.image.BmpImage");
- ImageProvider epsImage = new ImageProvider("EPSImage", "org.apache.fop.image.EPSImage");
- ImageProvider pngImage = new ImageProvider("PNGImage", "org.apache.fop.image.PNGImage");
- ImageProvider tiffImage = new ImageProvider("TIFFImage", "org.apache.fop.image.TIFFImage");
- ImageProvider xmlImage = new ImageProvider("XMLImage", "org.apache.fop.image.XMLImage");
- ImageProvider emfImage = new ImageProvider("EMFImage", "org.apache.fop.image.EmfImage");
-
- ImageMimeType imt = new ImageMimeType("image/gif");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(imageIoImage);
- imt.addProvider(jaiImage);
- imt.addProvider(jimiImage);
- imt.addProvider(gifImage);
-
- imt = new ImageMimeType("image/jpeg");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(jpegImageIOImage);
- imt.addProvider(jpegImage);
-
- imt = new ImageMimeType("image/bmp");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(bmpImage);
-
- imt = new ImageMimeType("image/eps");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(epsImage);
-
- imt = new ImageMimeType("image/png");
- imageMimeTypes.put(imt.getMimeType(), imt);
- //Image I/O is faster and more memory-efficient than own codec for PNG
- imt.addProvider(imageIoImage);
- imt.addProvider(pngImage);
-
- imt = new ImageMimeType("image/tga");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(jaiImage);
- imt.addProvider(imageIoImage);
- imt.addProvider(jimiImage);
-
- imt = new ImageMimeType("image/tiff");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(tiffImage); //Slower but supports CCITT embedding
- imt.addProvider(imageIoImage); //Fast but doesn't support CCITT embedding
- imt.addProvider(jaiImage); //Fast but doesn't support CCITT embedding
-
- imt = new ImageMimeType("image/svg+xml");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(xmlImage);
-
- imt = new ImageMimeType("text/xml");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(xmlImage);
-
- imt = new ImageMimeType("image/emf");
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(emfImage);
-
- Iterator iter = Service.providers(RegisterableImageProvider.class, true);
- while (iter.hasNext()) {
- RegisterableImageProvider impl = (RegisterableImageProvider)iter.next();
- imt = new ImageMimeType(impl.getSupportedMimeType());
- imageMimeTypes.put(imt.getMimeType(), imt);
- imt.addProvider(new ImageProvider(impl.getName(), impl.getClassName()));
- }
- }
-
- /**
- * Get the url string from a wrapped url.
- *
- * @param href the input wrapped url
- * @return the raw url
- */
- public static String getURL(String href) {
- return URISpecification.getURL(href);
- }
-
- /**
- * Get the image from the cache or load.
- * If this returns null then the image could not be loaded
- * due to an error. Messages should be logged.
- * Before calling this the getURL(url) must be used.
- *
- * @param url the url for the image
- * @param context the user agent context
- * @return the fop image instance
- */
- public FopImage getImage(String url, FOUserAgent context) {
- return cache.getImage(url, context);
- }
-
- /**
- * Release an image from the cache.
- * This can be used if the renderer has its own cache of
- * the image.
- * The image should then be put into the weak cache.
- *
- * @param url the url for the image
- * @param context the user agent context
- */
- public void releaseImage(String url, FOUserAgent context) {
- cache.releaseImage(url, context);
- }
-
- /**
- * Release the context and all images in the context.
- *
- * @param context the context to remove
- */
- public void removeContext(FOUserAgent context) {
- cache.removeContext(context);
- }
-
- /**
- * Create an FopImage objects.
- * @param href the url for the image
- * @param ua the user agent context
- * @return the fop image instance
- */
- public FopImage loadImage(String href, FOUserAgent ua) {
-
- Source source = ua.resolveURI(href);
- if (source == null) {
- return null;
- }
-
- // Got a valid source, obtain an InputStream from it
- InputStream in = null;
- if (source instanceof StreamSource) {
- in = ((StreamSource)source).getInputStream();
- }
- if (in == null) {
- try {
- in = new java.net.URL(source.getSystemId()).openStream();
- } catch (Exception ex) {
- log.error("Unable to obtain stream from id '"
- + source.getSystemId() + "'");
- }
- }
- if (in == null) {
- return null;
- }
-
- //Make sure the InputStream is decorated with a BufferedInputStream
- if (!(in instanceof java.io.BufferedInputStream)) {
- in = new java.io.BufferedInputStream(in);
- }
-
- // Check image type
- FopImage.ImageInfo imgInfo = null;
- try {
- imgInfo = ImageReaderFactory.make(source.getSystemId(), in, ua);
- } catch (Exception e) {
- log.error("Error while recovering image information ("
- + href + ") : " + e.getMessage(), e);
- return null;
- }
- if (imgInfo == null) {
- try {
- in.close();
- in = null;
- } catch (Exception e) {
- log.debug("Error closing the InputStream for the image", e);
- }
- log.error("No ImageReader for this type of image (" + href + ")");
- return null;
- }
- // Associate mime-type to FopImage class
- String imgMimeType = imgInfo.mimeType;
- Class imageClass = getImageClass(imgMimeType);
- if (imageClass == null) {
- log.error("Unsupported image type (" + href + "): " + imgMimeType);
- return null;
- } else {
- if (log.isDebugEnabled()) {
- log.debug("Loading " + imgMimeType + " with " + imageClass.getName()
- + ": " + href);
- }
- }
-
- // load the right image class
- // return new <FopImage implementing class>
- Object imageInstance = null;
- try {
- Class[] imageConstructorParameters = new Class[1];
- imageConstructorParameters[0] = org.apache.fop.image.FopImage.ImageInfo.class;
- Constructor imageConstructor = imageClass.getDeclaredConstructor(
- imageConstructorParameters);
- Object[] initArgs = new Object[1];
- initArgs[0] = imgInfo;
- imageInstance = imageConstructor.newInstance(initArgs);
- } catch (java.lang.reflect.InvocationTargetException ex) {
- Throwable t = ex.getTargetException();
- String msg;
- if (t != null) {
- msg = t.getMessage();
- } else {
- msg = ex.getMessage();
- }
- log.error("Error creating FopImage object ("
- + href + "): " + msg, (t == null) ? ex : t);
- return null;
- } catch (InstantiationException ie) {
- log.error("Error creating FopImage object ("
- + href + "): Could not instantiate " + imageClass.getName() + " instance");
- return null;
- } catch (Exception ex) {
- log.error("Error creating FopImage object ("
- + href + "): " + ex.getMessage(), ex);
- return null;
- }
- if (!(imageInstance instanceof org.apache.fop.image.FopImage)) {
- log.error("Error creating FopImage object (" + href + "): " + "class "
- + imageClass.getName()
- + " doesn't implement org.apache.fop.image.FopImage interface");
- return null;
- }
- return (FopImage) imageInstance;
- }
-
- private Class getImageClass(String imgMimeType) {
- ImageMimeType imt = (ImageMimeType)imageMimeTypes.get(imgMimeType);
- if (imt == null) {
- return null;
- }
- return imt.getFirstImplementingClass();
- }
-
- /**
- * Forces all the image caches to be cleared. This should normally only be used in
- * testing environments. If you happen to think that you need to call this yourself
- * in a production environment, please notify the development team so we can look
- * into the issue. A call like this shouldn't be necessary anymore like it may have
- * been with FOP 0.20.5.
- */
- public void clearCaches() {
- cache.clearAll();
- }
-}
-
-/**
- * Basic image cache.
- * This keeps track of invalid images.
- */
-class BasicImageCache implements ImageCache {
-
- private Set invalid = Collections.synchronizedSet(new java.util.HashSet());
- //private Map contextStore = Collections.synchronizedMap(new java.util.HashMap());
-
- public FopImage getImage(String url, FOUserAgent context) {
- if (invalid.contains(url)) {
- return null;
- }
- //TODO Doesn't seem to be fully implemented. Do we need it at all? Not referenced.
- return null;
- }
-
- public void releaseImage(String url, FOUserAgent context) {
- // do nothing
- }
-
- public void invalidateImage(String url, FOUserAgent context) {
- // cap size of invalid list
- if (invalid.size() > 100) {
- invalid.clear();
- }
- invalid.add(url);
- }
-
- public void removeContext(FOUserAgent context) {
- // do nothing
- }
-
- /** {@inheritDoc} */
- public void clearAll() {
- invalid.clear();
- }
-
-}
-
-/**
- * This is the context image cache.
- * This caches images on the basis of the given context.
- * Common images in different contexts are currently not handled.
- * There are two possiblities, each context handles its own images
- * and renderers can cache information or images are shared and
- * all information is retained.
- * Once a context is removed then all images are placed into a
- * weak hashmap so they may be garbage collected.
- */
-class ContextImageCache implements ImageCache {
-
- // if this cache is collective then images can be shared
- // among contexts, this implies that the base directory
- // is either the same or does not effect the images being
- // loaded
- private boolean collective;
- private Map contextStore = Collections.synchronizedMap(new java.util.HashMap());
- private Set invalid = null;
- private Map refStore = null;
- private ReferenceQueue refQueue = new ReferenceQueue();
-
- public ContextImageCache(boolean col) {
- collective = col;
- if (collective) {
- refStore = Collections.synchronizedMap(new java.util.HashMap());
- invalid = Collections.synchronizedSet(new java.util.HashSet());
- }
- }
-
- // sync around lookups and puts
- // another sync around load for a particular image
- public FopImage getImage(String url, FOUserAgent context) {
- ImageLoader im = null;
- // this protects the finding or creating of a new
- // ImageLoader for multi threads
- synchronized (this) {
- if (collective && invalid.contains(url)) {
- return null;
- }
- Context con = (Context) contextStore.get(context);
- if (con == null) {
- con = new Context(context, collective);
- contextStore.put(context, con);
- } else {
- if (con.invalid(url)) {
- return null;
- }
- im = con.getImage(url);
- }
- if (im == null && collective) {
- Iterator i = contextStore.values().iterator();
- while (i.hasNext()) {
- Context c = (Context)i.next();
- if (c != con) {
- im = c.getImage(url);
- if (im != null) {
- break;
- }
- }
- }
- if (im == null) {
- Reference ref = (Reference)refStore.get(url);
- if (ref != null) {
- im = (ImageLoader) ref.get();
- if (im == null) {
- //Remove key if its value has been garbage collected
- refStore.remove(url);
- }
- }
- }
- }
-
- if (im != null) {
- con.putImage(url, im);
- } else {
- im = con.getImage(url, this);
- }
- }
-
- // the ImageLoader is synchronized so images with the
- // same url will not be loaded at the same time
- if (im != null) {
- return im.loadImage();
- }
- return null;
- }
-
- public void releaseImage(String url, FOUserAgent context) {
- Context con = (Context) contextStore.get(context);
- if (con != null) {
- if (collective) {
- ImageLoader im = con.getImage(url);
- refStore.put(url, wrapInReference(im, url));
- }
- con.releaseImage(url);
- }
- }
-
- public void invalidateImage(String url, FOUserAgent context) {
- if (collective) {
- // cap size of invalid list
- if (invalid.size() > 100) {
- invalid.clear();
- }
- invalid.add(url);
- }
- Context con = (Context) contextStore.get(context);
- if (con != null) {
- con.invalidateImage(url);
- }
- }
-
- private Reference wrapInReference(Object obj, Object key) {
- return new SoftReferenceWithKey(obj, key, refQueue);
- }
-
- private static class SoftReferenceWithKey extends SoftReference {
-
- private Object key;
-
- public SoftReferenceWithKey(Object referent, Object key, ReferenceQueue q) {
- super(referent, q);
- this.key = key;
- }
- }
-
- public void removeContext(FOUserAgent context) {
- Context con = (Context) contextStore.get(context);
- if (con != null) {
- if (collective) {
- Map images = con.getImages();
- Iterator iter = images.entrySet().iterator();
- while (iter.hasNext()) {
- Entry entry = (Entry)iter.next();
- refStore.put(entry.getKey(),
- wrapInReference(entry.getValue(), entry.getKey()));
- }
- }
- contextStore.remove(context);
- }
- //House-keeping (remove cleared references)
- checkReferenceQueue();
- }
-
- /**
- * Checks the reference queue if any references have been cleared and removes them from the
- * cache.
- */
- private void checkReferenceQueue() {
- SoftReferenceWithKey ref;
- while ((ref = (SoftReferenceWithKey)refQueue.poll()) != null) {
- refStore.remove(ref.key);
- }
- }
-
- class Context {
- private Map images = Collections.synchronizedMap(new java.util.HashMap());
- private Set invalid = null;
- private FOUserAgent userAgent;
-
- public Context(FOUserAgent ua, boolean inv) {
- userAgent = ua;
- if (inv) {
- invalid = Collections.synchronizedSet(new java.util.HashSet());
- }
- }
-
- public ImageLoader getImage(String url, ImageCache c) {
- if (images.containsKey(url)) {
- return (ImageLoader) images.get(url);
- }
- ImageLoader loader = new ImageLoader(url, c, userAgent);
- images.put(url, loader);
- return loader;
- }
-
- public void putImage(String url, ImageLoader image) {
- images.put(url, image);
- }
-
- public ImageLoader getImage(String url) {
- return (ImageLoader) images.get(url);
- }
-
- public void releaseImage(String url) {
- images.remove(url);
- }
-
- public Map getImages() {
- return images;
- }
-
- public void invalidateImage(String url) {
- invalid.add(url);
- }
-
- public boolean invalid(String url) {
- return invalid.contains(url);
- }
-
- }
-
- /** {@inheritDoc} */
- public void clearAll() {
- this.refStore.clear();
- this.invalid.clear();
- //The context-sensitive caches are not cleared so there are no negative side-effects
- //in a multi-threaded environment. Not that it's a good idea to use this method at
- //all except in testing environments. If such a calls is necessary in normal environments
- //we need to check on memory leaks!
- }
-
-}
-
-/**
- * Encapsulates a class of type FopImage by holding its class name.
- * This allows dynamic loading of the class at runtime.
- */
-class ImageProvider {
-
- private String name = null;
-
- private String className = null;
-
- private boolean checked = false;
-
- private Class clazz = null;
-
- /**
- * Creates an ImageProvider with a given name and implementing class.
- * The class name should refer to a class of type {@link FopImage}.
- * However, this is not checked on construction.
- * @param name The name of the provider
- * @param className The full class name of the class implementing this provider
- */
- public ImageProvider(String name, String className) {
- setName(name);
- setClassName(className);
- }
-
- /**
- * Returns the provider name.
- * @return The provider name
- */
- public String getName() {
- return name;
- }
-
- private void setName(String name) {
- this.name = name;
- }
-
- /**
- * Returns the implementing class name.
- * @return The implementing class name
- */
- public String getClassName() {
- return className;
- }
-
- private void setClassName(String className) {
- this.className = className;
- }
-
- /**
- * Returns the implementing class as a {@link Class} object.
- * @return The implementing class or null if it couldn't be loaded.
- */
- public Class getImplementingClass() {
- if (!checked) {
- try {
- clazz = Class.forName(getClassName());
- } catch (ClassNotFoundException cnfe) {
- //nop
- } catch (LinkageError le) {
- // This can happen if fop was build with support for a
- // particular provider (e.g. a binary fop distribution)
- // but the required support files (e.g. jai, jimi) are not
- // available in the current runtime environment.
- ImageFactory.log.debug("Image support provider " + getName()
- + " could not be loaded. If " + getName() + " should be"
- + " available please make sure all required external libraries"
- + " are on the classpath.");
- }
- checked = true;
- }
- return clazz;
- }
-}
-
-/**
- * Holds a mime type for a particular image format plus a list of
- * {@link ImageProvider} objects which support the particular image format.
- */
-class ImageMimeType {
-
- private String mimeType = null;
-
- private List providers = null;
-
- /**
- * Constructor for a particular mime type.
- * @param mimeType The mime type
- */
- public ImageMimeType(String mimeType) {
- setMimeType(mimeType);
- }
-
- /**
- * Returns the mime type.
- * @return The mime type
- */
- public String getMimeType() {
- return mimeType;
- }
-
- private void setMimeType(String mimeType) {
- this.mimeType = mimeType;
- }
-
- /**
- * Returns the class from the first available provider.
- * @return The first available class or null if none can be found
- */
- public Class getFirstImplementingClass() {
- if (providers == null) {
- return null;
- }
- for (Iterator it = providers.iterator(); it.hasNext();) {
- ImageProvider ip = (ImageProvider)it.next();
- Class clazz = ip.getImplementingClass();
- if (clazz != null) {
- return clazz;
- }
- }
- return null;
- }
-
- /**
- * Adds a new provider.
- * The provider is added to the end of the current provider list.
- * @param The new provider to add
- */
- public void addProvider(ImageProvider provider) {
- if (providers == null) {
- providers = new ArrayList(4); // Assume we only have a few providers
- }
- if (!providers.contains(provider)) {
- providers.add(provider);
- }
- }
-} \ No newline at end of file
diff --git a/src/java/org/apache/fop/image/ImageLoader.java b/src/java/org/apache/fop/image/ImageLoader.java
deleted file mode 100644
index 111ef919f..000000000
--- a/src/java/org/apache/fop/image/ImageLoader.java
+++ /dev/null
@@ -1,64 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * Class to load images.
- */
-class ImageLoader {
-
- private String url;
- private ImageCache cache;
- private boolean valid = true;
- private FOUserAgent userAgent;
- private FopImage image = null;
-
- /**
- * Main constructor.
- * @param url URL to the image
- * @param cache Image cache
- * @param ua User agent
- */
- public ImageLoader(String url, ImageCache cache, FOUserAgent ua) {
- this.url = url;
- this.cache = cache;
- this.userAgent = ua;
- }
-
- /**
- * Loads the image.
- * @return the loaded image
- */
- public synchronized FopImage loadImage() {
- if (!valid || image != null) {
- return image;
- }
- ImageFactory imageFactory = userAgent.getFactory().getImageFactory();
- image = imageFactory.loadImage(url, userAgent);
- if (image == null) {
- cache.invalidateImage(url, userAgent);
- valid = false;
- }
- return image;
- }
-
-}
diff --git a/src/java/org/apache/fop/image/JAIImage.java b/src/java/org/apache/fop/image/JAIImage.java
deleted file mode 100644
index 8b3074052..000000000
--- a/src/java/org/apache/fop/image/JAIImage.java
+++ /dev/null
@@ -1,194 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// AWT
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.BufferedImage;
-import java.awt.Color;
-
-// JAI
-import javax.media.jai.JAI;
-import javax.media.jai.RenderedOp;
-
-import org.apache.commons.io.IOUtils;
-// Sun codec
-import com.sun.media.jai.codec.FileCacheSeekableStream;
-
-/**
- * FopImage object using JAI.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class JAIImage extends AbstractFopImage {
-
- /**
- * Create a new JAI image.
- *
- * @param imgInfo the image info for this JAI image
- */
- public JAIImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- }
-
- /**
- * {@inheritDoc}
- */
- protected boolean loadDimensions() {
- if (this.bitmaps == null) {
- loadImage();
- }
- return this.bitmaps != null;
- }
-
- /**
- * {@inheritDoc}
- */
- protected boolean loadBitmap() {
- if (this.bitmaps == null) {
- loadImage();
- }
-
- return this.bitmaps != null;
- }
-
- /**
- * Loads the image from the inputstream
- */
- protected void loadImage() {
- com.sun.media.jai.codec.FileCacheSeekableStream seekableInput = null;
- RenderedOp imageOp = null;
- try {
- seekableInput = new FileCacheSeekableStream(inputStream);
- imageOp = JAI.create("stream", seekableInput);
-
- this.height = imageOp.getHeight();
- this.width = imageOp.getWidth();
-
- ColorModel cm = imageOp.getColorModel();
- //this.bitsPerPixel = 8;
- this.bitsPerPixel = cm.getPixelSize();
-
- // TODO: the getRGB() function converts the image into the RGB
- // colorspace. However, here we assume the image colorspace is kept.
- // It should be either one of them, but not both. Unfortunately
- // there are other hacks for images in the CMYK colorspace (e.g. in
- // the PDF output) that would need to be changed as well.
-
- //this.colorSpace = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);
- this.colorSpace = cm.getColorSpace();
-
- BufferedImage imageData = imageOp.getAsBufferedImage();
- int[] tmpMap = imageData.getRGB(0, 0, this.width,
- this.height, null, 0, this.width);
-
- if (cm.hasAlpha()) {
- // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
- int transparencyType = cm.getTransparency();
-
- if (transparencyType == java.awt.Transparency.OPAQUE) {
- this.isTransparent = false;
- } else if (transparencyType == java.awt.Transparency.BITMASK) {
- if (cm instanceof IndexColorModel) {
- this.isTransparent = false;
- byte[] alphas = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] reds = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] greens = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] blues = new byte[
- ((IndexColorModel) cm).getMapSize()];
- ((IndexColorModel) cm).getAlphas(alphas);
- ((IndexColorModel) cm).getReds(reds);
- ((IndexColorModel) cm).getGreens(greens);
- ((IndexColorModel) cm).getBlues(blues);
- for (int i = 0;
- i < ((IndexColorModel) cm).getMapSize();
- i++) {
- if ((alphas[i] & 0xFF) == 0) {
- this.isTransparent = true;
- this.transparentColor = new Color(
- (int)(reds[i] & 0xFF),
- (int)(greens[i] & 0xFF),
- (int)(blues[i] & 0xFF));
- break;
- }
- }
- } else {
- // TRANSLUCENT
- /*
- * this.isTransparent = false;
- * for (int i = 0; i < this.width * this.height; i++) {
- * if (cm.getAlpha(tmpMap[i]) == 0) {
- * this.isTransparent = true;
- * this.transparentColor = new PDFColor(cm.getRed(tmpMap[i]),
- * cm.getGreen(tmpMap[i]), cm.getBlue(tmpMap[i]));
- * break;
- * }
- * }
- * // or use special API...
- */
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
-
- // Should take care of the ColorSpace and bitsPerPixel
- this.bitmaps = new byte[this.width * this.height * 3];
- for (int i = 0; i < this.height; i++) {
- for (int j = 0; j < this.width; j++) {
- int p = tmpMap[i * this.width + j];
- int r = (p >> 16) & 0xFF;
- int g = (p >> 8) & 0xFF;
- int b = (p) & 0xFF;
- this.bitmaps[3 * (i * this.width + j)] = (byte)(r & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 1] = (byte)(g & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 2] = (byte)(b & 0xFF);
- }
- }
-
- } catch (Exception ex) {
- log.error("Error while loading image (JAI): " + ex.getMessage(), ex);
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- if (imageOp != null) {
- imageOp.dispose();
- }
- if (seekableInput != null) {
- IOUtils.closeQuietly(seekableInput);
- }
- }
- }
-
- /** {@inheritDoc} */
- protected boolean loadOriginalData() {
- return loadDefaultOriginalData();
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/JimiImage.java b/src/java/org/apache/fop/image/JimiImage.java
deleted file mode 100644
index 49fb0b2e0..000000000
--- a/src/java/org/apache/fop/image/JimiImage.java
+++ /dev/null
@@ -1,186 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import java.awt.image.ImageProducer;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.color.ColorSpace;
-import java.awt.Color;
-
-import org.apache.commons.io.IOUtils;
-
-// Jimi
-import com.sun.jimi.core.Jimi;
-
-/**
- * FopImage object for several images types, using Jimi.
- * See Jimi documentation for supported image types.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class JimiImage extends AbstractFopImage {
-
- /**
- * Create a new Jimi image.
- *
- * @param imgInfo the image info for this Jimi image
- */
- public JimiImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- }
-
- /**
- * {@inheritDoc}
- */
- protected boolean loadDimensions() {
- if (this.bitmaps == null) {
- loadImage();
- }
-
- return this.bitmaps != null;
- }
-
- /**
- * {@inheritDoc}
- */
- protected boolean loadBitmap() {
- if (this.bitmaps == null) {
- loadImage();
- }
-
- return this.bitmaps != null;
- }
-
- /**
- * Loads the image from the inputstream
- */
- protected void loadImage() {
- int[] tmpMap = null;
- try {
- ImageProducer ip = Jimi.getImageProducer(inputStream,
- Jimi.SYNCHRONOUS | Jimi.IN_MEMORY);
- FopImageConsumer consumer = new FopImageConsumer(ip);
- ip.startProduction(consumer);
-
- while (!consumer.isImageReady()) {
- Thread.sleep(500);
- }
- this.height = consumer.getHeight();
- this.width = consumer.getWidth();
-
- try {
- tmpMap = consumer.getImage();
- } catch (Exception ex) {
- log.error("Image grabbing interrupted", ex);
- return;
- }
-
- ColorModel cm = consumer.getColorModel();
- this.bitsPerPixel = 8;
- // this.bitsPerPixel = cm.getPixelSize();
- this.colorSpace = ColorSpace.getInstance(ColorSpace.CS_LINEAR_RGB);
- if (cm.hasAlpha()) {
- // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT
- int transparencyType = cm.getTransparency();
- if (transparencyType == java.awt.Transparency.OPAQUE) {
- this.isTransparent = false;
- } else if (transparencyType == java.awt.Transparency.BITMASK) {
- if (cm instanceof IndexColorModel) {
- this.isTransparent = false;
- byte[] alphas = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] reds = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] greens = new byte[
- ((IndexColorModel) cm).getMapSize()];
- byte[] blues = new byte[
- ((IndexColorModel) cm).getMapSize()];
- ((IndexColorModel) cm).getAlphas(alphas);
- ((IndexColorModel) cm).getReds(reds);
- ((IndexColorModel) cm).getGreens(greens);
- ((IndexColorModel) cm).getBlues(blues);
- for (int i = 0;
- i < ((IndexColorModel) cm).getMapSize();
- i++) {
- if ((alphas[i] & 0xFF) == 0) {
- this.isTransparent = true;
- this.transparentColor = new Color(
- (int)(reds[i] & 0xFF),
- (int)(greens[i] & 0xFF),
- (int)(blues[i] & 0xFF));
- break;
- }
- }
- } else {
- // TRANSLUCENT
- /*
- * this.isTransparent = false;
- * for (int i = 0; i < this.width * this.height; i++) {
- * if (cm.getAlpha(tmpMap[i]) == 0) {
- * this.isTransparent = true;
- * this.transparentColor = new PDFColor(cm.getRed(tmpMap[i]),
- * cm.getGreen(tmpMap[i]), cm.getBlue(tmpMap[i]));
- * break;
- * }
- * }
- */
- // use special API...
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
- } else {
- this.isTransparent = false;
- }
- } catch (Throwable ex) {
- log.error("Error while loading image (Jimi): " + ex.getMessage(), ex);
- return;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
-
-
- // Should take care of the ColorSpace and bitsPerPixel
- this.bitmaps = new byte[this.width * this.height * 3];
- for (int i = 0; i < this.height; i++) {
- for (int j = 0; j < this.width; j++) {
- int p = tmpMap[i * this.width + j];
- int r = (p >> 16) & 0xFF;
- int g = (p >> 8) & 0xFF;
- int b = (p) & 0xFF;
- this.bitmaps[3 * (i * this.width + j)] = (byte)(r & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 1] = (byte)(g & 0xFF);
- this.bitmaps[3 * (i * this.width + j) + 2] = (byte)(b & 0xFF);
- }
- }
- }
-
- /** {@inheritDoc} */
- protected boolean loadOriginalData() {
- return loadDefaultOriginalData();
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/JpegImage.java b/src/java/org/apache/fop/image/JpegImage.java
deleted file mode 100644
index 1de6b0d48..000000000
--- a/src/java/org/apache/fop/image/JpegImage.java
+++ /dev/null
@@ -1,239 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-import java.awt.color.ColorSpace;
-import java.awt.color.ICC_Profile;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.fop.util.CMYKColorSpace;
-
-/**
- * FopImage object for JPEG images, Using Java native classes.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class JpegImage extends AbstractFopImage {
- private ICC_Profile iccProfile = null;
- private boolean foundICCProfile = false;
- private boolean hasAPPEMarker = false;
-
- /**
- * Create a jpeg image with the info.
- *
- * @param imgInfo the image info for this jpeg
- */
- public JpegImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- }
-
- /**
- * Load the original jpeg data.
- * This loads the original jpeg data and reads the color space,
- * and icc profile if any.
- *
- * @return true if loaded false for any error
- */
- protected boolean loadOriginalData() {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- ByteArrayOutputStream iccStream = null;
- int index = 0;
- boolean cont = true;
-
- try {
- byte[] readBuf = new byte[4096];
- int bytesRead;
- while ((bytesRead = inputStream.read(readBuf)) != -1) {
- baos.write(readBuf, 0, bytesRead);
- }
- } catch (java.io.IOException ex) {
- log.error("Error while loading image (Jpeg): " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
-
- this.raw = baos.toByteArray();
- this.bitsPerPixel = 8;
- this.isTransparent = false;
-
- //Check for SOI (Start of image) marker (FFD8)
- if (this.raw.length > (index + 2)
- && uByte(this.raw[index]) == 255 /*0xFF*/
- && uByte(this.raw[index + 1]) == 216 /*0xD8*/) {
- index += 2;
-
- while (index < this.raw.length && cont) {
- //check to be sure this is the begining of a header
- if (this.raw.length > (index + 2)
- && uByte(this.raw[index]) == 255 /*0xFF*/) {
-
- //192 or 194 are the header bytes that contain
- // the jpeg width height and color depth.
- if (uByte(this.raw[index + 1]) == 192 /*0xC0*/
- || uByte(this.raw[index + 1]) == 194 /*0xC2*/) {
-
- this.height = calcBytes(this.raw[index + 5],
- this.raw[index + 6]);
- this.width = calcBytes(this.raw[index + 7],
- this.raw[index + 8]);
-
- int numComponents = this.raw[index + 9];
- if (numComponents == 1) {
- this.colorSpace = ColorSpace.getInstance(
- ColorSpace.CS_GRAY);
- } else if (numComponents == 3) {
- this.colorSpace = ColorSpace.getInstance(
- ColorSpace.CS_LINEAR_RGB);
- } else if (numComponents == 4) {
- // howto create CMYK color space
- /*
- this.colorSpace = ColorSpace.getInstance(
- ColorSpace.CS_CIEXYZ);
- */
- this.colorSpace = CMYKColorSpace.getInstance();
- } else {
- log.error("Unknown ColorSpace for image: "
- + "");
- return false;
- }
-
- if (foundICCProfile) {
- cont = false;
- break;
- }
- index += calcBytes(this.raw[index + 2],
- this.raw[index + 3]) + 2;
-
- } else if (uByte(this.raw[index + 1]) == 226 /*0xE2*/
- && this.raw.length > (index + 60)) {
- // Check if ICC profile
- byte[] iccString = new byte[11];
- System.arraycopy(this.raw, index + 4,
- iccString, 0, 11);
-
- if ("ICC_PROFILE".equals(new String(iccString))) {
- int chunkSize = calcBytes(
- this.raw[index + 2],
- this.raw[index + 3]) + 2;
-
- if (iccStream == null) {
- iccStream = new ByteArrayOutputStream();
- }
- iccStream.write(this.raw,
- index + 18, chunkSize - 18);
-
- }
-
- index += calcBytes(this.raw[index + 2],
- this.raw[index + 3]) + 2;
- // Check for Adobe APPE Marker
- } else if ((uByte(this.raw[index]) == 0xff
- && uByte(this.raw[index + 1]) == 0xee
- && uByte(this.raw[index + 2]) == 0
- && uByte(this.raw[index + 3]) == 14
- && "Adobe".equals(new String(this.raw, index + 4, 5)))) {
- // The reason for reading the APPE marker is that Adobe Photoshop
- // generates CMYK JPEGs with inverted values. The correct thing
- // to do would be to interpret the values in the marker, but for now
- // only assume that if APPE marker is present and colorspace is CMYK,
- // the image is inverted.
- hasAPPEMarker = true;
-
- index += calcBytes(this.raw[index + 2],
- this.raw[index + 3]) + 2;
- } else {
- index += calcBytes(this.raw[index + 2],
- this.raw[index + 3]) + 2;
- }
-
- } else {
- cont = false;
- }
- }
- } else {
- log.error("Error while loading "
- + "JpegImage - Invalid JPEG Header.");
- return false;
- }
- if (iccStream != null && iccStream.size() > 0) {
- int padding = (8 - (iccStream.size() % 8)) % 8;
- if (padding != 0) {
- try {
- iccStream.write(new byte[padding]);
- } catch (Exception ex) {
- log.error("Error while aligning ICC stream: " + ex.getMessage(), ex);
- return false;
- }
- }
- try {
- iccProfile = ICC_Profile.getInstance(iccStream.toByteArray());
- } catch (IllegalArgumentException iae) {
- log.warn("An ICC profile is present but it is invalid ("
- + iae.getMessage() + "). The color profile will be ignored. ("
- + this.getOriginalURI() + ")");
- }
- if (iccProfile.getNumComponents() != this.colorSpace.getNumComponents()) {
- log.warn("The number of components of the ICC profile ("
- + iccProfile.getNumComponents()
- + ") doesn't match the image ("
- + this.colorSpace.getNumComponents()
- + "). Ignoring the ICC color profile.");
- this.iccProfile = null;
- }
- } else if (this.colorSpace == null) {
- log.error("ColorSpace not specified for JPEG image");
- return false;
- }
- if (hasAPPEMarker && this.colorSpace.getType() == ColorSpace.TYPE_CMYK) {
- if (log.isDebugEnabled()) {
- log.debug("JPEG has an Adobe APPE marker. Note: CMYK Image will be inverted. ("
- + this.getOriginalURI() + ")");
- }
- this.invertImage = true;
- }
- return true;
- }
-
- /**
- * Get the ICC profile for this Jpeg image.
- *
- * @return the icc profile or null if not found
- */
- public ICC_Profile getICCProfile() {
- return iccProfile;
- }
-
- private int calcBytes(byte bOne, byte bTwo) {
- return (uByte(bOne) * 256) + uByte(bTwo);
- }
-
- private int uByte(byte bIn) {
- if (bIn < 0) {
- return 256 + bIn;
- } else {
- return bIn;
- }
- }
-}
-
diff --git a/src/java/org/apache/fop/image/PNGImage.java b/src/java/org/apache/fop/image/PNGImage.java
deleted file mode 100644
index c83d491f0..000000000
--- a/src/java/org/apache/fop/image/PNGImage.java
+++ /dev/null
@@ -1,87 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-import java.io.IOException;
-
-import org.apache.xmlgraphics.image.codec.png.PNGRed;
-import org.apache.xmlgraphics.image.codec.png.PNGDecodeParam;
-import org.apache.xmlgraphics.image.codec.util.SeekableStream;
-import org.apache.xmlgraphics.image.rendered.CachableRed;
-import org.apache.commons.io.IOUtils;
-
-/**
- * FopImage object using PNG
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class PNGImage extends XmlGraphicsCommonsImage {
-
- /**
- * Constructs a new PNGImage instance.
- * @param imgReader basic metadata for the image
- */
- public PNGImage(FopImage.ImageInfo imgReader) {
- super(imgReader);
- this.loaded = 0; //TODO The PNGReader cannot read the resolution, yet.
- }
-
- /**
- * {@inheritDoc}
- */
- protected CachableRed decodeImage(SeekableStream stream) throws IOException {
- PNGDecodeParam param = new PNGDecodeParam();
- param.setPerformGammaCorrection(true);
- param.setDisplayExponent(2.2f); // sRGB gamma
- PNGRed red = new PNGRed(stream, param);
- String unit = (String)red.getProperty("pixel_units");
- if ("Meters".equals(unit)) {
- this.dpiHorizontal = ((Integer)red.getProperty("x_pixels_per_unit")).intValue()
- * 25.4f / 1000f;
- this.dpiVertical = ((Integer)red.getProperty("y_pixels_per_unit")).intValue()
- * 25.4f / 1000f;
- }
- return red;
- }
-
- /**
- * Load the original PNG data.
- * This loads the original PNG data as is into memory.
- *
- * @return true if loaded false for any error
- */
- protected boolean loadOriginalData() {
- try {
- seekableInput.seek(0);
- this.raw = IOUtils.toByteArray(seekableInput);
-
- } catch (java.io.IOException ex) {
- log.error("Error while loading raw image: " + ex.getMessage(), ex);
- return false;
- } finally {
- IOUtils.closeQuietly(inputStream);
- inputStream = null;
- }
-
- return true;
- }
-
-}
diff --git a/src/java/org/apache/fop/image/TIFFImage.java b/src/java/org/apache/fop/image/TIFFImage.java
deleted file mode 100644
index d9a9fc022..000000000
--- a/src/java/org/apache/fop/image/TIFFImage.java
+++ /dev/null
@@ -1,207 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-import java.awt.color.ColorSpace;
-import java.io.IOException;
-
-import org.apache.xmlgraphics.image.codec.util.SeekableStream;
-import org.apache.xmlgraphics.image.codec.tiff.TIFFDirectory;
-import org.apache.xmlgraphics.image.codec.tiff.TIFFField;
-import org.apache.xmlgraphics.image.codec.tiff.TIFFImageDecoder;
-import org.apache.xmlgraphics.image.rendered.CachableRed;
-import org.apache.commons.io.IOUtils;
-
-/**
- * TIFF implementation using the Batik codecs.
- */
-public class TIFFImage extends XmlGraphicsCommonsImage {
-
- private int compression = 0;
- private int stripCount = 0;
- private long stripOffset = 0;
- private long stripLength = 0;
- private int fillOrder = 1;
-
- /**
- * Constructs a new BatikImage instance.
- * @param imgReader basic metadata for the image
- */
- public TIFFImage(FopImage.ImageInfo imgReader) {
- super(imgReader);
- }
-
- /**
- * The compression type set in the TIFF directory
- * @return the TIFF compression type
- */
- public int getCompression() {
- return compression;
- }
-
- /**
- * The number of strips in the image
- * @return the number of strips in the image
- */
- public int getStripCount() {
- return stripCount;
- }
-
- /**
- * {@inheritDoc}
- * org.apache.xmlgraphics.image.codec.util.SeekableStream)
- */
- protected CachableRed decodeImage(SeekableStream stream) throws IOException {
- org.apache.xmlgraphics.image.codec.tiff.TIFFImage img
- = new org.apache.xmlgraphics.image.codec.tiff.TIFFImage
- (stream, null, 0);
- TIFFDirectory dir = (TIFFDirectory)img.getProperty("tiff_directory");
- TIFFField fld = dir.getField(TIFFImageDecoder.TIFF_RESOLUTION_UNIT);
- int resUnit = fld.getAsInt(0);
- fld = dir.getField(TIFFImageDecoder.TIFF_X_RESOLUTION);
- double xRes = fld.getAsDouble(0);
- fld = dir.getField(TIFFImageDecoder.TIFF_Y_RESOLUTION);
- double yRes = fld.getAsDouble(0);
- switch (resUnit) {
- case 2: //inch
- this.dpiHorizontal = xRes;
- this.dpiVertical = yRes;
- break;
- case 3: //cm
- this.dpiHorizontal = xRes * 2.54f;
- this.dpiVertical = yRes * 2.54f;
- break;
- default:
- //ignored
- log.warn("Cannot determine bitmap resolution."
- + " Unimplemented resolution unit: " + resUnit);
- }
- fld = dir.getField(TIFFImageDecoder.TIFF_COMPRESSION);
- if (fld != null) {
- compression = fld.getAsInt(0);
- }
- fld = dir.getField(TIFFImageDecoder.TIFF_BITS_PER_SAMPLE);
- if (fld != null) {
- bitsPerPixel = fld.getAsInt(0);
- }
- fld = dir.getField(TIFFImageDecoder.TIFF_ROWS_PER_STRIP);
- if (fld == null) {
- stripCount = 1;
- } else {
- stripCount = (int)(dir.getFieldAsLong(TIFFImageDecoder.TIFF_IMAGE_LENGTH)
- / fld.getAsLong(0));
- }
-
- fld = dir.getField(TIFFImageDecoder.TIFF_FILL_ORDER);
- if (fld != null) {
- fillOrder = fld.getAsInt(0);
- }
-
- stripOffset = dir.getField(TIFFImageDecoder.TIFF_STRIP_OFFSETS).getAsLong(0);
- stripLength = dir.getField(TIFFImageDecoder.TIFF_STRIP_BYTE_COUNTS).getAsLong(0);
-
- if (this.bitsPerPixel == 1) {
- this.colorSpace = ColorSpace.getInstance(ColorSpace.CS_GRAY);
- }
- return img;
- }
-
- /**
- * Load the original TIFF data.
- * This loads only strip 1 of the original TIFF data.
- *
- * @return true if loaded false for any error
- * {@inheritDoc}
- */
- protected boolean loadOriginalData() {
- if (loadDimensions()) {
- byte[] readBuf = new byte[(int)stripLength];
- int bytesRead;
-
- try {
- this.seekableInput.reset();
- this.seekableInput.skip(stripOffset);
- bytesRead = seekableInput.read(readBuf);
- if (bytesRead != stripLength) {
- log.error("Error while loading image: length mismatch on read");
- return false;
- }
-
- // need to invert bytes if fill order = 2
- if (fillOrder == 2) {
- for (int i = 0; i < (int)stripLength; i++) {
- readBuf[i] = flipTable[readBuf[i] & 0xff];
- }
- }
- this.raw = readBuf;
-
- return true;
- } catch (IOException ioe) {
- log.error("Error while loading image strip 1 (TIFF): ", ioe);
- return false;
- } finally {
- IOUtils.closeQuietly(seekableInput);
- IOUtils.closeQuietly(inputStream);
- this.seekableInput = null;
- this.inputStream = null;
- this.cr = null;
- }
- }
- return false;
- }
-
- // Table to be used when fillOrder = 2, for flipping bytes.
- // Copied from XML Graphics Commons' TIFFFaxDecoder class
- private static byte[] flipTable = {
- 0, -128, 64, -64, 32, -96, 96, -32,
- 16, -112, 80, -48, 48, -80, 112, -16,
- 8, -120, 72, -56, 40, -88, 104, -24,
- 24, -104, 88, -40, 56, -72, 120, -8,
- 4, -124, 68, -60, 36, -92, 100, -28,
- 20, -108, 84, -44, 52, -76, 116, -12,
- 12, -116, 76, -52, 44, -84, 108, -20,
- 28, -100, 92, -36, 60, -68, 124, -4,
- 2, -126, 66, -62, 34, -94, 98, -30,
- 18, -110, 82, -46, 50, -78, 114, -14,
- 10, -118, 74, -54, 42, -86, 106, -22,
- 26, -102, 90, -38, 58, -70, 122, -6,
- 6, -122, 70, -58, 38, -90, 102, -26,
- 22, -106, 86, -42, 54, -74, 118, -10,
- 14, -114, 78, -50, 46, -82, 110, -18,
- 30, -98, 94, -34, 62, -66, 126, -2,
- 1, -127, 65, -63, 33, -95, 97, -31,
- 17, -111, 81, -47, 49, -79, 113, -15,
- 9, -119, 73, -55, 41, -87, 105, -23,
- 25, -103, 89, -39, 57, -71, 121, -7,
- 5, -123, 69, -59, 37, -91, 101, -27,
- 21, -107, 85, -43, 53, -75, 117, -11,
- 13, -115, 77, -51, 45, -83, 109, -19,
- 29, -99, 93, -35, 61, -67, 125, -3,
- 3, -125, 67, -61, 35, -93, 99, -29,
- 19, -109, 83, -45, 51, -77, 115, -13,
- 11, -117, 75, -53, 43, -85, 107, -21,
- 27, -101, 91, -37, 59, -69, 123, -5,
- 7, -121, 71, -57, 39, -89, 103, -25,
- 23, -105, 87, -41, 55, -73, 119, -9,
- 15, -113, 79, -49, 47, -81, 111, -17,
- 31, -97, 95, -33, 63, -65, 127, -1,
- };
- // end
-}
diff --git a/src/java/org/apache/fop/image/XMLImage.java b/src/java/org/apache/fop/image/XMLImage.java
deleted file mode 100644
index 261dc8494..000000000
--- a/src/java/org/apache/fop/image/XMLImage.java
+++ /dev/null
@@ -1,78 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-// Java
-import org.w3c.dom.Document;
-import javax.xml.parsers.SAXParserFactory;
-
-/**
- * This is an implementation for XML-based images such as SVG.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public class XMLImage extends AbstractFopImage {
-
- private Document doc;
- private String namespace = "";
-
- /**
- * @see org.apache.fop.image.AbstractFopImage#AbstractFopImage(FopImage.ImageInfo)
- */
- public XMLImage(FopImage.ImageInfo imgInfo) {
- super(imgInfo);
- if (imgInfo.data instanceof Document) {
- doc = (Document)imgInfo.data;
- loaded = loaded | ORIGINAL_DATA;
- }
- namespace = imgInfo.str;
- }
-
- /**
- * Returns the fully qualified classname of an XML parser for
- * Batik classes that apparently need it (error messages, perhaps)
- * @return an XML parser classname
- */
- public static String getParserName() {
- try {
- SAXParserFactory factory = SAXParserFactory.newInstance();
- return factory.newSAXParser().getXMLReader().getClass().getName();
- } catch (Exception e) {
- return null;
- }
- }
-
- /**
- * Returns the XML document as a DOM document.
- * @return the DOM document
- */
- public Document getDocument() {
- return this.doc;
- }
-
- /**
- * Returns the namespace of the XML document.
- * @return the namespace
- */
- public String getNameSpace() {
- return this.namespace;
- }
-}
diff --git a/src/java/org/apache/fop/image/XmlGraphicsCommonsImage.java b/src/java/org/apache/fop/image/XmlGraphicsCommonsImage.java
deleted file mode 100644
index 662673726..000000000
--- a/src/java/org/apache/fop/image/XmlGraphicsCommonsImage.java
+++ /dev/null
@@ -1,239 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image;
-
-import java.awt.Color;
-import java.awt.Transparency;
-import java.awt.image.ColorModel;
-import java.awt.image.IndexColorModel;
-import java.awt.image.RenderedImage;
-import java.awt.image.WritableRaster;
-import java.awt.image.BufferedImage;
-import java.io.IOException;
-
-import org.apache.xmlgraphics.image.GraphicsUtil;
-import org.apache.xmlgraphics.image.codec.util.SeekableStream;
-import org.apache.xmlgraphics.image.codec.util.MemoryCacheSeekableStream;
-import org.apache.xmlgraphics.image.codec.util.FileCacheSeekableStream;
-import org.apache.xmlgraphics.image.rendered.CachableRed;
-
-import org.apache.commons.io.IOUtils;
-
-/**
- * Abstract FopImage implementation which uses the internal codecs from XML Graphics Commons.
- *
- * @see AbstractFopImage
- * @see FopImage
- */
-public abstract class XmlGraphicsCommonsImage extends AbstractFopImage {
-
- private byte[] softMask = null;
-
- /**
- * The InputStream wrapped into a SeekableStream for decoding.
- */
- protected SeekableStream seekableInput = null;
-
- /**
- * The Batik representation of the image
- */
- protected CachableRed cr = null;
-
- /**
- * Constructs a new BatikImage instance.
- * @param imgReader basic metadata for the image
- */
- public XmlGraphicsCommonsImage(FopImage.ImageInfo imgReader) {
- super(imgReader);
- }
-
- /**
- * {@inheritDoc}
- */
- protected boolean loadDimensions() {
- if (seekableInput == null && inputStream != null) {
- try {
- seekableInput = new FileCacheSeekableStream(inputStream);
- } catch (IOException ioe) {
- seekableInput = new MemoryCacheSeekableStream(inputStream);
- }
- try {
- this.bitsPerPixel = 8;
- cr = decodeImage(seekableInput);
- this.height = cr.getHeight();
- this.width = cr.getWidth();
- this.isTransparent = false;
- this.softMask = null;
- ColorModel cm = cr.getColorModel();
-
- this.height = cr.getHeight();
- this.width = cr.getWidth();
- this.isTransparent = false;
- this.softMask = null;
-
- int transparencyType = cm.getTransparency();
- if (cm instanceof IndexColorModel) {
- if (transparencyType == Transparency.BITMASK) {
- // Use 'transparent color'.
- IndexColorModel icm = (IndexColorModel)cm;
- int numColor = icm.getMapSize();
- byte [] alpha = new byte[numColor];
- icm.getAlphas(alpha);
- for (int i = 0; i < numColor; i++) {
- if ((alpha[i] & 0xFF) == 0) {
- this.isTransparent = true;
- int red = (icm.getRed (i)) & 0xFF;
- int grn = (icm.getGreen(i)) & 0xFF;
- int blu = (icm.getBlue (i)) & 0xFF;
- this.transparentColor = new Color(red, grn, blu);
- break;
- }
- }
- }
- } else {
- cr = GraphicsUtil.convertTosRGB(cr);
- }
-
- // Get our current ColorModel
- cm = cr.getColorModel();
- if (this.colorSpace == null) {
- this.colorSpace = cm.getColorSpace();
- }
- } catch (IOException ioe) {
- log.error("Error while loading image (Batik): " + ioe.getMessage(), ioe);
- IOUtils.closeQuietly(seekableInput);
- IOUtils.closeQuietly(inputStream);
- seekableInput = null;
- inputStream = null;
- return false;
- }
- }
- return this.height != -1;
- }
-
- /**
- * {@inheritDoc}
- */
- protected boolean loadBitmap() {
- if (this.bitmaps == null) {
- loadImage();
- }
-
- return this.bitmaps != null;
- }
-
- /**
- * {@inheritDoc}
- */
- public boolean hasSoftMask() {
- if (this.bitmaps == null && this.raw == null) {
- loadImage();
- }
-
- return (this.softMask != null);
- }
-
- /**
- * {@inheritDoc}
- */
- public byte[] getSoftMask() {
- if (this.bitmaps == null) {
- loadImage();
- }
-
- return this.softMask;
- }
-
- /**
- * Decodes the image from the stream.
- * @param stream the stream to read the image from
- * @return the decoded image
- * @throws IOException in case an I/O problem occurs
- */
- protected abstract CachableRed decodeImage(SeekableStream stream) throws IOException;
-
- /**
- * Loads the image from the InputStream.
- */
- protected void loadImage() {
- if (loadDimensions()) {
- try {
- if (cr == null) {
- throw new IllegalStateException(
- "Can't load the bitmaps data without the CachableRed instance");
- }
-
- // Get our current ColorModel
- ColorModel cm = cr.getColorModel();
-
- // It has an alpha channel so generate a soft mask.
- if (!this.isTransparent && cm.hasAlpha()) {
- this.softMask = new byte[this.width * this.height];
- }
-
- this.bitmaps = new byte[this.width * this.height * 3];
-
- constructBitmaps(cr, this.bitmaps, this.softMask);
- } catch (Exception ex) {
- log.error("Error while loading image (Batik): " + ex.getMessage(), ex);
- } finally {
- // Make sure we clean up
- IOUtils.closeQuietly(seekableInput);
- IOUtils.closeQuietly(inputStream);
- seekableInput = null;
- inputStream = null;
- cr = null;
- }
- }
- }
-
- private static void constructBitmaps(RenderedImage red, byte[] bitmaps, byte[] softMask) {
- WritableRaster wr = (WritableRaster)red.getData();
- ColorModel cm = red.getColorModel();
- BufferedImage bi = new BufferedImage
- (cm, wr.createWritableTranslatedChild(0, 0),
- cm.isAlphaPremultiplied(), null);
- int width = red.getWidth();
- int height = red.getHeight();
- int [] tmpMap = new int[width];
- int idx = 0;
- int sfIdx = 0;
- for (int y = 0; y < height; y++) {
- tmpMap = bi.getRGB(0, y, width, 1, tmpMap, 0, width);
- if (softMask != null) {
- for (int x = 0; x < width; x++) {
- int pix = tmpMap[x];
- softMask[sfIdx++] = (byte)(pix >>> 24);
- bitmaps[idx++] = (byte)((pix >>> 16) & 0xFF);
- bitmaps[idx++] = (byte)((pix >>> 8) & 0xFF);
- bitmaps[idx++] = (byte)((pix) & 0xFF);
- }
- } else {
- for (int x = 0; x < width; x++) {
- int pix = tmpMap[x];
- bitmaps[idx++] = (byte)((pix >> 16) & 0xFF);
- bitmaps[idx++] = (byte)((pix >> 8) & 0xFF);
- bitmaps[idx++] = (byte)((pix) & 0xFF);
- }
- }
- }
- }
-
-} \ No newline at end of file
diff --git a/src/java/org/apache/fop/image/analyser/BMPReader.java b/src/java/org/apache/fop/image/analyser/BMPReader.java
deleted file mode 100644
index caca6f3dd..000000000
--- a/src/java/org/apache/fop/image/analyser/BMPReader.java
+++ /dev/null
@@ -1,134 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for BMP image type.
- *
- * @author Pankaj Narula
- * @version $Id$
- */
-public class BMPReader implements ImageReader {
-
- /** Length of the BMP header */
- protected static final int BMP_SIG_LENGTH = 46;
-
- /** offset to width */
- private static final int WIDTH_OFFSET = 18;
- /** offset to height */
- private static final int HEIGHT_OFFSET = 22;
- /** offset to horizontal res */
- private static final int HRES_OFFSET = 38;
- /** offset to vertical res */
- private static final int VRES_OFFSET = 42;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua) throws IOException {
- byte[] header = getDefaultHeader(bis);
- boolean supported = ((header[0] == (byte) 0x42)
- && (header[1] == (byte) 0x4d));
- if (supported) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.dpiHorizontal = ua.getFactory().getSourceResolution();
- info.dpiVertical = info.dpiHorizontal;
-
- getDimension(header, info);
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.inputStream = bis;
- return info;
- } else {
- return null;
- }
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/bmp";
- }
-
- private void getDimension(byte[] header, FopImage.ImageInfo info) {
- // little endian notation
- int byte1 = header[WIDTH_OFFSET] & 0xff;
- int byte2 = header[WIDTH_OFFSET + 1] & 0xff;
- int byte3 = header[WIDTH_OFFSET + 2] & 0xff;
- int byte4 = header[WIDTH_OFFSET + 3] & 0xff;
- long l = (long) ((byte4 << 24) | (byte3 << 16)
- | (byte2 << 8) | byte1);
- info.width = (int) (l & 0xffffffff);
-
- byte1 = header[HEIGHT_OFFSET] & 0xff;
- byte2 = header[HEIGHT_OFFSET + 1] & 0xff;
- byte3 = header[HEIGHT_OFFSET + 2] & 0xff;
- byte4 = header[HEIGHT_OFFSET + 3] & 0xff;
- l = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
- info.height = (int) (l & 0xffffffff);
-
- byte1 = header[HRES_OFFSET] & 0xff;
- byte2 = header[HRES_OFFSET + 1] & 0xff;
- byte3 = header[HRES_OFFSET + 2] & 0xff;
- byte4 = header[HRES_OFFSET + 3] & 0xff;
- l = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
- if (l > 0) {
- info.dpiHorizontal = l / 39.37d;
- }
-
- byte1 = header[VRES_OFFSET] & 0xff;
- byte2 = header[VRES_OFFSET + 1] & 0xff;
- byte3 = header[VRES_OFFSET + 2] & 0xff;
- byte4 = header[VRES_OFFSET + 3] & 0xff;
- l = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
- if (l > 0) {
- info.dpiVertical = l / 39.37d;
- }
- }
-
- private byte[] getDefaultHeader(InputStream imageStream)
- throws IOException {
- byte[] header = new byte[BMP_SIG_LENGTH];
- try {
- imageStream.mark(BMP_SIG_LENGTH + 1);
- imageStream.read(header);
- imageStream.reset();
- } catch (IOException ex) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ex;
- }
- return header;
- }
-
-}
diff --git a/src/java/org/apache/fop/image/analyser/EMFReader.java b/src/java/org/apache/fop/image/analyser/EMFReader.java
deleted file mode 100644
index d6e2f2975..000000000
--- a/src/java/org/apache/fop/image/analyser/EMFReader.java
+++ /dev/null
@@ -1,162 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for EMF image type.
- *
- * @author Peter Herweg
- */
-public class EMFReader implements ImageReader {
-
- /** Length of the EMF header */
- protected static final int EMF_SIG_LENGTH = 88;
-
- /** offset to signature */
- private static final int SIGNATURE_OFFSET = 40;
- /** offset to width */
- private static final int WIDTH_OFFSET = 32;
- /** offset to height */
- private static final int HEIGHT_OFFSET = 36;
- /** offset to horizontal resolution in pixel */
- private static final int HRES_PIXEL_OFFSET = 72;
- /** offset to vertical resolution in pixel */
- private static final int VRES_PIXEL_OFFSET = 76;
- /** offset to horizontal resolution in mm */
- private static final int HRES_MM_OFFSET = 80;
- /** offset to vertical resolution in mm */
- private static final int VRES_MM_OFFSET = 84;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua) throws IOException {
- byte[] header = getDefaultHeader(bis);
- boolean supported
- = ( (header[SIGNATURE_OFFSET + 0] == (byte) 0x20)
- && (header[SIGNATURE_OFFSET + 1] == (byte) 0x45)
- && (header[SIGNATURE_OFFSET + 2] == (byte) 0x4D)
- && (header[SIGNATURE_OFFSET + 3] == (byte) 0x46) );
-
- if (supported) {
- FopImage.ImageInfo info = getDimension(header);
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.inputStream = bis;
- return info;
- } else {
- return null;
- }
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/emf";
- }
-
- private FopImage.ImageInfo getDimension(byte[] header) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- long value = 0;
- int byte1;
- int byte2;
- int byte3;
- int byte4;
-
- // little endian notation
-
- //resolution
- byte1 = header[HRES_MM_OFFSET] & 0xff;
- byte2 = header[HRES_MM_OFFSET + 1] & 0xff;
- byte3 = header[HRES_MM_OFFSET + 2] & 0xff;
- byte4 = header[HRES_MM_OFFSET + 3] & 0xff;
- long hresMM = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
-
- byte1 = header[VRES_MM_OFFSET] & 0xff;
- byte2 = header[VRES_MM_OFFSET + 1] & 0xff;
- byte3 = header[VRES_MM_OFFSET + 2] & 0xff;
- byte4 = header[VRES_MM_OFFSET + 3] & 0xff;
- long vresMM = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
-
- byte1 = header[HRES_PIXEL_OFFSET] & 0xff;
- byte2 = header[HRES_PIXEL_OFFSET + 1] & 0xff;
- byte3 = header[HRES_PIXEL_OFFSET + 2] & 0xff;
- byte4 = header[HRES_PIXEL_OFFSET + 3] & 0xff;
- long hresPixel = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
-
- byte1 = header[VRES_PIXEL_OFFSET] & 0xff;
- byte2 = header[VRES_PIXEL_OFFSET + 1] & 0xff;
- byte3 = header[VRES_PIXEL_OFFSET + 2] & 0xff;
- byte4 = header[VRES_PIXEL_OFFSET + 3] & 0xff;
- long vresPixel = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
-
- info.dpiHorizontal = hresPixel / (hresMM / 25.4f);
- info.dpiVertical = vresPixel / (vresMM / 25.4f);
-
- //width
- byte1 = header[WIDTH_OFFSET] & 0xff;
- byte2 = header[WIDTH_OFFSET + 1] & 0xff;
- byte3 = header[WIDTH_OFFSET + 2] & 0xff;
- byte4 = header[WIDTH_OFFSET + 3] & 0xff;
- value = (long) ((byte4 << 24) | (byte3 << 16)
- | (byte2 << 8) | byte1);
- value = Math.round(value / 100f / 25.4f * info.dpiHorizontal);
- info.width = (int) (value & 0xffffffff);
-
- //height
- byte1 = header[HEIGHT_OFFSET] & 0xff;
- byte2 = header[HEIGHT_OFFSET + 1] & 0xff;
- byte3 = header[HEIGHT_OFFSET + 2] & 0xff;
- byte4 = header[HEIGHT_OFFSET + 3] & 0xff;
- value = (long) ((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | byte1);
- value = Math.round(value / 100f / 25.4f * info.dpiVertical);
- info.height = (int) (value & 0xffffffff);
-
- return info;
- }
-
- private byte[] getDefaultHeader(InputStream imageStream)
- throws IOException {
- byte[] header = new byte[EMF_SIG_LENGTH];
- try {
- imageStream.mark(EMF_SIG_LENGTH + 1);
- imageStream.read(header);
- imageStream.reset();
- } catch (IOException ex) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ex;
- }
- return header;
- }
-}
diff --git a/src/java/org/apache/fop/image/analyser/EPSReader.java b/src/java/org/apache/fop/image/analyser/EPSReader.java
deleted file mode 100644
index 92260d1ab..000000000
--- a/src/java/org/apache/fop/image/analyser/EPSReader.java
+++ /dev/null
@@ -1,253 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.commons.io.IOUtils;
-import org.apache.fop.image.FopImage;
-import org.apache.fop.image.EPSImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for EPS document image type.
- *
- * @version $Id$
- */
-public class EPSReader implements ImageReader {
-
- private static final byte[] EPS_HEADER_ASCII = "%!PS".getBytes();
- private static final byte[] BOUNDINGBOX = "%%BoundingBox: ".getBytes();
- //private static final byte[] HIRESBOUNDINGBOX = "%%HiResBoundingBox: ".getBytes();
- //TODO Implement HiResBoundingBox, ImageInfo probably needs some changes for that
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua) throws IOException {
-
- boolean isEPS = false;
-
- bis.mark(32);
- byte[] header = new byte[30];
- bis.read(header, 0, 30);
- bis.reset();
-
- EPSImage.EPSData data = new EPSImage.EPSData();
-
- // Check if binary header
- if (getLong(header, 0) == 0xC6D3D0C5) {
- data.isAscii = false;
- isEPS = true;
-
- data.psStart = getLong(header, 4);
- data.psLength = getLong(header, 8);
- data.wmfStart = getLong(header, 12);
- data.wmfLength = getLong(header, 16);
- data.tiffStart = getLong(header, 20);
- data.tiffLength = getLong(header, 24);
-
- } else {
- // Check if plain ascii
- byte[] epsh = "%!PS".getBytes();
- if (EPS_HEADER_ASCII[0] == header[0]
- && EPS_HEADER_ASCII[1] == header[1]
- && EPS_HEADER_ASCII[2] == header[2]
- && EPS_HEADER_ASCII[3] == header[3]) {
- data.isAscii = true;
- isEPS = true;
- }
- }
-
- if (isEPS) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.data = data;
- readEPSImage(bis, data);
- data.bbox = readBBox(data);
-
- if (data.bbox != null) {
- info.width = (int) (data.bbox[2] - data.bbox[0]);
- info.height = (int) (data.bbox[3] - data.bbox[1]);
-
- // image data read
- IOUtils.closeQuietly(bis);
- info.inputStream = null;
-
- return info;
- } else {
- // Ain't eps if no BoundingBox
- isEPS = false;
- }
- }
-
- return null;
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/eps";
- }
-
- private long getLong(byte[] buf, int idx) {
- int b1 = buf[idx] & 0xff;
- int b2 = buf[idx + 1] & 0xff;
- int b3 = buf[idx + 2] & 0xff;
- int b4 = buf[idx + 3] & 0xff;
-
- return (long) ((b4 << 24) | (b3 << 16) | (b2 << 8) | b1);
- }
-
- /**
- * Read the eps file and extract eps part.
- *
- * @param bis The InputStream
- * @param data EPSData object to write the results to
- * @exception IOException If an I/O error occurs
- */
- private void readEPSImage(InputStream bis, EPSImage.EPSData data)
- throws IOException {
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
- byte[] file;
- byte[] readBuf = new byte[20480];
- int bytesRead;
- int index = 0;
- boolean cont = true;
-
- try {
- while ((bytesRead = bis.read(readBuf)) != -1) {
- baos.write(readBuf, 0, bytesRead);
- }
- } catch (java.io.IOException ex) {
- throw new IOException("Error while loading EPS image: "
- + ex.getMessage());
- }
-
- file = baos.toByteArray();
-
- if (data.isAscii) {
- data.rawEps = null;
- data.epsFile = new byte[file.length];
- System.arraycopy(file, 0, data.epsFile, 0, data.epsFile.length);
- } else {
- data.rawEps = new byte[file.length];
- data.epsFile = new byte[(int) data.psLength];
- System.arraycopy(file, 0, data.rawEps, 0, data.rawEps.length);
- System.arraycopy(data.rawEps, (int) data.psStart, data.epsFile, 0,
- (int) data.psLength);
- }
- }
-
- /**
- * Get embedded TIFF preview or null.
- *
- * @param data The EPS payload
- * @return The embedded preview
- */
- public byte[] getPreview(EPSImage.EPSData data) {
- if (data.preview == null) {
- if (data.tiffLength > 0) {
- data.preview = new byte[(int) data.tiffLength];
- System.arraycopy(data.rawEps, (int) data.tiffStart, data.preview, 0,
- (int) data.tiffLength);
- }
- }
- return data.preview;
- }
-
- /**
- * Extract bounding box from eps part.
- *
- * @param data The EPS payload
- * @return An Array of four coordinates making up the bounding box
- */
- private long[] readBBox(EPSImage.EPSData data) {
- long[] mbbox = null;
- int idx = 0;
- boolean found = false;
-
- while (!found && (data.epsFile.length > (idx + BOUNDINGBOX.length))) {
- boolean sfound = true;
- int i = idx;
- for (i = idx; sfound && (i - idx) < BOUNDINGBOX.length; i++) {
- if (BOUNDINGBOX[i - idx] != data.epsFile[i]) {
- sfound = false;
- }
- }
- if (sfound) {
- found = true;
- idx = i;
- } else {
- idx++;
- }
- }
-
- if (!found) {
- return mbbox;
- }
-
- mbbox = new long[4];
- idx += readLongString(data, mbbox, 0, idx);
- idx += readLongString(data, mbbox, 1, idx);
- idx += readLongString(data, mbbox, 2, idx);
- idx += readLongString(data, mbbox, 3, idx);
-
- return mbbox;
- }
-
- private int readLongString(EPSImage.EPSData data, long[] mbbox, int i, int idx) {
- while (idx < data.epsFile.length && (data.epsFile[idx] == 32)) {
- idx++;
- }
-
- int nidx = idx;
-
- // check also for ANSI46(".") to identify floating point values
- while (nidx < data.epsFile.length
- && ((data.epsFile[nidx] >= 48 && data.epsFile[nidx] <= 57)
- || (data.epsFile[nidx] == 45)
- || (data.epsFile[nidx] == 46))) {
- nidx++;
- }
-
- byte[] num = new byte[nidx - idx];
- System.arraycopy(data.epsFile, idx, num, 0, nidx - idx);
- String ns = new String(num);
-
- //if( ns.indexOf(".") != -1 ) {
- // do something like logging a warning
- //}
-
- // then parse the double and round off to the next math. Integer
- mbbox[i] = (long) Math.ceil(Double.parseDouble(ns));
-
- return (1 + nidx - idx);
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/analyser/GIFReader.java b/src/java/org/apache/fop/image/analyser/GIFReader.java
deleted file mode 100644
index d8da89607..000000000
--- a/src/java/org/apache/fop/image/analyser/GIFReader.java
+++ /dev/null
@@ -1,104 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for GIF image type.
- *
- * @author Pankaj Narula
- * @version $Id$
- */
-public class GIFReader implements ImageReader {
-
- private static final int GIF_SIG_LENGTH = 10;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua) throws IOException {
- byte[] header = getDefaultHeader(bis);
- boolean supported = ((header[0] == 'G')
- && (header[1] == 'I')
- && (header[2] == 'F')
- && (header[3] == '8')
- && (header[4] == '7' || header[4] == '9')
- && (header[5] == 'a'));
- if (supported) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.dpiHorizontal = ua.getFactory().getSourceResolution();
- info.dpiVertical = info.dpiHorizontal;
-
- getDimension(header, info);
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.inputStream = bis;
- return info;
- } else {
- return null;
- }
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/gif";
- }
-
- private void getDimension(byte[] header, FopImage.ImageInfo info) {
- // little endian notation
- int byte1 = header[6] & 0xff;
- int byte2 = header[7] & 0xff;
- info.width = ((byte2 << 8) | byte1) & 0xffff;
-
- byte1 = header[8] & 0xff;
- byte2 = header[9] & 0xff;
- info.height = ((byte2 << 8) | byte1) & 0xffff;
- }
-
- private byte[] getDefaultHeader(InputStream imageStream)
- throws IOException {
- byte[] header = new byte[GIF_SIG_LENGTH];
- try {
- imageStream.mark(GIF_SIG_LENGTH + 1);
- imageStream.read(header);
- imageStream.reset();
- } catch (IOException ex) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ex;
- }
- return header;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/analyser/ImageReader.java b/src/java/org/apache/fop/image/analyser/ImageReader.java
deleted file mode 100644
index 980d1e489..000000000
--- a/src/java/org/apache/fop/image/analyser/ImageReader.java
+++ /dev/null
@@ -1,56 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader objects read image headers to determine the image size.
- *
- * @author Pankaj Narula
- * @version $Id$
- */
-public interface ImageReader {
-
- /**
- * Verify image type. If the stream does not contain image data expected by
- * the reader it must reset the stream to the start. This is so that the
- * next reader can start reading from the start. The reader must not close
- * the stream unless it can handle the image and it has read the
- * information.
- *
- * @param bis Image buffered input stream
- * @param uri URI to the image
- * @param ua The user agent
- * @return <code>true</code> if image type is the handled one
- * @exception IOException if an I/O error occurs
- */
- FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua)
- throws IOException;
-
-}
-
diff --git a/src/java/org/apache/fop/image/analyser/ImageReaderFactory.java b/src/java/org/apache/fop/image/analyser/ImageReaderFactory.java
deleted file mode 100644
index c07d68d39..000000000
--- a/src/java/org/apache/fop/image/analyser/ImageReaderFactory.java
+++ /dev/null
@@ -1,108 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Iterator;
-import java.util.List;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.image.FopImage;
-import org.apache.xmlgraphics.util.Service;
-
-/**
- * Factory for ImageReader objects.
- *
- * @author Pankaj Narula
- * @version $Id$
- */
-public class ImageReaderFactory {
-
- private static List formats = new java.util.ArrayList();
-
- /** logger */
- protected static Log log = LogFactory.getLog(ImageReaderFactory.class);
-
- static {
- registerFormat(new JPEGReader());
- registerFormat(new BMPReader());
- registerFormat(new GIFReader());
- registerFormat(new PNGReader());
- registerFormat(new TIFFReader());
- registerFormat(new EPSReader());
- registerFormat(new EMFReader());
-
- //Dynamic registration of ImageReaders
- Iterator iter = Service.providers(ImageReader.class, true);
- while (iter.hasNext()) {
- registerFormat((ImageReader)iter.next());
- }
-
- // the xml parser through batik closes the stream when finished
- // so there is a workaround in the SVGReader
- registerFormat(new SVGReader());
- registerFormat(new SVGZReader());
- registerFormat(new XMLReader());
- }
-
- /**
- * Registers a new ImageReader.
- *
- * @param reader An ImageReader instance
- */
- public static void registerFormat(ImageReader reader) {
- formats.add(reader);
- }
-
- /**
- * ImageReader maker.
- *
- * @param uri URI to the image
- * @param in image input stream
- * @param ua user agent
- * @return An ImageInfo object describing the image
- */
- public static FopImage.ImageInfo make(String uri, InputStream in,
- FOUserAgent ua) {
-
- ImageReader reader;
- try {
- for (int count = 0; count < formats.size(); count++) {
- reader = (ImageReader) formats.get(count);
- FopImage.ImageInfo info = reader.verifySignature(uri, in, ua);
- if (info != null) {
- return info;
- }
- }
- log.warn("No ImageReader found for " + uri);
- in.close();
- } catch (IOException ex) {
- log.error("Error while recovering Image Informations ("
- + uri + ")", ex);
- }
- return null;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/analyser/JPEGReader.java b/src/java/org/apache/fop/image/analyser/JPEGReader.java
deleted file mode 100644
index c90f6b000..000000000
--- a/src/java/org/apache/fop/image/analyser/JPEGReader.java
+++ /dev/null
@@ -1,264 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for JPEG image type.
- *
- * @author Pankaj Narula
- * @version $Id$
- */
-public class JPEGReader implements ImageReader {
-
- /**
- * Only SOFn and APPn markers are defined as SOFn is needed for the height and
- * width search. APPn is also defined because if the JPEG contains thumbnails
- * the dimensions of the thumnail would also be after the SOFn marker enclosed
- * inside the APPn marker. And we don't want to confuse those dimensions with
- * the image dimensions.
- */
- private static final int MARK = 0xff; // Beginning of a Marker
- private static final int NULL = 0x00; // Special case for 0xff00
- private static final int SOF1 = 0xc0; // Baseline DCT
- private static final int SOF2 = 0xc1; // Extended Sequential DCT
- private static final int SOF3 = 0xc2; // Progrssive DCT only PDF 1.3
- private static final int SOFA = 0xca; // Progressice DCT only PDF 1.3
- private static final int APP0 = 0xe0; // Application marker, JFIF
- private static final int APPF = 0xef; // Application marker
- private static final int SOS = 0xda; // Start of Scan
- private static final int SOI = 0xd8; // start of Image
- private static final int JPG_SIG_LENGTH = 2;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream fis,
- FOUserAgent ua) throws IOException {
- byte[] header = getDefaultHeader(fis);
- boolean supported = ((header[0] == (byte) 0xff)
- && (header[1] == (byte) 0xd8));
- if (supported) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.dpiHorizontal = ua.getFactory().getSourceResolution();
- info.dpiVertical = info.dpiHorizontal;
-
- getDimension(fis, info);
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.inputStream = fis;
- return info;
- } else {
- return null;
- }
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/jpeg";
- }
-
- private byte[] getDefaultHeader(InputStream imageStream) throws IOException {
- byte[] header = new byte[JPG_SIG_LENGTH];
- try {
- imageStream.mark(JPG_SIG_LENGTH + 1);
- imageStream.read(header);
- imageStream.reset();
- } catch (IOException ex) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ex;
- }
- return header;
- }
-
- private void getDimension(InputStream imageStream,
- FopImage.ImageInfo info)
- throws IOException {
- try {
- int pos=0, avail = imageStream.available();
- imageStream.mark(avail);
- int marker = NULL;
- long length, skipped;
-outer:
- while (true) {
- do {
- if (avail == 0) {
- imageStream.reset();
- avail = 2*pos;
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- //Marker first byte (FF)
- marker = imageStream.read();
- pos++; avail--;
- } while (marker != MARK);
-
- do {
- if (avail == 0) {
- imageStream.reset();
- avail = 2*pos;
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- //Marker second byte
- marker = imageStream.read();
- pos++; avail--;
- } while (marker == MARK);
-
- switch (marker) {
- case SOI:
- break;
- case NULL:
- break;
- case APP0:
- if (avail < 14) {
- imageStream.reset();
- avail = 2 * pos;
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- int reclen = this.read2bytes(imageStream);
- pos += 2; avail -= 2;
- this.skip(imageStream, 7);
- pos += 7; avail -= 7;
- int densityUnits = imageStream.read();
- pos++; avail--;
- int xdensity = this.read2bytes(imageStream);
- pos += 2; avail -= 2;
- int ydensity = this.read2bytes(imageStream);
- pos += 2; avail -= 2;
-
- if (densityUnits == 2) {
- info.dpiHorizontal = xdensity * 28.3464567 / 72; //dpi
- info.dpiVertical = ydensity * 28.3464567 / 72; //dpi
- } else if (densityUnits == 1) {
- info.dpiHorizontal = xdensity;
- info.dpiVertical = ydensity;
- } else {
- // Use resolution specified in
- // FOUserAgent.getFactory() (default 72dpi).
- }
-
- int restlen = reclen - 12;
- if (avail < restlen) {
- imageStream.reset();
- avail = 2 * pos;
- if (avail < pos + restlen + 10) {
- avail = (int)(pos + restlen + 10);
- }
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- skipped = this.skip(imageStream, restlen - 2);
- pos += skipped; avail -= skipped;
- if (skipped != restlen - 2) {
- throw new IOException("Skipping Error");
- }
- break;
- case SOF1:
- case SOF2:
- case SOF3: // SOF3 and SOFA are only supported by PDF 1.3
- case SOFA:
- while (avail < 7) {
- imageStream.reset();
- avail = 2*pos;
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- this.skip(imageStream, 3);
- pos+=3; avail-=3;
- info.height = this.read2bytes(imageStream);
- pos+=2; avail-=2;
- info.width = this.read2bytes(imageStream);
- pos+=2; avail-=2;
- break outer;
- default:
- while (avail < 2) {
- imageStream.reset();
- avail = 2*pos;
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- length = this.read2bytes(imageStream);
- pos+=2; avail-=2;
- if (avail < length) {
- imageStream.reset();
- avail = 2*pos;
- if (avail < pos+length+10) {
- avail = (int)(pos+length+10);
- }
- imageStream.mark(avail);
- pos = (int)this.skip(imageStream, pos);
- avail -= pos;
- }
- skipped = this.skip(imageStream, length - 2);
- pos += skipped; avail -= skipped;
- if (skipped != length - 2) {
- throw new IOException("Skipping Error");
- }
- }
- }
- imageStream.reset();
- } catch (IOException ioe) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ioe;
- }
- }
-
- private int read2bytes(InputStream imageStream) throws IOException {
- int byte1 = imageStream.read();
- int byte2 = imageStream.read();
- return (int) ((byte1 << 8) | byte2);
- }
-
- private long skip(InputStream imageStream, long n) throws IOException {
- long discarded = 0;
- while (discarded != n) {
- imageStream.read();
- discarded++;
- }
- return discarded; // scope for exception
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/analyser/PNGReader.java b/src/java/org/apache/fop/image/analyser/PNGReader.java
deleted file mode 100644
index ab6c64775..000000000
--- a/src/java/org/apache/fop/image/analyser/PNGReader.java
+++ /dev/null
@@ -1,115 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for PNG image type.
- *
- * @author Pankaj Narula
- * @version $Id$
- */
-public class PNGReader implements ImageReader {
-
- private static final int PNG_SIG_LENGTH = 24;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua) throws IOException {
- byte[] header = getDefaultHeader(bis);
- boolean supported = ((header[0] == (byte) 0x89)
- && (header[1] == (byte) 0x50)
- && (header[2] == (byte) 0x4e)
- && (header[3] == (byte) 0x47)
- && (header[4] == (byte) 0x0d)
- && (header[5] == (byte) 0x0a)
- && (header[6] == (byte) 0x1a)
- && (header[7] == (byte) 0x0a));
-
- if (supported) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.dpiHorizontal = ua.getFactory().getSourceResolution();
- info.dpiVertical = info.dpiHorizontal;
-
- getDimension(header, info);
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.inputStream = bis;
- return info;
- } else {
- return null;
- }
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/png";
- }
-
- private void getDimension(byte[] header, FopImage.ImageInfo info) {
- // png is always big endian
- int byte1 = header[16] & 0xff;
- int byte2 = header[17] & 0xff;
- int byte3 = header[18] & 0xff;
- int byte4 = header[19] & 0xff;
- long l = (long) ((byte1 << 24)
- | (byte2 << 16)
- | (byte3 << 8)
- | (byte4));
- info.width = (int) l;
-
- byte1 = header[20] & 0xff;
- byte2 = header[21] & 0xff;
- byte3 = header[22] & 0xff;
- byte4 = header[23] & 0xff;
- l = (long) ((byte1 << 24) | (byte2 << 16) | (byte3 << 8) | byte4);
- info.height = (int) l;
- }
-
- private byte[] getDefaultHeader(InputStream imageStream)
- throws IOException {
- byte[] header = new byte[PNG_SIG_LENGTH];
- try {
- imageStream.mark(PNG_SIG_LENGTH + 1);
- imageStream.read(header);
- imageStream.reset();
- } catch (IOException ex) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ex;
- }
- return header;
- }
-
-}
diff --git a/src/java/org/apache/fop/image/analyser/SVGReader.java b/src/java/org/apache/fop/image/analyser/SVGReader.java
deleted file mode 100644
index cffaa365c..000000000
--- a/src/java/org/apache/fop/image/analyser/SVGReader.java
+++ /dev/null
@@ -1,188 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-import java.awt.geom.AffineTransform;
-
-// XML
-import org.w3c.dom.Element;
-import org.w3c.dom.svg.SVGDocument;
-
-// Batik
-import org.apache.batik.dom.svg.SAXSVGDocumentFactory;
-import org.apache.batik.dom.svg.SVGOMDocument;
-import org.apache.batik.bridge.BridgeContext;
-import org.apache.batik.bridge.UnitProcessor;
-import org.apache.batik.dom.svg.SVGDOMImplementation;
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-// FOP
-import org.apache.fop.image.XMLImage;
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.svg.SVGUserAgent;
-import org.apache.fop.util.UnclosableInputStream;
-
-/**
- * ImageReader object for SVG document image type.
- */
-public class SVGReader implements ImageReader {
-
- /** Logger instance */
- protected static Log log = LogFactory.getLog(SVGReader.class);
-
- /** SVG's MIME type */
- public static final String SVG_MIME_TYPE = "image/svg+xml";
-
- private boolean batik = true;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream fis,
- FOUserAgent ua) throws IOException {
- FopImage.ImageInfo info = loadImage(uri, fis, ua);
- if (info != null) {
- IOUtils.closeQuietly(fis);
- }
- return info;
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return SVG_MIME_TYPE;
- }
-
- /**
- * This means the external svg document will be loaded twice. Possibly need
- * a slightly different design for the image stuff.
- *
- * @param uri @todo Description of the Parameter
- * @param fis @todo Description of the Parameter
- * @param ua @todo Description of the Parameter
- * @return @todo Description of the Return Value
- */
- private FopImage.ImageInfo loadImage(String uri, InputStream bis,
- FOUserAgent ua) {
- if (batik) {
- try {
- Loader loader = new Loader();
- return loader.getImage(uri, bis,
- ua.getSourcePixelUnitToMillimeter());
- } catch (NoClassDefFoundError e) {
- batik = false;
- log.warn("Batik not in class path", e);
- return null;
- }
- }
- return null;
- }
-
- /**
- * This method is put in another class so that the classloader does not
- * attempt to load batik related classes when constructing the SVGReader
- * class.
- */
- class Loader {
- private FopImage.ImageInfo getImage(String uri, InputStream fis,
- float pixelUnitToMM) {
- // parse document and get the size attributes of the svg element
-
- try {
- fis = new UnclosableInputStream(fis);
-
- FopImage.ImageInfo info = new FopImage.ImageInfo();
-
- //Set the resolution to that of the FOUserAgent
- info.dpiHorizontal = 25.4f / pixelUnitToMM;
- info.dpiVertical = info.dpiHorizontal;
-
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.str = SVGDOMImplementation.SVG_NAMESPACE_URI;
-
- int length = fis.available();
- fis.mark(length + 1);
- SAXSVGDocumentFactory factory = new SAXSVGDocumentFactory(
- XMLImage.getParserName());
- SVGDocument doc = (SVGDocument) factory.createSVGDocument(uri, fis);
- info.data = doc;
-
- Element e = doc.getRootElement();
- String s;
- SVGUserAgent userAg = new SVGUserAgent(pixelUnitToMM,
- new AffineTransform());
- BridgeContext ctx = new BridgeContext(userAg);
- UnitProcessor.Context uctx = UnitProcessor.createContext(ctx, e);
-
- // 'width' attribute - default is 100%
- s = e.getAttributeNS(null,
- SVGOMDocument.SVG_WIDTH_ATTRIBUTE);
- if (s.length() == 0) {
- s = SVGOMDocument.SVG_SVG_WIDTH_DEFAULT_VALUE;
- }
- info.width = Math.round(UnitProcessor.svgHorizontalLengthToUserSpace(
- s, SVGOMDocument.SVG_WIDTH_ATTRIBUTE, uctx));
-
- // 'height' attribute - default is 100%
- s = e.getAttributeNS(null,
- SVGOMDocument.SVG_HEIGHT_ATTRIBUTE);
- if (s.length() == 0) {
- s = SVGOMDocument.SVG_SVG_HEIGHT_DEFAULT_VALUE;
- }
- info.height = Math.round(UnitProcessor.svgVerticalLengthToUserSpace(
- s, SVGOMDocument.SVG_HEIGHT_ATTRIBUTE, uctx));
-
- return info;
- } catch (NoClassDefFoundError ncdfe) {
- try {
- fis.reset();
- } catch (IOException ioe) {
- // we're more interested in the original exception
- }
- batik = false;
- log.warn("Batik not in class path", ncdfe);
- return null;
- } catch (IOException e) {
- // If the svg is invalid then it throws an IOException
- // so there is no way of knowing if it is an svg document
-
- log.debug("Error while trying to load stream as an SVG file: "
- + e.getMessage());
- // assuming any exception means this document is not svg
- // or could not be loaded for some reason
- try {
- fis.reset();
- } catch (IOException ioe) {
- // we're more interested in the original exception
- }
- return null;
- }
- }
- }
-
-}
diff --git a/src/java/org/apache/fop/image/analyser/SVGZReader.java b/src/java/org/apache/fop/image/analyser/SVGZReader.java
deleted file mode 100644
index 14fde1cb6..000000000
--- a/src/java/org/apache/fop/image/analyser/SVGZReader.java
+++ /dev/null
@@ -1,53 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.zip.GZIPInputStream;
-
-import org.apache.fop.apps.FOUserAgent;
-import org.apache.fop.image.FopImage;
-
-/**
- * Implements a reader for gzipped XMLFiles.
- *
- * <p>
- * The current implementation is limited to SVG files only.
- */
-public class SVGZReader extends XMLReader {
- /**
- * Default constructor.
- */
- public SVGZReader() {
- }
-
- /** {@inheritDoc} */
- protected FopImage.ImageInfo loadImage(final String uri,
- final InputStream bis, final FOUserAgent ua) {
- try {
- return new SVGReader().verifySignature(uri,
- new GZIPInputStream(bis), ua);
- } catch (final IOException e) {
- // ignore
- }
- return null;
- }
-}
diff --git a/src/java/org/apache/fop/image/analyser/TIFFReader.java b/src/java/org/apache/fop/image/analyser/TIFFReader.java
deleted file mode 100644
index 08d702780..000000000
--- a/src/java/org/apache/fop/image/analyser/TIFFReader.java
+++ /dev/null
@@ -1,117 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.apps.FOUserAgent;
-
-/**
- * ImageReader object for TIFF image type.
- *
- * @author Pankaj Narula, Michael Lee
- * @version $Id$
- */
-public class TIFFReader implements ImageReader {
-
- private static final int TIFF_SIG_LENGTH = 8;
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream bis,
- FOUserAgent ua) throws IOException {
- byte[] header = getDefaultHeader(bis);
- boolean supported = false;
-
- // first 2 bytes = II (little endian encoding)
- if (header[0] == (byte) 0x49 && header[1] == (byte) 0x49) {
-
- // look for '42' in byte 3 and '0' in byte 4
- if (header[2] == 42 && header[3] == 0) {
- supported = true;
- }
- }
-
- // first 2 bytes == MM (big endian encoding)
- if (header[0] == (byte) 0x4D && header[1] == (byte) 0x4D) {
-
- // look for '42' in byte 4 and '0' in byte 3
- if (header[2] == 0 && header[3] == 42) {
- supported = true;
- }
- }
-
- if (supported) {
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.dpiHorizontal = ua.getFactory().getSourceResolution();
- info.dpiVertical = info.dpiHorizontal;
-
- getDimension(header, info);
- info.originalURI = uri;
- info.mimeType = getMimeType();
- info.inputStream = bis;
- return info;
- } else {
- return null;
- }
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "image/tiff";
- }
-
- private void getDimension(byte[] header, FopImage.ImageInfo info) {
- // currently not setting the width and height
- // these are set again by the Jimi image reader.
- // I suppose I'll do it one day to be complete. Or
- // someone else will.
- // Note: bytes 4,5,6,7 contain the byte offset in the stream of the first IFD block
- info.width = -1;
- info.height = -1;
- }
-
- private byte[] getDefaultHeader(InputStream imageStream)
- throws IOException {
- byte[] header = new byte[TIFF_SIG_LENGTH];
- try {
- imageStream.mark(TIFF_SIG_LENGTH + 1);
- imageStream.read(header);
- imageStream.reset();
- } catch (IOException ex) {
- try {
- imageStream.reset();
- } catch (IOException exbis) {
- // throw the original exception, not this one
- }
- throw ex;
- }
- return header;
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/analyser/XMLReader.java b/src/java/org/apache/fop/image/analyser/XMLReader.java
deleted file mode 100644
index 4d0145eed..000000000
--- a/src/java/org/apache/fop/image/analyser/XMLReader.java
+++ /dev/null
@@ -1,167 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.image.analyser;
-
-// Java
-import java.io.InputStream;
-import java.io.IOException;
-import java.util.Map;
-
-// XML
-import javax.xml.parsers.DocumentBuilderFactory;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
-
-// FOP
-import org.apache.fop.image.FopImage;
-import org.apache.fop.util.UnclosableInputStream;
-import org.apache.fop.apps.FOUserAgent;
-
-// Commons-Logging
-import org.apache.commons.io.IOUtils;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-
-/** ImageReader object for XML document image type. */
-public class XMLReader implements ImageReader {
-
- /**
- * logging instance
- */
- private Log log = LogFactory.getLog(XMLReader.class);
-
- private static Map converters = new java.util.HashMap();
-
- /**
- * Registers a Converter implementation with XMLReader.
- *
- * @param ns The namespace to associate with this converter
- * @param conv The actual Converter implementation
- */
- public static void setConverter(String ns, Converter conv) {
- converters.put(ns, conv);
- }
-
- /** {@inheritDoc} */
- public FopImage.ImageInfo verifySignature(String uri, InputStream fis,
- FOUserAgent ua)
- throws IOException {
- FopImage.ImageInfo info = loadImage(uri, fis, ua);
- if (info != null) {
- info.originalURI = uri;
- IOUtils.closeQuietly(fis);
- }
- return info;
- }
-
- /**
- * Returns the MIME type supported by this implementation.
- *
- * @return The MIME type
- */
- public String getMimeType() {
- return "text/xml";
- }
-
- /**
- * Creates an ImageInfo object from an XML image read from a stream.
- *
- * (todo) This means the external svg document will be loaded twice. Possibly need
- * a slightly different design for the image stuff.
- *
- * @param uri The URI to the image
- * @param bis The InputStream
- * @param ua The user agent
- * @return An ImageInfo object describing the image
- */
- protected FopImage.ImageInfo loadImage(String uri, InputStream bis,
- FOUserAgent ua) {
- return createDocument(bis, ua);
- }
-
- /**
- * Creates an ImageInfo object from an XML image read from a stream.
- *
- * @param input The InputStream
- * @param ua The user agent
- * @return An ImageInfo object describing the image
- */
- public FopImage.ImageInfo createDocument(final InputStream input, final FOUserAgent ua) {
- Document doc = null;
- FopImage.ImageInfo info = new FopImage.ImageInfo();
- info.mimeType = getMimeType();
-
- try {
- final InputStream is = new UnclosableInputStream(input);
- int length = is.available();
- is.mark(length);
-
- DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
- doc = dbf.newDocumentBuilder().parse(is);
- info.data = doc;
-
- Element root = doc.getDocumentElement();
- log.debug("XML image namespace: " + root.getAttribute("xmlns"));
- String ns = root.getAttribute("xmlns");
- info.str = ns;
-
- Converter conv = (Converter) converters.get(ns);
- if (conv != null) {
- FopImage.ImageInfo i = conv.convert(doc);
- if (i != null) {
- info = i;
- }
- }
- } catch (Exception e) {
- log.debug("Error while constructing image from XML", e);
- try {
- input.reset();
- } catch (IOException ioe) {
- // throw the original exception, not this one
- }
- return null;
- }
- if (info != null) {
- try {
- input.close();
- } catch (IOException io) {
- // ignore
- }
- }
- return info;
- }
-
- /**
- * This interface is to be implemented for XML to image converters.
- */
- public static interface Converter {
-
- /**
- * This method is called for a DOM document to be converted into an
- * ImageInfo object.
- *
- * @param doc The DOM document to convert
- * @return An ImageInfo object describing the image
- */
- FopImage.ImageInfo convert(Document doc);
- }
-
-}
-
diff --git a/src/java/org/apache/fop/image/package.html b/src/java/org/apache/fop/image/package.html
index 0145864b2..cbd2d7c5e 100644
--- a/src/java/org/apache/fop/image/package.html
+++ b/src/java/org/apache/fop/image/package.html
@@ -18,6 +18,6 @@
<HTML>
<TITLE>org.apache.fop.image Package</TITLE>
<BODY>
-<P>Contains image loading adapters for various image sources and the image cache.</P>
+<P>Contains image loading adapters for various image sources.</P>
</BODY>
</HTML> \ No newline at end of file
diff --git a/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java b/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java
index 54fd315b1..65d537bcd 100644
--- a/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java
+++ b/src/java/org/apache/fop/layoutmgr/AbstractBreaker.java
@@ -272,7 +272,7 @@ public abstract class AbstractBreaker {
*/
public void doLayout(int flowBPD, boolean autoHeight) {
LayoutContext childLC = createLayoutContext();
- childLC.setStackLimit(new MinOptMax(flowBPD));
+ childLC.setStackLimitBP(new MinOptMax(flowBPD));
if (getCurrentDisplayAlign() == Constants.EN_X_FILL) {
//EN_X_FILL is non-standard (by LF)
@@ -495,7 +495,7 @@ public abstract class AbstractBreaker {
int averageLineLength = optimizeLineLength(effectiveList,
startElementIndex, endElementIndex);
if (averageLineLength != 0) {
- childLC.setStackLimit(new MinOptMax(averageLineLength));
+ childLC.setStackLimitBP(new MinOptMax(averageLineLength));
}
}
/* *** *** non-standard extension *** *** */
diff --git a/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java b/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
index f75fffc0d..656b5e2df 100644
--- a/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/AbstractLayoutManager.java
@@ -113,7 +113,7 @@ public abstract class AbstractLayoutManager extends AbstractBaseLayoutManager
if (curChildLM != null && !curChildLM.isFinished()) {
return curChildLM;
}
- while (childLMiter.hasNext()) {
+ if (childLMiter.hasNext()) {
curChildLM = (LayoutManager) childLMiter.next();
curChildLM.initialize();
return curChildLM;
@@ -350,6 +350,10 @@ public abstract class AbstractLayoutManager extends AbstractBaseLayoutManager
/**
* Registers the FO's markers on the current PageViewport
+ *
+ * @param isStarting boolean indicating whether the markers qualify as 'starting'
+ * @param isFirst boolean indicating whether the markers qualify as 'first'
+ * @param isLast boolean indicating whether the markers qualify as 'last'
*/
protected void addMarkersToPage(boolean isStarting, boolean isFirst, boolean isLast) {
if (this.markers != null) {
@@ -361,10 +365,18 @@ public abstract class AbstractLayoutManager extends AbstractBaseLayoutManager
}
}
+ /**
+ * Registers the FO's id on the current PageViewport
+ */
+ protected void addId() {
+ if (fobj != null) {
+ getPSLM().addIDToPage(fobj.getId());
+ }
+ }
+
/** {@inheritDoc} */
public String toString() {
return (super.toString() + (fobj != null ? "[fobj=" + fobj.toString() + "]" : ""));
}
-
}
diff --git a/src/java/org/apache/fop/layoutmgr/AreaAdditionUtil.java b/src/java/org/apache/fop/layoutmgr/AreaAdditionUtil.java
index 80e0b74cc..1b0d02639 100644
--- a/src/java/org/apache/fop/layoutmgr/AreaAdditionUtil.java
+++ b/src/java/org/apache/fop/layoutmgr/AreaAdditionUtil.java
@@ -117,7 +117,7 @@ public class AreaAdditionUtil {
// set space after for each LM, in order to implement
// display-align = distribute
lc.setSpaceAfter(layoutContext.getSpaceAfter());
- lc.setStackLimit(layoutContext.getStackLimit());
+ lc.setStackLimitsFrom(layoutContext);
childLM.addAreas(childPosIter, lc);
}
diff --git a/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
index fc60b561e..e8ca88c1c 100644
--- a/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/BlockContainerLayoutManager.java
@@ -38,7 +38,6 @@ import org.apache.fop.datatypes.Length;
import org.apache.fop.fo.FONode;
import org.apache.fop.fo.flow.BlockContainer;
import org.apache.fop.fo.properties.CommonAbsolutePosition;
-import org.apache.fop.layoutmgr.inline.InlineLayoutManager;
import org.apache.fop.traits.MinOptMax;
import org.apache.fop.traits.SpaceVal;
@@ -201,7 +200,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
= (getBlockContainerFO().getReferenceOrientation() % 180 != 0);
autoHeight = false;
//boolean rotated = (getBlockContainerFO().getReferenceOrientation() % 180 != 0);
- int maxbpd = context.getStackLimit().opt;
+ int maxbpd = context.getStackLimitBP().opt;
int allocBPD;
if (height.getEnum() == EN_AUTO
|| (!height.isAbsolute() && getAncestorBlockAreaBPD() <= 0)) {
@@ -249,7 +248,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
MinOptMax stackLimit = new MinOptMax(relDims.bpd);
- LinkedList returnedList = null;
+ LinkedList returnedList;
LinkedList contentList = new LinkedList();
LinkedList returnList = new LinkedList();
@@ -280,8 +279,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
LayoutContext childLC = new LayoutContext(0);
childLC.copyPendingMarksFrom(context);
// curLM is a ?
- childLC.setStackLimit(MinOptMax.subtract(context
- .getStackLimit(), stackLimit));
+ childLC.setStackLimitBP(MinOptMax.subtract(context.getStackLimitBP(), stackLimit));
childLC.setRefIPD(relDims.ipd);
childLC.setWritingMode(getBlockContainerFO().getWritingMode());
@@ -388,6 +386,9 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
}
addKnuthElementsForBorderPaddingAfter(returnList, true);
addKnuthElementsForSpaceAfter(returnList, alignment);
+
+ //All child content is processed. Only break-after can occur now, so...
+ context.clearPendingMarks();
addKnuthElementsForBreakAfter(returnList, context);
setFinished(true);
@@ -411,7 +412,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
if (isFixed()) {
availHeight = (int)getCurrentPV().getViewArea().getHeight();
} else {
- availHeight = context.getStackLimit().opt;
+ availHeight = context.getStackLimitBP().opt;
}
allocBPD = availHeight;
allocBPD -= offset.y;
@@ -444,7 +445,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
}
}
} else {
- int maxbpd = context.getStackLimit().opt;
+ int maxbpd = context.getStackLimitBP().opt;
allocBPD = maxbpd;
if (!switchedProgressionDirection) {
autoHeight = true;
@@ -601,11 +602,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
}
public boolean isOverflow() {
- if (isEmpty()) {
- return false;
- } else {
- return (deferredAlg.getPageBreaks().size() > 1);
- }
+ return !isEmpty() && (deferredAlg.getPageBreaks().size() > 1);
}
protected LayoutManager getTopLevelLM() {
@@ -625,7 +622,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
while ((curLM = getChildLM()) != null) {
LayoutContext childLC = new LayoutContext(0);
- childLC.setStackLimit(context.getStackLimit());
+ childLC.setStackLimitBP(context.getStackLimitBP());
childLC.setRefIPD(context.getRefIPD());
childLC.setWritingMode(getBlockContainerFO().getWritingMode());
@@ -707,7 +704,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
addBlockSpacing(0.0, new MinOptMax(layoutContext.getSpaceBefore()));
}
- LayoutManager childLM = null;
+ LayoutManager childLM;
LayoutManager lastLM = null;
LayoutContext lc = new LayoutContext(0);
lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
@@ -736,7 +733,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
}
Position innerPosition = pos;
if (pos instanceof NonLeafPosition) {
- innerPosition = ((NonLeafPosition)pos).getPosition();
+ innerPosition = pos.getPosition();
}
if (pos instanceof BlockContainerPosition) {
if (bcpos != null) {
@@ -772,7 +769,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
}
}
- getPSLM().addIDToPage(getBlockContainerFO().getId());
+ addId();
addMarkersToPage(true, isFirst(firstPos), isLast(lastPos));
@@ -854,7 +851,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
// set last area flag
lc.setFlags(LayoutContext.LAST_AREA,
(layoutContext.isLastArea() && childLM == lastLM));
- /*LF*/lc.setStackLimit(layoutContext.getStackLimit());
+ /*LF*/lc.setStackLimitBP(layoutContext.getStackLimitBP());
// Add the line areas to Area
childLM.addAreas(childPosIter, lc);
}
@@ -873,7 +870,7 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
referenceArea = null;
resetSpaces();
- getPSLM().notifyEndOfLayout(((BlockContainer)getFObj()).getId());
+ getPSLM().notifyEndOfLayout(fobj.getId());
}
/**
@@ -992,30 +989,21 @@ public class BlockContainerLayoutManager extends BlockStackingLayoutManager
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean mustKeepTogether() {
//TODO Keeps will have to be more sophisticated sooner or later
- return (!getBlockContainerFO().getKeepTogether().getWithinPage().isAuto()
- || !getBlockContainerFO().getKeepTogether().getWithinColumn().isAuto()
- || (getParent() instanceof BlockLevelLayoutManager
- && ((BlockLevelLayoutManager) getParent()).mustKeepTogether())
- || (getParent() instanceof InlineLayoutManager
- && ((InlineLayoutManager) getParent()).mustKeepTogether()));
+ return super.mustKeepTogether()
+ || !getBlockContainerFO().getKeepTogether().getWithinPage().isAuto()
+ || !getBlockContainerFO().getKeepTogether().getWithinColumn().isAuto();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean mustKeepWithPrevious() {
return !getBlockContainerFO().getKeepWithPrevious().getWithinPage().isAuto()
|| !getBlockContainerFO().getKeepWithPrevious().getWithinColumn().isAuto();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public boolean mustKeepWithNext() {
return !getBlockContainerFO().getKeepWithNext().getWithinPage().isAuto()
|| !getBlockContainerFO().getKeepWithNext().getWithinColumn().isAuto();
diff --git a/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
index bb39def8d..f5270107c 100644
--- a/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/BlockLayoutManager.java
@@ -25,6 +25,7 @@ import java.util.ListIterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
import org.apache.fop.area.LineArea;
@@ -146,7 +147,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager
* @return true if there are more child lms
*/
public boolean hasNext() {
- return (curPos < listLMs.size()) ? true : createNextChildLMs(curPos);
+ return (curPos < listLMs.size()) || createNextChildLMs(curPos);
}
/**
@@ -249,7 +250,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager
addBlockSpacing(0.0, new MinOptMax(layoutContext.getSpaceBefore()));
}
- LayoutManager childLM = null;
+ LayoutManager childLM;
LayoutManager lastLM = null;
LayoutContext lc = new LayoutContext(0);
lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
@@ -279,7 +280,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager
Position innerPosition = pos;
if (pos instanceof NonLeafPosition) {
//Not all elements are wrapped
- innerPosition = ((NonLeafPosition) pos).getPosition();
+ innerPosition = pos.getPosition();
}
if (innerPosition == null) {
// pos was created by this BlockLM and was inside an element
@@ -308,7 +309,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager
}
}
- getPSLM().addIDToPage(getBlockFO().getId());
+ addId();
addMarkersToPage(true, isFirst(firstPos), isLast(lastPos));
@@ -389,7 +390,7 @@ public class BlockLayoutManager extends BlockStackingLayoutManager
// set last area flag
lc.setFlags(LayoutContext.LAST_AREA,
(layoutContext.isLastArea() && childLM == lastLM));
- lc.setStackLimit(layoutContext.getStackLimit());
+ lc.setStackLimitBP(layoutContext.getStackLimitBP());
// Add the line areas to Area
childLM.addAreas(childPosIter, lc);
}
diff --git a/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java b/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java
index 5faad623c..67ed1de9f 100644
--- a/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/BlockStackingLayoutManager.java
@@ -274,13 +274,14 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
if (curLM instanceof LineLayoutManager) {
// curLM is a LineLayoutManager
// set stackLimit for lines (stack limit is now i-p-direction, not b-p-direction!)
- childLC.setStackLimit(new MinOptMax(getContentAreaIPD()));
+ childLC.setStackLimitBP(context.getStackLimitBP());
+ childLC.setStackLimitIP(new MinOptMax(getContentAreaIPD()));
childLC.setRefIPD(getContentAreaIPD());
} else {
// curLM is a ?
//childLC.setStackLimit(MinOptMax.subtract(context
// .getStackLimit(), stackSize));
- childLC.setStackLimit(context.getStackLimit());
+ childLC.setStackLimitBP(context.getStackLimitBP());
childLC.setRefIPD(referenceIPD);
}
@@ -293,15 +294,22 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
if (returnedList != null
&& returnedList.size() == 1
&& ((ListElement) returnedList.getFirst()).isForcedBreak()) {
- // a descendant of this block has break-before
- contentList.addAll(returnedList);
if (curLM.isFinished() && !hasNextChildLM()) {
- forcedBreakAfterLast = (BreakElement)contentList.removeLast();
+ // a descendant of this block has break-before
+ forcedBreakAfterLast = (BreakElement) returnedList.getFirst();
context.clearPendingMarks();
break;
}
+ if (contentList.size() == 0) {
+ // Empty fo:block, zero-length box makes sure the IDs and/or markers
+ // are registered and borders/padding are painted.
+ returnList.add(new KnuthBox(0, notifyPos(new Position(this)), false));
+ }
+ // a descendant of this block has break-before
+ contentList.addAll(returnedList);
+
/* extension: conversione di tutta la sequenza fin'ora ottenuta */
if (bpUnit > 0) {
storedList = contentList;
@@ -392,6 +400,9 @@ public abstract class BlockStackingLayoutManager extends AbstractLayoutManager
addKnuthElementsForBorderPaddingAfter(returnList, true);
addKnuthElementsForSpaceAfter(returnList, alignment);
+
+ //All child content is processed. Only break-after can occur now, so...
+ context.clearPendingMarks();
if (forcedBreakAfterLast == null) {
addKnuthElementsForBreakAfter(returnList, context);
}
diff --git a/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java b/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java
index a70dd0883..115532cf1 100644
--- a/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/FlowLayoutManager.java
@@ -99,7 +99,7 @@ public class FlowLayoutManager extends BlockStackingLayoutManager
//MinOptMax bpd = context.getStackLimit();
LayoutContext childLC = new LayoutContext(0);
- childLC.setStackLimit(context.getStackLimit());
+ childLC.setStackLimitBP(context.getStackLimitBP());
childLC.setRefIPD(context.getRefIPD());
childLC.setWritingMode(getCurrentPage().getSimplePageMaster().getWritingMode());
diff --git a/src/java/org/apache/fop/layoutmgr/LayoutContext.java b/src/java/org/apache/fop/layoutmgr/LayoutContext.java
index 9eb38600b..79b5e232f 100644
--- a/src/java/org/apache/fop/layoutmgr/LayoutContext.java
+++ b/src/java/org/apache/fop/layoutmgr/LayoutContext.java
@@ -74,18 +74,29 @@ public class LayoutContext {
private int flags; // Contains some set of flags defined above
/**
* Total available stacking dimension for a "galley-level" layout
- * manager (Line or Flow). It is passed by the parent LM. For LineLM,
- * the block LM determines this based on indent properties.
+ * manager in block-progression-direction. It is passed by the
+ * parent LM.
* These LM <b>may</b> wish to pass this information down to lower
* level LM to allow them to optimize returned break possibilities.
*/
- private MinOptMax stackLimit;
+ private MinOptMax stackLimitBP;
+ /**
+ * Total available stacking dimension for a "galley-level" layout
+ * manager in inline-progression-direction. It is passed by the
+ * parent LM. For LineLM, the block LM determines this based on
+ * indent properties.
+ * These LM <b>may</b> wish to pass this information down to lower
+ * level LM to allow them to optimize returned break possibilities.
+ */
+ private MinOptMax stackLimitIP;
/** True if current element list is spanning in multi-column layout. */
private int nextSpan = Constants.NOT_SET;
/** inline-progression-dimension of nearest ancestor reference area */
private int refIPD;
+ //TODO After the split of stackLimit into stackLimitBP and stackLimitIP there's now some
+ //overlap with refIPD. Need to investigate how best to refactor that.
/** the writing mode established by the nearest ancestor reference area */
private int writingMode = Constants.EN_LR_TB;
@@ -145,7 +156,7 @@ public class LayoutContext {
this.flags = parentLC.flags;
this.refIPD = parentLC.refIPD;
this.writingMode = parentLC.writingMode;
- this.stackLimit = null; // Don't reference parent MinOptMax!
+ setStackLimitsFrom(parentLC);
this.leadingSpace = parentLC.leadingSpace; //???
this.trailingSpace = parentLC.trailingSpace; //???
this.hyphContext = parentLC.hyphContext;
@@ -166,7 +177,8 @@ public class LayoutContext {
public LayoutContext(int flags) {
this.flags = flags;
this.refIPD = 0;
- stackLimit = new MinOptMax(0);
+ stackLimitBP = new MinOptMax(0);
+ stackLimitIP = new MinOptMax(0);
leadingSpace = null;
trailingSpace = null;
}
@@ -273,12 +285,8 @@ public class LayoutContext {
* Clears all pending marks on the LayoutContext.
*/
public void clearPendingMarks() {
- if (this.pendingBeforeMarks != null) {
- this.pendingBeforeMarks.clear();
- }
- if (this.pendingAfterMarks != null) {
- this.pendingAfterMarks.clear();
- }
+ this.pendingBeforeMarks = null;
+ this.pendingAfterMarks = null;
}
/**
@@ -306,15 +314,48 @@ public class LayoutContext {
}
}
- public void setStackLimit(MinOptMax limit) {
- stackLimit = limit;
+ /**
+ * Sets the stack limit in block-progression-dimension.
+ * @param limit the stack limit
+ */
+ public void setStackLimitBP(MinOptMax limit) {
+ stackLimitBP = limit;
}
- public MinOptMax getStackLimit() {
- return stackLimit;
+ /**
+ * Returns the stack limit in block-progression-dimension.
+ * @return the stack limit
+ */
+ public MinOptMax getStackLimitBP() {
+ return stackLimitBP;
}
/**
+ * Sets the stack limit in inline-progression-dimension.
+ * @param limit the stack limit
+ */
+ public void setStackLimitIP(MinOptMax limit) {
+ stackLimitIP = limit;
+ }
+
+ /**
+ * Returns the stack limit in inline-progression-dimension.
+ * @return the stack limit
+ */
+ public MinOptMax getStackLimitIP() {
+ return stackLimitIP;
+ }
+
+ /**
+ * Sets (Copies) the stack limits in both directions from another layout context.
+ * @param context the layout context to taje the values from
+ */
+ public void setStackLimitsFrom(LayoutContext context) {
+ setStackLimitBP(context.getStackLimitBP());
+ setStackLimitIP(context.getStackLimitIP());
+ }
+
+ /**
* Sets the inline-progression-dimension of the nearest ancestor reference area.
*/
public void setRefIPD(int ipd) {
@@ -536,22 +577,27 @@ public class LayoutContext {
/** {@inheritDoc} */
public String toString() {
- return "Layout Context:" +
- "\nStack Limit: \t" + (getStackLimit() == null ? "null" : getStackLimit().toString()) +
- "\nTrailing Space: \t" + (getTrailingSpace() == null ? "null" : getTrailingSpace().toString()) +
- "\nLeading Space: \t" + (getLeadingSpace() == null ? "null" : getLeadingSpace().toString()) +
- "\nReference IPD: \t" + getRefIPD() +
- "\nSpace Adjust: \t" + getSpaceAdjust() +
- "\nIPD Adjust: \t" + getIPDAdjust() +
- "\nResolve Leading Space: \t" + resolveLeadingSpace() +
- "\nSuppress Leading Space: \t" + suppressLeadingSpace() +
- "\nIs First Area: \t" + isFirstArea() +
- "\nStarts New Area: \t" + startsNewArea() +
- "\nIs Last Area: \t" + isLastArea() +
- "\nTry Hyphenate: \t" + tryHyphenate() +
- "\nKeeps: \t[" + (isKeepWithNextPending() ? "keep-with-next" : "") + "]["
- + (isKeepWithPreviousPending() ? "keep-with-previous" : "") + "] pending" +
- "\nBreaks: \tforced [" + (breakBefore != Constants.EN_AUTO ? "break-before" : "") + "]["
+ return "Layout Context:"
+ + "\nStack Limit BPD: \t"
+ + (getStackLimitBP() == null ? "null" : getStackLimitBP().toString())
+ + "\nStack Limit IPD: \t"
+ + (getStackLimitIP() == null ? "null" : getStackLimitIP().toString())
+ + "\nTrailing Space: \t"
+ + (getTrailingSpace() == null ? "null" : getTrailingSpace().toString())
+ + "\nLeading Space: \t"
+ + (getLeadingSpace() == null ? "null" : getLeadingSpace().toString())
+ + "\nReference IPD: \t" + getRefIPD()
+ + "\nSpace Adjust: \t" + getSpaceAdjust()
+ + "\nIPD Adjust: \t" + getIPDAdjust()
+ + "\nResolve Leading Space: \t" + resolveLeadingSpace()
+ + "\nSuppress Leading Space: \t" + suppressLeadingSpace()
+ + "\nIs First Area: \t" + isFirstArea()
+ + "\nStarts New Area: \t" + startsNewArea()
+ + "\nIs Last Area: \t" + isLastArea()
+ + "\nTry Hyphenate: \t" + tryHyphenate()
+ + "\nKeeps: \t[" + (isKeepWithNextPending() ? "keep-with-next" : "") + "]["
+ + (isKeepWithPreviousPending() ? "keep-with-previous" : "") + "] pending"
+ + "\nBreaks: \tforced [" + (breakBefore != Constants.EN_AUTO ? "break-before" : "") + "]["
+ (breakAfter != Constants.EN_AUTO ? "break-after" : "") + "]";
}
diff --git a/src/java/org/apache/fop/layoutmgr/MinOptMaxUtil.java b/src/java/org/apache/fop/layoutmgr/MinOptMaxUtil.java
index ff9bdb1d9..b58af1cfe 100644
--- a/src/java/org/apache/fop/layoutmgr/MinOptMaxUtil.java
+++ b/src/java/org/apache/fop/layoutmgr/MinOptMaxUtil.java
@@ -68,19 +68,16 @@ public class MinOptMaxUtil {
}
/**
- * Extend the minimum length to the given length.
+ * Extends the minimum length to the given length if necessary, and adjusts opt and
+ * max accordingly.
+ *
* @param mom the min/opt/max trait
* @param len the new minimum length
- * @param optToLen if set adjusts the optimum length to be the smaller of the
- * minimum length and the given length
*/
- public static void extendMinimum(MinOptMax mom, int len, boolean optToLen) {
+ public static void extendMinimum(MinOptMax mom, int len) {
if (mom.min < len) {
mom.min = len;
mom.opt = Math.max(mom.min, mom.opt);
- if (optToLen) {
- mom.opt = Math.min(mom.min, len);
- }
mom.max = Math.max(mom.opt, mom.max);
}
}
@@ -111,7 +108,7 @@ public class MinOptMaxUtil {
? 0 : prop.getMinimum(context).getLength().getValue(context)),
(prop.getOptimum(context).isAuto()
? 0 : prop.getOptimum(context).getLength().getValue(context)),
- (prop.getMinimum(context).isAuto()
+ (prop.getMaximum(context).isAuto()
? Integer.MAX_VALUE
: prop.getMaximum(context).getLength().getValue(context)));
return mom;
diff --git a/src/java/org/apache/fop/layoutmgr/PageBreaker.java b/src/java/org/apache/fop/layoutmgr/PageBreaker.java
index cf830a7ec..3e100cd50 100644
--- a/src/java/org/apache/fop/layoutmgr/PageBreaker.java
+++ b/src/java/org/apache/fop/layoutmgr/PageBreaker.java
@@ -156,7 +156,7 @@ public class PageBreaker extends AbstractBreaker {
// element represents a line with footnote citations
bFootnotesPresent = true;
LayoutContext footnoteContext = new LayoutContext(context);
- footnoteContext.setStackLimit(context.getStackLimit());
+ footnoteContext.setStackLimitBP(context.getStackLimitBP());
footnoteContext.setRefIPD(pslm.getCurrentPV()
.getRegionReference(Constants.FO_REGION_BODY).getIPD());
LinkedList footnoteBodyLMs = ((KnuthBlockBox) element).getFootnoteBodyLMs();
diff --git a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java
index 57fc4600e..d98d29b5c 100644
--- a/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java
+++ b/src/java/org/apache/fop/layoutmgr/PageBreakingAlgorithm.java
@@ -364,7 +364,13 @@ class PageBreakingAlgorithm extends BreakingAlgorithm {
} else {
// there are no footnotes
}
- return getLineWidth(activeNode.line) - actualWidth;
+ int diff = getLineWidth(activeNode.line) - actualWidth;
+ if (autoHeight && diff < 0) {
+ //getLineWidth() for auto-height parts return 0 so the diff will be negative
+ return 0; //...but we don't want to shrink in this case. Stick to optimum.
+ } else {
+ return diff;
+ }
}
/** Checks whether footnotes from preceding pages may be deferred to the page after
diff --git a/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java
index c8b89e6af..b1e414527 100644
--- a/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/StaticContentLayoutManager.java
@@ -93,7 +93,7 @@ public class StaticContentLayoutManager extends BlockStackingLayoutManager {
//TODO Empty this method?!?
// set layout dimensions
setContentAreaIPD(context.getRefIPD());
- setContentAreaBPD(context.getStackLimit().opt);
+ setContentAreaBPD(context.getStackLimitBP().opt);
//TODO Copied from elsewhere. May be worthwhile to factor out the common parts.
// currently active LM
@@ -111,10 +111,10 @@ public class StaticContentLayoutManager extends BlockStackingLayoutManager {
}
// Set up a LayoutContext
- MinOptMax bpd = context.getStackLimit();
+ MinOptMax bpd = context.getStackLimitBP();
LayoutContext childLC = new LayoutContext(0);
- childLC.setStackLimit(MinOptMax.subtract(bpd, stackSize));
+ childLC.setStackLimitBP(MinOptMax.subtract(bpd, stackSize));
childLC.setRefIPD(context.getRefIPD());
// get elements from curLM
@@ -307,7 +307,7 @@ public class StaticContentLayoutManager extends BlockStackingLayoutManager {
while ((curLM = getChildLM()) != null) {
LayoutContext childLC = new LayoutContext(0);
- childLC.setStackLimit(context.getStackLimit());
+ childLC.setStackLimitBP(context.getStackLimitBP());
childLC.setRefIPD(context.getRefIPD());
childLC.setWritingMode(context.getWritingMode());
diff --git a/src/java/org/apache/fop/layoutmgr/TraitSetter.java b/src/java/org/apache/fop/layoutmgr/TraitSetter.java
index 841a94705..dfc8c99f2 100644
--- a/src/java/org/apache/fop/layoutmgr/TraitSetter.java
+++ b/src/java/org/apache/fop/layoutmgr/TraitSetter.java
@@ -29,6 +29,7 @@ import org.apache.fop.datatypes.SimplePercentBaseContext;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.fo.properties.CommonMarginBlock;
+import org.apache.fop.fo.properties.CommonMarginBlock;
import org.apache.fop.fo.properties.CommonTextDecoration;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground.BorderInfo;
import org.apache.fop.fonts.Font;
@@ -281,6 +282,90 @@ public class TraitSetter {
}
/**
+ * Add background to an area. This method is mainly used by table-related layout
+ * managers to add background for column, body or row. Since the area corresponding to
+ * border-separation must be filled with the table's background, for every cell an
+ * additional area with the same dimensions is created to hold the background for the
+ * corresponding column/body/row. An additional shift must then be added to
+ * background-position-horizontal/vertical to ensure the background images are
+ * correctly placed. Indeed the placement of images must be made WRT the
+ * column/body/row and not the cell.
+ *
+ * <p>Note: The area's IPD and BPD must be set before calling this method.</p>
+ *
+ * <p>TODO the regular
+ * {@link #addBackground(Area, CommonBorderPaddingBackground, PercentBaseContext)}
+ * method should be used instead, and a means to retrieve the original area's
+ * dimensions must be found.</p>
+ *
+ * <p>TODO the placement of images in the x- or y-direction will be incorrect if
+ * background-repeat is set for that direction.</p>
+ *
+ * @param area the area to set the traits on
+ * @param backProps the background properties
+ * @param context Property evaluation context
+ * @param ipdShift horizontal shift to affect to the background, in addition to the
+ * value of the background-position-horizontal property
+ * @param bpdShift vertical shift to affect to the background, in addition to the
+ * value of the background-position-vertical property
+ * @param referenceIPD value to use as a reference for percentage calculation
+ * @param referenceBPD value to use as a reference for percentage calculation
+ */
+ public static void addBackground(Area area,
+ CommonBorderPaddingBackground backProps,
+ PercentBaseContext context,
+ int ipdShift, int bpdShift, int referenceIPD, int referenceBPD) {
+ if (!backProps.hasBackground()) {
+ return;
+ }
+ Trait.Background back = new Trait.Background();
+ back.setColor(backProps.backgroundColor);
+
+ if (backProps.getImageInfo() != null) {
+ back.setURL(backProps.backgroundImage);
+ back.setImageInfo(backProps.getImageInfo());
+ back.setRepeat(backProps.backgroundRepeat);
+ if (backProps.backgroundPositionHorizontal != null) {
+ if (back.getRepeat() == Constants.EN_NOREPEAT
+ || back.getRepeat() == Constants.EN_REPEATY) {
+ if (area.getIPD() > 0) {
+ PercentBaseContext refContext = new SimplePercentBaseContext(context,
+ LengthBase.IMAGE_BACKGROUND_POSITION_HORIZONTAL,
+ (referenceIPD - back.getImageInfo().getSize().getWidthMpt()));
+
+ back.setHoriz(ipdShift
+ + backProps.backgroundPositionHorizontal.getValue(refContext));
+ } else {
+ // TODO Area IPD has to be set for this to work
+ log.warn("Horizontal background image positioning ignored"
+ + " because the IPD was not set on the area."
+ + " (Yes, it's a bug in FOP)");
+ }
+ }
+ }
+ if (backProps.backgroundPositionVertical != null) {
+ if (back.getRepeat() == Constants.EN_NOREPEAT
+ || back.getRepeat() == Constants.EN_REPEATX) {
+ if (area.getBPD() > 0) {
+ PercentBaseContext refContext = new SimplePercentBaseContext(context,
+ LengthBase.IMAGE_BACKGROUND_POSITION_VERTICAL,
+ (referenceBPD - back.getImageInfo().getSize().getHeightMpt()));
+ back.setVertical(bpdShift
+ + backProps.backgroundPositionVertical.getValue(refContext));
+ } else {
+ // TODO Area BPD has to be set for this to work
+ log.warn("Vertical background image positioning ignored"
+ + " because the BPD was not set on the area."
+ + " (Yes, it's a bug in FOP)");
+ }
+ }
+ }
+ }
+
+ area.addTrait(Trait.BACKGROUND, back);
+ }
+
+ /**
* Add background to an area.
* Layout managers that create areas with a background can use this to
* add the background to the area.
@@ -312,7 +397,7 @@ public class TraitSetter {
back.setHoriz(backProps.backgroundPositionHorizontal.getValue(
new SimplePercentBaseContext(context,
LengthBase.IMAGE_BACKGROUND_POSITION_HORIZONTAL,
- (width - back.getImageInfo().getSize().getHeightMpt())
+ (width - back.getImageInfo().getSize().getWidthMpt())
)
));
} else {
diff --git a/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
index 6426f15db..38e0c35bc 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/AbstractGraphicsLayoutManager.java
@@ -124,13 +124,6 @@ public abstract class AbstractGraphicsLayoutManager extends LeafNodeLayoutManage
}
/**
- * {@inheritDoc}
- */
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
-
- /**
* Returns the image of foreign object area to be put into
* the viewport.
* @return the appropriate area
diff --git a/src/java/org/apache/fop/layoutmgr/inline/AbstractPageNumberCitationLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/AbstractPageNumberCitationLayoutManager.java
index 41d4af1c1..c92bdb6fc 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/AbstractPageNumberCitationLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/AbstractPageNumberCitationLayoutManager.java
@@ -51,7 +51,7 @@ public abstract class AbstractPageNumberCitationLayoutManager extends LeafNodeLa
* Constructor
*
* @param node the formatting object that creates this area
- * @todo better retrieval of font info
+ * TODO better retrieval of font info
*/
public AbstractPageNumberCitationLayoutManager(AbstractPageNumberCitation node) {
super(node);
@@ -83,7 +83,7 @@ public abstract class AbstractPageNumberCitationLayoutManager extends LeafNodeLa
/** {@inheritDoc} */
public InlineArea get(LayoutContext context) {
- curArea = getPageNumberCitationInlineArea(parentLM);
+ curArea = getPageNumberCitationInlineArea();
return curArea;
}
@@ -99,12 +99,15 @@ public abstract class AbstractPageNumberCitationLayoutManager extends LeafNodeLa
}
/**
- * if id can be resolved then simply return a word, otherwise
+ * If id can be resolved then simply return a word, otherwise
* return a resolvable area
+ *
+ * @param parentLM the parent LayoutManager
+ * @return a corresponding InlineArea
*/
- private InlineArea getPageNumberCitationInlineArea(LayoutManager parentLM) {
+ private InlineArea getPageNumberCitationInlineArea() {
PageViewport page = getPSLM().getFirstPVWithID(fobj.getRefId());
- TextArea text = null;
+ TextArea text;
if (page != null) {
String str = page.getPageNumberString();
// get page string from parent, build area
@@ -150,9 +153,5 @@ public abstract class AbstractPageNumberCitationLayoutManager extends LeafNodeLa
return width;
}
- /** {@inheritDoc} */
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
}
diff --git a/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java
index 0430eef0c..b53e442d4 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/CharacterLayoutManager.java
@@ -45,7 +45,6 @@ import org.apache.fop.util.CharUtilities;
* LayoutManager for the fo:character formatting object
*/
public class CharacterLayoutManager extends LeafNodeLayoutManager {
- private Character fobj;
private MinOptMax letterSpaceIPD;
private int hyphIPD;
private Font font;
@@ -57,13 +56,13 @@ public class CharacterLayoutManager extends LeafNodeLayoutManager {
* @param node the fo:character formatting object
*/
public CharacterLayoutManager(Character node) {
- // @todo better null checking of node
super(node);
- fobj = node;
}
/** {@inheritDoc} */
public void initialize() {
+ Character fobj = (Character)this.fobj;
+
FontInfo fi = fobj.getFOEventHandler().getFontInfo();
FontTriplet[] fontkeys = fobj.getCommonFont().getFontState(fi);
font = fi.getFontInstance(fontkeys[0], fobj.getCommonFont().fontSize.getValue(this));
@@ -90,7 +89,7 @@ public class CharacterLayoutManager extends LeafNodeLayoutManager {
text.addWord(String.valueOf(ch), 0);
}
TraitSetter.setProducerID(text, node.getId());
- TraitSetter.addTextDecoration(text, fobj.getTextDecoration());
+ TraitSetter.addTextDecoration(text, node.getTextDecoration());
return text;
}
@@ -105,6 +104,8 @@ public class CharacterLayoutManager extends LeafNodeLayoutManager {
return null;
}
+ Character fobj = (Character)this.fobj;
+
ipd = new MinOptMax(font.getCharWidth(fobj.getCharacter()));
curArea.setIPD(ipd.opt);
@@ -178,14 +179,7 @@ public class CharacterLayoutManager extends LeafNodeLayoutManager {
/** {@inheritDoc} */
public boolean applyChanges(List oldList) {
setFinished(false);
- if (isSomethingChanged) {
- // there is nothing to do,
- // possible changes have already been applied
- // in the hyphenate() method
- return true;
- } else {
- return false;
- }
+ return isSomethingChanged;
}
/** {@inheritDoc} */
@@ -238,10 +232,5 @@ public class CharacterLayoutManager extends LeafNodeLayoutManager {
return returnList;
}
- /** {@inheritDoc} */
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
-
}
diff --git a/src/java/org/apache/fop/layoutmgr/inline/ContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/ContentLayoutManager.java
index 03e9b382a..ff7c5b3ce 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/ContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/ContentLayoutManager.java
@@ -19,9 +19,20 @@
package org.apache.fop.layoutmgr.inline;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.apps.FOUserAgent;
+import org.apache.fop.area.Area;
+import org.apache.fop.area.Block;
+import org.apache.fop.area.LineArea;
+import org.apache.fop.area.inline.InlineArea;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.pagination.Title;
import org.apache.fop.layoutmgr.AbstractBaseLayoutManager;
@@ -34,19 +45,8 @@ import org.apache.fop.layoutmgr.PageSequenceLayoutManager;
import org.apache.fop.layoutmgr.Position;
import org.apache.fop.layoutmgr.PositionIterator;
import org.apache.fop.layoutmgr.SpaceSpecifier;
-import org.apache.fop.area.Area;
-import org.apache.fop.area.LineArea;
-import org.apache.fop.area.inline.InlineArea;
-
-import java.util.LinkedList;
-import java.util.List;
-import java.util.ListIterator;
-import java.util.ArrayList;
-import java.util.Iterator;
import org.apache.fop.traits.MinOptMax;
-import org.apache.fop.area.Block;
-
/**
* Content Layout Manager.
* For use with objects that contain inline areas such as
@@ -115,7 +115,7 @@ public class ContentLayoutManager extends AbstractBaseLayoutManager
childLC.setLeadingSpace(new SpaceSpecifier(false));
childLC.setTrailingSpace(new SpaceSpecifier(false));
// set stackLimit for lines
- childLC.setStackLimit(new MinOptMax(ipd));
+ childLC.setStackLimitIP(new MinOptMax(ipd));
childLC.setRefIPD(ipd);
int lineHeight = 14000;
diff --git a/src/java/org/apache/fop/layoutmgr/inline/ICLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/ICLayoutManager.java
index 4ffafb061..7ca9e0d5e 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/ICLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/ICLayoutManager.java
@@ -31,12 +31,10 @@ import org.apache.fop.fo.flow.InlineContainer;
* and id areas are maintained for later retrieval.
*/
public class ICLayoutManager extends LeafNodeLayoutManager {
- private InlineContainer fobj;
private List childrenLM;
public ICLayoutManager(InlineContainer node, List childLM) {
super(node);
- fobj = node;
childrenLM = childLM;
}
@@ -44,7 +42,4 @@ public class ICLayoutManager extends LeafNodeLayoutManager {
return null;
}
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
}
diff --git a/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java
index b449b6689..e9919e02f 100755
--- a/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/InlineLayoutManager.java
@@ -19,12 +19,13 @@
package org.apache.fop.layoutmgr.inline;
-import java.util.ListIterator;
import java.util.LinkedList;
import java.util.List;
+import java.util.ListIterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.area.Area;
import org.apache.fop.area.inline.InlineArea;
import org.apache.fop.area.inline.InlineBlockParent;
@@ -47,12 +48,12 @@ import org.apache.fop.layoutmgr.InlineKnuthSequence;
import org.apache.fop.layoutmgr.KnuthBox;
import org.apache.fop.layoutmgr.KnuthSequence;
import org.apache.fop.layoutmgr.LayoutContext;
-import org.apache.fop.layoutmgr.NonLeafPosition;
-import org.apache.fop.layoutmgr.SpaceSpecifier;
-import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.layoutmgr.LayoutManager;
+import org.apache.fop.layoutmgr.NonLeafPosition;
import org.apache.fop.layoutmgr.Position;
import org.apache.fop.layoutmgr.PositionIterator;
+import org.apache.fop.layoutmgr.SpaceSpecifier;
+import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.traits.MinOptMax;
import org.apache.fop.traits.SpaceVal;
@@ -296,7 +297,7 @@ public class InlineLayoutManager extends InlineStackingLayoutManager {
);
}
- while ((curLM = (LayoutManager) getChildLM()) != null) {
+ while ((curLM = getChildLM()) != null) {
if (!(curLM instanceof InlineLevelLayoutManager)) {
// A block LM
@@ -435,7 +436,7 @@ public class InlineLayoutManager extends InlineStackingLayoutManager {
// layout context given to lastLM, but must be cleared in the
// layout context given to the other LMs.
LinkedList positionList = new LinkedList();
- NonLeafPosition pos = null;
+ NonLeafPosition pos;
LayoutManager lastLM = null;// last child LM in this iterator
Position lastPos = null;
while (parentIter.hasNext()) {
@@ -599,9 +600,4 @@ public class InlineLayoutManager extends InlineStackingLayoutManager {
return this.auxiliaryPosition;
}
- /** {@inheritDoc} */
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
-
}
diff --git a/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java
index 4d0872a6d..bf1538a7c 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/InlineStackingLayoutManager.java
@@ -75,15 +75,9 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
private Area currentArea; // LineArea or InlineParent
- //private BreakPoss prevBP;
-
/** The child layout context */
protected LayoutContext childLC;
- private boolean bAreaCreated = false;
-
- //private LayoutManager currentLM = null;
-
/** Used to store previous content IPD for each child LM. */
private HashMap hmPrevIPD = new HashMap();
@@ -171,14 +165,6 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
}
/**
- * This method is called by addAreas() so IDs can be added to a page for FOs that
- * support the 'id' property.
- */
- protected void addId() {
- // Do nothing here, overriden in subclasses that have an 'id' property.
- }
-
- /**
* Returns the current area.
* @return the current area
*/
@@ -255,7 +241,7 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
// "unwrap" the Position stored in each element of oldList
while (oldListIterator.hasNext()) {
element = (KnuthElement) oldListIterator.next();
- element.setPosition(((NonLeafPosition)element.getPosition()).getPosition());
+ element.setPosition(element.getPosition().getPosition());
}
// The last element may not have a layout manager (its position == null);
@@ -288,7 +274,7 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
// "unwrap" the Position stored in each element of oldList
while (oldListIterator.hasNext()) {
element = (KnuthElement) oldListIterator.next();
- element.setPosition(((NonLeafPosition)element.getPosition()).getPosition());
+ element.setPosition(element.getPosition().getPosition());
}
((InlineLevelLayoutManager)
@@ -298,14 +284,14 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
/** {@inheritDoc} */
public void getWordChars(StringBuffer sbChars, Position pos) {
- Position newPos = ((NonLeafPosition) pos).getPosition();
+ Position newPos = pos.getPosition();
((InlineLevelLayoutManager)
newPos.getLM()).getWordChars(sbChars, newPos);
}
/** {@inheritDoc} */
public void hyphenate(Position pos, HyphContext hc) {
- Position newPos = ((NonLeafPosition) pos).getPosition();
+ Position newPos = pos.getPosition();
((InlineLevelLayoutManager)
newPos.getLM()).hyphenate(newPos, hc);
}
@@ -318,7 +304,7 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
while (oldListIterator.hasNext()) {
oldElement = (KnuthElement) oldListIterator.next();
oldElement.setPosition
- (((NonLeafPosition) oldElement.getPosition()).getPosition());
+ (oldElement.getPosition().getPosition());
}
// reset the iterator
oldListIterator = oldList.listIterator();
@@ -385,7 +371,7 @@ public abstract class InlineStackingLayoutManager extends AbstractLayoutManager
while (oldListIterator.hasNext()) {
oldElement = (KnuthElement) oldListIterator.next();
oldElement.setPosition
- (((NonLeafPosition) oldElement.getPosition()).getPosition());
+ (oldElement.getPosition().getPosition());
}
// reset the iterator
oldListIterator = oldList.listIterator();
diff --git a/src/java/org/apache/fop/layoutmgr/inline/LeaderLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LeaderLayoutManager.java
index 5f93ab98c..f4bcde96f 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/LeaderLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/LeaderLayoutManager.java
@@ -339,11 +339,6 @@ public class LeaderLayoutManager extends LeafNodeLayoutManager {
return returnList;
}
- /** {@inheritDoc} */
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
-
/**
* {@inheritDoc}
*/
diff --git a/src/java/org/apache/fop/layoutmgr/inline/LeafNodeLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LeafNodeLayoutManager.java
index 78d126194..fb5e9ee4d 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/LeafNodeLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/LeafNodeLayoutManager.java
@@ -65,8 +65,6 @@ public abstract class LeafNodeLayoutManager extends AbstractLayoutManager
/** The alignment context applying to this area */
protected AlignmentContext alignmentContext = null;
- private MinOptMax ipd;
-
/** Flag to indicate if something was changed as part of the getChangeKnuthElements sequence */
protected boolean isSomethingChanged = false;
/** Our area info for the Knuth elements */
@@ -205,14 +203,6 @@ public abstract class LeafNodeLayoutManager extends AbstractLayoutManager
}
/**
- * This method is called by addAreas() so IDs can be added to a page for FOs that
- * support the 'id' property.
- */
- protected void addId() {
- // Do nothing here, overriden in subclasses that have an 'id' property.
- }
-
- /**
* Offset this area.
* Offset the inline area in the bpd direction when adding the
* inline area.
diff --git a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
index 6df7ac00c..9a818232c 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/LineLayoutManager.java
@@ -26,6 +26,7 @@ import java.util.ListIterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.area.Area;
import org.apache.fop.area.LineArea;
import org.apache.fop.area.Trait;
@@ -582,9 +583,6 @@ public class LineLayoutManager extends InlineStackingLayoutManager
// Get a break from currently active child LM
// Set up constraints for inline level managers
- // IPD remaining in line
- MinOptMax availIPD = context.getStackLimit();
-
clearPrevIPD();
//PHASE 1: Create Knuth elements
@@ -646,7 +644,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager
InlineLevelLayoutManager curLM;
LinkedList returnedList = null;
- iLineWidth = context.getStackLimit().opt;
+ iLineWidth = context.getStackLimitIP().opt;
// convert all the text in a sequence of paragraphs made
// of KnuthBox, KnuthGlue and KnuthPenalty objects
@@ -1687,7 +1685,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager
*/
if (false && textAlignment == EN_JUSTIFY) {
// re-compute space adjust ratio
- int updatedDifference = context.getStackLimit().opt
+ int updatedDifference = context.getStackLimitIP().opt
- lbp.lineWidth + lbp.difference;
double updatedRatio = 0.0;
if (updatedDifference > 0) {
@@ -1701,12 +1699,12 @@ public class LineLayoutManager extends InlineStackingLayoutManager
} else if (false && textAlignment == EN_CENTER) {
// re-compute indent
int updatedIndent = lbp.startIndent
- + (context.getStackLimit().opt - lbp.lineWidth) / 2;
+ + (context.getStackLimitIP().opt - lbp.lineWidth) / 2;
lineArea.addTrait(Trait.START_INDENT, new Integer(updatedIndent));
} else if (false && textAlignment == EN_END) {
// re-compute indent
int updatedIndent = lbp.startIndent
- + (context.getStackLimit().opt - lbp.lineWidth);
+ + (context.getStackLimitIP().opt - lbp.lineWidth);
lineArea.addTrait(Trait.START_INDENT, new Integer(updatedIndent));
}
@@ -1770,7 +1768,7 @@ public class LineLayoutManager extends InlineStackingLayoutManager
// set last area flag
blocklc.setFlags(LayoutContext.LAST_AREA,
(context.isLastArea() && childLM == lastLM));
- blocklc.setStackLimit(context.getStackLimit());
+ blocklc.setStackLimitsFrom(context);
// Add the line areas to Area
childLM.addAreas(childPosIter, blocklc);
blocklc.setLeadingSpace(blocklc.getTrailingSpace());
diff --git a/src/java/org/apache/fop/layoutmgr/inline/PageNumberLayoutManager.java b/src/java/org/apache/fop/layoutmgr/inline/PageNumberLayoutManager.java
index 88f1d283c..1aaaaf527 100644
--- a/src/java/org/apache/fop/layoutmgr/inline/PageNumberLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/inline/PageNumberLayoutManager.java
@@ -42,7 +42,7 @@ public class PageNumberLayoutManager extends LeafNodeLayoutManager {
* Constructor
*
* @param node the fo:page-number formatting object that creates the area
- * @todo better null checking of node, font
+ * TODO better null checking of node, font
*/
public PageNumberLayoutManager(PageNumber node) {
super(node);
@@ -131,9 +131,5 @@ public class PageNumberLayoutManager extends LeafNodeLayoutManager {
return width;
}
- /** {@inheritDoc} */
- protected void addId() {
- getPSLM().addIDToPage(fobj.getId());
- }
}
diff --git a/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java b/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java
index 470cbbe9c..c17ddc711 100644
--- a/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/list/ListBlockLayoutManager.java
@@ -19,29 +19,29 @@
package org.apache.fop.layoutmgr.list;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
+import org.apache.fop.area.Area;
+import org.apache.fop.area.Block;
import org.apache.fop.fo.flow.ListBlock;
-import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
import org.apache.fop.layoutmgr.ConditionalElementListener;
import org.apache.fop.layoutmgr.ElementListUtils;
-import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.LayoutContext;
-import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.NonLeafPosition;
+import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.PositionIterator;
import org.apache.fop.layoutmgr.RelSide;
import org.apache.fop.layoutmgr.TraitSetter;
-import org.apache.fop.area.Area;
-import org.apache.fop.area.Block;
import org.apache.fop.traits.MinOptMax;
import org.apache.fop.traits.SpaceVal;
-import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
-
/**
* LayoutManager for a list-block FO.
* A list block contains list items which are stacked within
@@ -156,11 +156,11 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager
addBlockSpacing(0.0, new MinOptMax(layoutContext.getSpaceBefore()));
}
- getPSLM().addIDToPage(getListBlockFO().getId());
+ addId();
// the list block contains areas stacked from each list item
- LayoutManager childLM = null;
+ LayoutManager childLM;
LayoutContext lc = new LayoutContext(0);
LayoutManager firstLM = null;
LayoutManager lastLM = null;
@@ -181,10 +181,10 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager
}
if (pos instanceof NonLeafPosition
&& (pos.getPosition() != null)
- && ((NonLeafPosition) pos).getPosition().getLM() != this) {
+ && pos.getPosition().getLM() != this) {
// pos was created by a child of this ListBlockLM
- positionList.add(((NonLeafPosition) pos).getPosition());
- lastLM = ((NonLeafPosition) pos).getPosition().getLM();
+ positionList.add(pos.getPosition());
+ lastLM = pos.getPosition().getLM();
if (firstLM == null) {
firstLM = lastLM;
}
@@ -200,7 +200,7 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager
lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
lc.setFlags(LayoutContext.FIRST_AREA, childLM == firstLM);
lc.setFlags(LayoutContext.LAST_AREA, childLM == lastLM);
- lc.setStackLimit(layoutContext.getStackLimit());
+ lc.setStackLimitBP(layoutContext.getStackLimitBP());
childLM.addAreas(childPosIter, lc);
}
@@ -218,7 +218,7 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager
curBlockArea = null;
resetSpaces();
- getPSLM().notifyEndOfLayout(((ListBlock)getFObj()).getId());
+ getPSLM().notifyEndOfLayout(fobj.getId());
}
/**
@@ -280,7 +280,7 @@ public class ListBlockLayoutManager extends BlockStackingLayoutManager
/** {@inheritDoc} */
public boolean mustKeepTogether() {
//TODO Keeps will have to be more sophisticated sooner or later
- return ((BlockLevelLayoutManager)getParent()).mustKeepTogether()
+ return super.mustKeepTogether()
|| !getListBlockFO().getKeepTogether().getWithinPage().isAuto()
|| !getListBlockFO().getKeepTogether().getWithinColumn().isAuto();
}
diff --git a/src/java/org/apache/fop/layoutmgr/list/ListItemContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/list/ListItemContentLayoutManager.java
index 853b1a128..8b0028a8f 100644
--- a/src/java/org/apache/fop/layoutmgr/list/ListItemContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/list/ListItemContentLayoutManager.java
@@ -19,24 +19,24 @@
package org.apache.fop.layoutmgr.list;
+import java.util.Iterator;
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.fop.area.Area;
+import org.apache.fop.area.Block;
import org.apache.fop.fo.flow.AbstractListItemPart;
import org.apache.fop.fo.flow.ListItemBody;
import org.apache.fop.fo.flow.ListItemLabel;
import org.apache.fop.layoutmgr.BlockLevelLayoutManager;
import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
-import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.LayoutContext;
-import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.NonLeafPosition;
+import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.PositionIterator;
import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
-import org.apache.fop.area.Area;
-import org.apache.fop.area.Block;
-
-import java.util.Iterator;
-import java.util.List;
-import java.util.LinkedList;
/**
* LayoutManager for a list-item-label or list-item-body FO.
@@ -115,9 +115,9 @@ public class ListItemContentLayoutManager extends BlockStackingLayoutManager {
LayoutContext layoutContext) {
getParentArea(null);
- getPSLM().addIDToPage(getPartFO().getId());
+ addId();
- LayoutManager childLM = null;
+ LayoutManager childLM;
LayoutContext lc = new LayoutContext(0);
LayoutManager firstLM = null;
LayoutManager lastLM = null;
@@ -141,8 +141,8 @@ public class ListItemContentLayoutManager extends BlockStackingLayoutManager {
}
if (pos instanceof NonLeafPosition) {
// pos was created by a child of this ListBlockLM
- positionList.add(((NonLeafPosition) pos).getPosition());
- lastLM = ((NonLeafPosition) pos).getPosition().getLM();
+ positionList.add(pos.getPosition());
+ lastLM = pos.getPosition().getLM();
if (firstLM == null) {
firstLM = lastLM;
}
@@ -162,7 +162,7 @@ public class ListItemContentLayoutManager extends BlockStackingLayoutManager {
lc.setFlags(LayoutContext.LAST_AREA, childLM == lastLM);
// set the space adjustment ratio
lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
- lc.setStackLimit(layoutContext.getStackLimit());
+ lc.setStackLimitBP(layoutContext.getStackLimitBP());
childLM.addAreas(childPosIter, lc);
}
@@ -172,7 +172,7 @@ public class ListItemContentLayoutManager extends BlockStackingLayoutManager {
curBlockArea = null;
- getPSLM().notifyEndOfLayout(((AbstractListItemPart)getFObj()).getId());
+ getPSLM().notifyEndOfLayout(fobj.getId());
}
/**
diff --git a/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java b/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
index dc28e98e2..c6b5b8cf9 100644
--- a/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/list/ListItemLayoutManager.java
@@ -19,8 +19,16 @@
package org.apache.fop.layoutmgr.list;
+import java.util.ArrayList;
+import java.util.LinkedList;
+import java.util.List;
+import java.util.ListIterator;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
+import org.apache.fop.area.Area;
+import org.apache.fop.area.Block;
import org.apache.fop.fo.flow.ListItem;
import org.apache.fop.fo.flow.ListItemBody;
import org.apache.fop.fo.flow.ListItemLabel;
@@ -30,28 +38,21 @@ import org.apache.fop.layoutmgr.BreakElement;
import org.apache.fop.layoutmgr.ConditionalElementListener;
import org.apache.fop.layoutmgr.ElementListObserver;
import org.apache.fop.layoutmgr.ElementListUtils;
-import org.apache.fop.layoutmgr.LayoutManager;
+import org.apache.fop.layoutmgr.KnuthBox;
+import org.apache.fop.layoutmgr.KnuthElement;
+import org.apache.fop.layoutmgr.KnuthPenalty;
+import org.apache.fop.layoutmgr.KnuthPossPosIter;
import org.apache.fop.layoutmgr.LayoutContext;
-import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.NonLeafPosition;
+import org.apache.fop.layoutmgr.Position;
+import org.apache.fop.layoutmgr.PositionIterator;
import org.apache.fop.layoutmgr.RelSide;
import org.apache.fop.layoutmgr.SpaceResolver;
import org.apache.fop.layoutmgr.TraitSetter;
-import org.apache.fop.layoutmgr.KnuthElement;
-import org.apache.fop.layoutmgr.KnuthBox;
-import org.apache.fop.layoutmgr.KnuthPenalty;
-import org.apache.fop.layoutmgr.KnuthPossPosIter;
-import org.apache.fop.area.Area;
-import org.apache.fop.area.Block;
import org.apache.fop.traits.MinOptMax;
import org.apache.fop.traits.SpaceVal;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.LinkedList;
-import java.util.ListIterator;
-
/**
* LayoutManager for a list-item FO.
* The list item contains a list item label and a list item body.
@@ -72,8 +73,6 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
private LinkedList labelList = null;
private LinkedList bodyList = null;
- private int listItemHeight;
-
private boolean discardBorderBefore;
private boolean discardBorderAfter;
private boolean discardPaddingBefore;
@@ -83,7 +82,9 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
private boolean keepWithNextPendingOnLabel;
private boolean keepWithNextPendingOnBody;
-
+
+ private int listItemHeight;
+
private class ListItemPosition extends Position {
private int iLabelFirstIndex;
private int iLabelLastIndex;
@@ -116,6 +117,11 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
}
/** {@inheritDoc} */
+ public boolean generatesAreas() {
+ return true;
+ }
+
+ /** {@inheritDoc} */
public String toString() {
StringBuffer sb = new StringBuffer("ListItemPosition:");
sb.append(getIndex()).append("(");
@@ -301,12 +307,12 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
int additionalPenaltyHeight = 0;
KnuthElement endEl = (KnuthElement)elementLists[0].get(end[0]);
if (endEl instanceof KnuthPenalty) {
- additionalPenaltyHeight = ((KnuthPenalty)endEl).getW();
+ additionalPenaltyHeight = endEl.getW();
}
endEl = (KnuthElement)elementLists[1].get(end[1]);
if (endEl instanceof KnuthPenalty) {
additionalPenaltyHeight = Math.max(
- additionalPenaltyHeight, ((KnuthPenalty)endEl).getW());
+ additionalPenaltyHeight, endEl.getW());
}
int boxHeight = step - addedBoxHeight - penaltyHeight;
@@ -413,10 +419,10 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
// body
// "unwrap" the Positions stored in the elements
ListIterator oldListIterator = oldList.listIterator();
- KnuthElement oldElement = null;
+ KnuthElement oldElement;
while (oldListIterator.hasNext()) {
oldElement = (KnuthElement)oldListIterator.next();
- Position innerPosition = ((NonLeafPosition) oldElement.getPosition()).getPosition();
+ Position innerPosition = oldElement.getPosition().getPosition();
//log.debug(" BLM> unwrapping: " + (oldElement.isBox()
// ? "box " : (oldElement.isGlue() ? "glue " : "penalty"))
// + " creato da " + oldElement.getLayoutManager().getClass().getName());
@@ -459,7 +465,7 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
LayoutContext layoutContext) {
getParentArea(null);
- getPSLM().addIDToPage(getListItemFO().getId());
+ addId();
LayoutContext lc = new LayoutContext(0);
Position firstPos = null;
@@ -478,7 +484,7 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
}
if (pos instanceof NonLeafPosition && pos.getPosition() != null) {
// pos contains a ListItemPosition created by this ListBlockLM
- positionList.add(((NonLeafPosition) pos).getPosition());
+ positionList.add(pos.getPosition());
}
}
@@ -510,7 +516,7 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
// set the space adjustment ratio
lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
// TO DO: use the right stack limit for the label
- lc.setStackLimit(layoutContext.getStackLimit());
+ lc.setStackLimitBP(layoutContext.getStackLimitBP());
label.addAreas(labelIter, lc);
}
@@ -531,7 +537,7 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
// set the space adjustment ratio
lc.setSpaceAdjust(layoutContext.getSpaceAdjust());
// TO DO: use the right stack limit for the body
- lc.setStackLimit(layoutContext.getStackLimit());
+ lc.setStackLimitBP(layoutContext.getStackLimitBP());
body.addAreas(bodyIter, lc);
}
@@ -554,7 +560,7 @@ public class ListItemLayoutManager extends BlockStackingLayoutManager
curBlockArea = null;
resetSpaces();
- getPSLM().notifyEndOfLayout(((ListItem)getFObj()).getId());
+ getPSLM().notifyEndOfLayout(fobj.getId());
}
/**
diff --git a/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java b/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java
index c1e4ae619..61d0f8e6f 100644
--- a/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java
+++ b/src/java/org/apache/fop/layoutmgr/table/ActiveCell.java
@@ -33,6 +33,8 @@ import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.KnuthBox;
import org.apache.fop.layoutmgr.KnuthElement;
import org.apache.fop.layoutmgr.KnuthPenalty;
+import org.apache.fop.layoutmgr.MinOptMaxUtil;
+import org.apache.fop.traits.MinOptMax;
/**
* A cell playing in the construction of steps for a row-group.
@@ -133,6 +135,49 @@ class ActiveCell {
}
}
+ // TODO to be removed along with the RowPainter#computeContentLength method
+ /** See {@link ActiveCell#handleExplicitHeight(MinOptMax, MinOptMax)}. */
+ private static class FillerPenalty extends KnuthPenalty {
+
+ private int contentLength;
+
+ FillerPenalty(KnuthPenalty p, int length) {
+ super(length, p.getP(), p.isFlagged(), p.getBreakClass(),
+ p.getPosition(), p.isAuxiliary());
+ contentLength = p.getW();
+ }
+
+ FillerPenalty(int length) {
+ super(length, 0, false, null, true);
+ contentLength = 0;
+ }
+ }
+
+ /** See {@link ActiveCell#handleExplicitHeight(MinOptMax, MinOptMax)}. */
+ private static class FillerBox extends KnuthBox {
+ FillerBox(int length) {
+ super(length, null, true);
+ }
+ }
+
+ /**
+ * Returns the actual length of the content represented by the given element. In the
+ * case where this element is used as a filler to match a row's fixed height, the
+ * value returned by the getW() method will be higher than the actual content.
+ *
+ * @param el an element
+ * @return the actual content length corresponding to the element
+ */
+ static int getElementContentLength(KnuthElement el) {
+ if (el instanceof FillerPenalty) {
+ return ((FillerPenalty) el).contentLength;
+ } else if (el instanceof FillerBox) {
+ return 0;
+ } else {
+ return el.getW();
+ }
+ }
+
ActiveCell(PrimaryGridUnit pgu, EffRow row, int rowIndex, int previousRowsLength,
TableLayoutManager tableLM) {
this.pgu = pgu;
@@ -149,23 +194,10 @@ class ActiveCell {
+ pgu.getBeforeBorderWidth(0, ConditionalBorder.REST);
bpAfterNormal = paddingAfterNormal + pgu.getAfterBorderWidth(ConditionalBorder.NORMAL);
bpAfterTrailing = paddingAfterTrailing + pgu.getAfterBorderWidth(0, ConditionalBorder.REST);
- boolean makeBoxForWholeRow = false;
- if (row.getExplicitHeight().min > 0) {
- boolean contentsSmaller = ElementListUtils.removeLegalBreaks(
- pgu.getElements(), row.getExplicitHeight());
- if (contentsSmaller) {
- makeBoxForWholeRow = true;
- }
- }
- if (makeBoxForWholeRow) {
- elementList = new java.util.ArrayList(1);
- int height = row.getHeight().opt;
- height -= 2 * tableLM.getHalfBorderSeparationBPD();
- height -= bpBeforeNormal + bpAfterNormal;
- elementList.add(new KnuthBoxCellWithBPD(height));
- } else {
- elementList = pgu.getElements();
- }
+ elementList = pgu.getElements();
+ handleExplicitHeight(
+ MinOptMaxUtil.toMinOptMax(pgu.getCell().getBlockProgressionDimension(), tableLM),
+ row.getExplicitHeight());
knuthIter = elementList.listIterator();
includedLength = -1; // Avoid troubles with cells having content of zero length
totalLength = previousRowsLength + ElementListUtils.calcContentLength(elementList);
@@ -182,6 +214,46 @@ class ActiveCell {
}
}
+ /**
+ * Modifies the cell's element list by putting filler elements, so that the cell's or
+ * row's explicit height is always reached.
+ *
+ * TODO this will work properly only for the first break. Then the limitation
+ * explained on http://wiki.apache.org/xmlgraphics-fop/TableLayout/KnownProblems
+ * occurs. The list of elements needs to be re-adjusted after each break.
+ */
+ private void handleExplicitHeight(MinOptMax cellBPD, MinOptMax rowBPD) {
+ int minBPD = Math.max(cellBPD.min, rowBPD.min);
+ if (minBPD > 0) {
+ ListIterator iter = elementList.listIterator();
+ int cumulateLength = 0;
+ boolean prevIsBox = false;
+ while (iter.hasNext() && cumulateLength < minBPD) {
+ KnuthElement el = (KnuthElement) iter.next();
+ if (el.isBox()) {
+ prevIsBox = true;
+ cumulateLength += el.getW();
+ } else if (el.isGlue()) {
+ if (prevIsBox) {
+ elementList.add(iter.nextIndex() - 1,
+ new FillerPenalty(minBPD - cumulateLength));
+ }
+ prevIsBox = false;
+ cumulateLength += el.getW();
+ } else {
+ prevIsBox = false;
+ if (cumulateLength + el.getW() < minBPD) {
+ iter.set(new FillerPenalty((KnuthPenalty) el, minBPD - cumulateLength));
+ }
+ }
+ }
+ }
+ int optBPD = Math.max(minBPD, Math.max(cellBPD.opt, rowBPD.opt));
+ if (pgu.getContentLength() < optBPD) {
+ elementList.add(new FillerBox(optBPD - pgu.getContentLength()));
+ }
+ }
+
PrimaryGridUnit getPrimaryGridUnit() {
return pgu;
}
@@ -265,14 +337,22 @@ class ActiveCell {
}
/**
- * Returns the last step for this cell.
+ * Returns the last step for this cell. This includes the normal border- and
+ * padding-before, the whole content, the normal padding-after, and the
+ * <em>trailing</em> after border. Indeed, if the normal border is taken instead,
+ * and appears to be smaller than the trailing one, the last step may be smaller than
+ * the current step (see TableStepper#considerRowLastStep). This will produce a wrong
+ * infinite penalty, plus the cell's content won't be taken into account since the
+ * final step will be smaller than the current one (see {@link #signalNextStep(int)}).
+ * This actually means that the content will be swallowed.
*
- * @return the step including all of the cell's content plus the normal borders and paddings
+ * @return the length of last step
*/
int getLastStep() {
assert nextStep.end == elementList.size() - 1;
assert nextStep.contentLength == totalLength && nextStep.penaltyLength == 0;
- int lastStep = bpBeforeNormal + totalLength + bpAfterNormal;
+ int lastStep = bpBeforeNormal + totalLength + paddingAfterNormal
+ + pgu.getAfterBorderWidth(ConditionalBorder.LEADING_TRAILING);
log.debug(this + ": last step = " + lastStep);
return lastStep;
}
@@ -394,8 +474,12 @@ class ActiveCell {
*/
void endRow(int rowIndex) {
if (endsOnRow(rowIndex)) {
+ // Subtract the old value of bpAfterTrailing...
+ nextStep.totalLength -= bpAfterTrailing;
bpAfterTrailing = paddingAfterNormal
+ pgu.getAfterBorderWidth(ConditionalBorder.LEADING_TRAILING);
+ // ... and add the new one
+ nextStep.totalLength += bpAfterTrailing;
lastCellPart = true;
} else {
bpBeforeLeading = paddingBeforeLeading
@@ -445,13 +529,6 @@ class ActiveCell {
return new CellPart(pgu, nextStep.start, previousStep.end, lastCellPart,
0, 0, previousStep.penaltyLength,
bpBeforeNormal, bpBeforeFirst, bpAfterNormal, bpAfterTrailing);
- } else if (nextStep.start == 0 && nextStep.end == 0
- && elementList.size() == 1
- && elementList.get(0) instanceof KnuthBoxCellWithBPD) {
- //Special case: Cell with fixed BPD
- return new CellPart(pgu, 0, pgu.getElements().size() - 1, lastCellPart,
- nextStep.condBeforeContentLength, length, nextStep.penaltyLength,
- bpBeforeNormal, bpBeforeFirst, bpAfterNormal, bpAfterTrailing);
} else {
return new CellPart(pgu, nextStep.start, nextStep.end, lastCellPart,
nextStep.condBeforeContentLength, length, nextStep.penaltyLength,
@@ -463,20 +540,9 @@ class ActiveCell {
return keepWithNextSignal;
}
-
+
/** {@inheritDoc} */
public String toString() {
return "Cell " + (pgu.getRowIndex() + 1) + "." + (pgu.getColIndex() + 1);
}
-
-
- /**
- * Marker class denoting table cells fitting in just one box (no legal break inside).
- */
- private static class KnuthBoxCellWithBPD extends KnuthBox {
-
- public KnuthBoxCellWithBPD(int w) {
- super(w, null, true);
- }
- }
}
diff --git a/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java
index c2e26e18d..9c97ca827 100644
--- a/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/RowGroupLayoutManager.java
@@ -19,16 +19,16 @@
package org.apache.fop.layoutmgr.table;
+import java.util.Iterator;
import java.util.LinkedList;
-import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.fop.fo.Constants;
-import org.apache.fop.fo.FONode;
import org.apache.fop.fo.flow.table.EffRow;
import org.apache.fop.fo.flow.table.GridUnit;
import org.apache.fop.fo.flow.table.PrimaryGridUnit;
+import org.apache.fop.fo.flow.table.TableColumn;
import org.apache.fop.fo.flow.table.TableRow;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.fo.properties.LengthRangeProperty;
@@ -94,137 +94,119 @@ class RowGroupLayoutManager {
private void createElementsForRowGroup(LayoutContext context, int alignment,
int bodyType, LinkedList returnList) {
log.debug("Handling row group with " + rowGroup.length + " rows...");
+ EffRow row;
+ for (int rgi = 0; rgi < rowGroup.length; rgi++) {
+ row = rowGroup[rgi];
+ for (Iterator iter = row.getGridUnits().iterator(); iter.hasNext();) {
+ GridUnit gu = (GridUnit) iter.next();
+ if (gu.isPrimary()) {
+ PrimaryGridUnit primary = gu.getPrimary();
+ // TODO a new LM must be created for every new static-content
+ primary.createCellLM();
+ primary.getCellLM().setParent(tableLM);
+ //Calculate width of cell
+ int spanWidth = 0;
+ Iterator colIter = tableLM.getTable().getColumns().listIterator(
+ primary.getColIndex());
+ for (int i = 0, c = primary.getCell().getNumberColumnsSpanned(); i < c; i++) {
+ spanWidth += ((TableColumn) colIter.next()).getColumnWidth().getValue(
+ tableLM);
+ }
+ LayoutContext childLC = new LayoutContext(0);
+ childLC.setStackLimitBP(context.getStackLimitBP()); //necessary?
+ childLC.setRefIPD(spanWidth);
+
+ //Get the element list for the cell contents
+ LinkedList elems = primary.getCellLM().getNextKnuthElements(
+ childLC, alignment);
+ ElementListObserver.observe(elems, "table-cell", primary.getCell().getId());
+ primary.setElements(elems);
+ }
+ }
+ }
+ computeRowHeights();
+ LinkedList elements = tableStepper.getCombinedKnuthElementsForRowGroup(context,
+ rowGroup, bodyType);
+ returnList.addAll(elements);
+ }
+
+ /**
+ * Calculate the heights of the rows in the row group, see CSS21, 17.5.3 Table height
+ * algorithms.
+ *
+ * TODO this method will need to be adapted once clarification has been made by the
+ * W3C regarding whether borders or border-separation must be included or not
+ */
+ private void computeRowHeights() {
+ log.debug("rowGroup:");
MinOptMax[] rowHeights = new MinOptMax[rowGroup.length];
- MinOptMax[] explicitRowHeights = new MinOptMax[rowGroup.length];
EffRow row;
- List pgus = new java.util.ArrayList(); //holds a list of a row's primary grid units
for (int rgi = 0; rgi < rowGroup.length; rgi++) {
row = rowGroup[rgi];
- rowHeights[rgi] = new MinOptMax(0, 0, Integer.MAX_VALUE);
- explicitRowHeights[rgi] = new MinOptMax(0, 0, Integer.MAX_VALUE);
-
- pgus.clear();
- TableRow tableRow = null;
- // The row's minimum content height; 0 if the row's height is auto, otherwise
- // the .minimum component of the explicitly specified value
- int minRowBPD = 0;
// The BPD of the biggest cell in the row
- int maxCellBPD = 0;
- for (int j = 0; j < row.getGridUnits().size(); j++) {
- GridUnit gu = row.getGridUnit(j);
- if ((gu.isPrimary() || (gu.getColSpanIndex() == 0 && gu.isLastGridUnitRowSpan()))
- && !gu.isEmpty()) {
+// int maxCellBPD = 0;
+ MinOptMax explicitRowHeight;
+ TableRow tableRowFO = rowGroup[rgi].getTableRow();
+ if (tableRowFO == null) {
+ rowHeights[rgi] = new MinOptMax(0, 0, Integer.MAX_VALUE);
+ explicitRowHeight = new MinOptMax(0, 0, Integer.MAX_VALUE);
+ } else {
+ LengthRangeProperty rowBPD = tableRowFO.getBlockProgressionDimension();
+ rowHeights[rgi] = MinOptMaxUtil.toMinOptMax(rowBPD, tableLM);
+ explicitRowHeight = MinOptMaxUtil.toMinOptMax(rowBPD, tableLM);
+ }
+ for (Iterator iter = row.getGridUnits().iterator(); iter.hasNext();) {
+ GridUnit gu = (GridUnit) iter.next();
+ if (!gu.isEmpty() && gu.getColSpanIndex() == 0 && gu.isLastGridUnitRowSpan()) {
PrimaryGridUnit primary = gu.getPrimary();
-
- if (gu.isPrimary()) {
- // TODO a new LM must be created for every new static-content
- primary.createCellLM();
- primary.getCellLM().setParent(tableLM);
-
- //Determine the table-row if any
- if (tableRow == null && primary.getRow() != null) {
- tableRow = primary.getRow();
-
- //Check for bpd on row, see CSS21, 17.5.3 Table height algorithms
- LengthRangeProperty rowBPD = tableRow.getBlockProgressionDimension();
- if (!rowBPD.getMinimum(tableLM).isAuto()) {
- minRowBPD = Math.max(minRowBPD,
- rowBPD.getMinimum(tableLM).getLength().getValue(tableLM));
- }
- MinOptMaxUtil.restrict(explicitRowHeights[rgi], rowBPD, tableLM);
-
- }
-
- //Calculate width of cell
- int spanWidth = 0;
- for (int i = primary.getColIndex();
- i < primary.getColIndex()
- + primary.getCell().getNumberColumnsSpanned();
- i++) {
- if (tableLM.getColumns().getColumn(i + 1) != null) {
- spanWidth += tableLM.getColumns().getColumn(i + 1)
- .getColumnWidth().getValue(tableLM);
- }
- }
- LayoutContext childLC = new LayoutContext(0);
- childLC.setStackLimit(context.getStackLimit()); //necessary?
- childLC.setRefIPD(spanWidth);
-
- //Get the element list for the cell contents
- LinkedList elems = primary.getCellLM().getNextKnuthElements(
- childLC, alignment);
- ElementListObserver.observe(elems, "table-cell", primary.getCell().getId());
- primary.setElements(elems);
+ int effectiveCellBPD = 0;
+ LengthRangeProperty cellBPD = primary.getCell().getBlockProgressionDimension();
+ if (!cellBPD.getMinimum(tableLM).isAuto()) {
+ effectiveCellBPD = cellBPD.getMinimum(tableLM).getLength()
+ .getValue(tableLM);
}
-
- //Calculate height of row, see CSS21, 17.5.3 Table height algorithms
- if (gu.isLastGridUnitRowSpan()) {
- // The effective cell's bpd, after taking into account bpd
- // (possibly explicitly) set on the row or on the cell, and the
- // cell's content length
- int effectiveCellBPD = minRowBPD;
- LengthRangeProperty cellBPD = primary.getCell()
- .getBlockProgressionDimension();
- if (!cellBPD.getMinimum(tableLM).isAuto()) {
- effectiveCellBPD = Math.max(effectiveCellBPD,
- cellBPD.getMinimum(tableLM).getLength().getValue(tableLM));
- }
- if (!cellBPD.getOptimum(tableLM).isAuto()) {
- effectiveCellBPD = Math.max(effectiveCellBPD,
- cellBPD.getOptimum(tableLM).getLength().getValue(tableLM));
- }
- if (gu.getRowSpanIndex() == 0) {
- //TODO ATM only non-row-spanned cells are taken for this
- MinOptMaxUtil.restrict(explicitRowHeights[rgi], cellBPD, tableLM);
- }
- effectiveCellBPD = Math.max(effectiveCellBPD,
- primary.getContentLength());
-
- int borderWidths = primary.getBeforeAfterBorderWidth();
- int padding = 0;
- maxCellBPD = Math.max(maxCellBPD, effectiveCellBPD);
- CommonBorderPaddingBackground cbpb
- = primary.getCell().getCommonBorderPaddingBackground();
- padding += cbpb.getPaddingBefore(false, primary.getCellLM());
- padding += cbpb.getPaddingAfter(false, primary.getCellLM());
- int effRowHeight = effectiveCellBPD
- + padding + borderWidths;
- for (int previous = 0; previous < gu.getRowSpanIndex(); previous++) {
- effRowHeight -= rowHeights[rgi - previous - 1].opt;
- }
- if (effRowHeight > rowHeights[rgi].min) {
- //This is the new height of the (grid) row
- MinOptMaxUtil.extendMinimum(rowHeights[rgi], effRowHeight, false);
- }
+ if (!cellBPD.getOptimum(tableLM).isAuto()) {
+ effectiveCellBPD = cellBPD.getOptimum(tableLM).getLength()
+ .getValue(tableLM);
}
-
- if (gu.isPrimary()) {
- pgus.add(primary);
+ if (gu.getRowSpanIndex() == 0) {
+ effectiveCellBPD = Math.max(effectiveCellBPD, explicitRowHeight.opt);
+ }
+ effectiveCellBPD = Math.max(effectiveCellBPD, primary.getContentLength());
+ int borderWidths = primary.getBeforeAfterBorderWidth();
+ int padding = 0;
+ CommonBorderPaddingBackground cbpb = primary.getCell()
+ .getCommonBorderPaddingBackground();
+ padding += cbpb.getPaddingBefore(false, primary.getCellLM());
+ padding += cbpb.getPaddingAfter(false, primary.getCellLM());
+ int effRowHeight = effectiveCellBPD + padding + borderWidths;
+ for (int prev = rgi - 1; prev >= rgi - gu.getRowSpanIndex(); prev--) {
+ effRowHeight -= rowHeights[prev].opt;
+ }
+ if (effRowHeight > rowHeights[rgi].min) {
+ // This is the new height of the (grid) row
+ MinOptMaxUtil.extendMinimum(rowHeights[rgi], effRowHeight);
}
}
}
row.setHeight(rowHeights[rgi]);
- row.setExplicitHeight(explicitRowHeights[rgi]);
- if (maxCellBPD > row.getExplicitHeight().max) {
- log.warn(FONode.decorateWithContextInfo(
- "The contents of row " + (row.getIndex() + 1)
- + " are taller than they should be (there is a"
- + " block-progression-dimension or height constraint on the indicated row)."
- + " Due to its contents the row grows"
- + " to " + maxCellBPD + " millipoints, but the row shouldn't get"
- + " any taller than " + row.getExplicitHeight() + " millipoints.",
- row.getTableRow()));
- }
- }
- if (log.isDebugEnabled()) {
- log.debug("rowGroup:");
- for (int i = 0; i < rowHeights.length; i++) {
- log.debug(" height=" + rowHeights[i] + " explicit=" + explicitRowHeights[i]);
+ row.setExplicitHeight(explicitRowHeight);
+ // TODO re-enable and improve after clarification
+// if (maxCellBPD > row.getExplicitHeight().max) {
+// log.warn(FONode.decorateWithContextInfo(
+// "The contents of row " + (row.getIndex() + 1)
+// + " are taller than they should be (there is a"
+// + " block-progression-dimension or height constraint
+// + " on the indicated row)."
+// + " Due to its contents the row grows"
+// + " to " + maxCellBPD + " millipoints, but the row shouldn't get"
+// + " any taller than " + row.getExplicitHeight() + " millipoints.",
+// row.getTableRow()));
+// }
+ if (log.isDebugEnabled()) {
+ log.debug(" height=" + rowHeights[rgi] + " explicit=" + explicitRowHeight);
}
}
- LinkedList elements = tableStepper.getCombinedKnuthElementsForRowGroup(context,
- rowGroup, bodyType);
- returnList.addAll(elements);
}
}
diff --git a/src/java/org/apache/fop/layoutmgr/table/RowPainter.java b/src/java/org/apache/fop/layoutmgr/table/RowPainter.java
index 022ff0589..bed9c53ae 100644
--- a/src/java/org/apache/fop/layoutmgr/table/RowPainter.java
+++ b/src/java/org/apache/fop/layoutmgr/table/RowPainter.java
@@ -23,25 +23,27 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
+import java.util.ListIterator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.fop.area.Block;
import org.apache.fop.fo.flow.table.ConditionalBorder;
import org.apache.fop.fo.flow.table.EffRow;
import org.apache.fop.fo.flow.table.GridUnit;
import org.apache.fop.fo.flow.table.PrimaryGridUnit;
-import org.apache.fop.fo.flow.table.TableRow;
+import org.apache.fop.fo.flow.table.TableBody;
+import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.KnuthElement;
import org.apache.fop.layoutmgr.KnuthPossPosIter;
import org.apache.fop.layoutmgr.LayoutContext;
import org.apache.fop.layoutmgr.SpaceResolver;
+import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.traits.BorderProps;
class RowPainter {
private static Log log = LogFactory.getLog(RowPainter.class);
- /** The fo:table-row containing the currently handled grid rows. */
- private TableRow rowFO = null;
private int colCount;
private int currentRowOffset = 0;
/** Currently handled row (= last encountered row). */
@@ -71,6 +73,13 @@ class RowPainter {
private CellPart[] firstCellParts;
private CellPart[] lastCellParts;
+ /** y-offset of the current table part. */
+ private int tablePartOffset = 0;
+ /** See {@link RowPainter#registerPartBackgroundArea(Block)}. */
+ private CommonBorderPaddingBackground tablePartBackground;
+ /** See {@link RowPainter#registerPartBackgroundArea(Block)}. */
+ private List tablePartBackgroundAreas;
+
private TableContentLayoutManager tclm;
RowPainter(TableContentLayoutManager tclm, LayoutContext layoutContext) {
@@ -85,6 +94,44 @@ class RowPainter {
this.firstRowOnPageIndex = -1;
}
+ void startTablePart(TableBody tablePart) {
+ CommonBorderPaddingBackground background = tablePart.getCommonBorderPaddingBackground();
+ if (background.hasBackground()) {
+ tablePartBackground = background;
+ if (tablePartBackgroundAreas == null) {
+ tablePartBackgroundAreas = new ArrayList();
+ }
+ }
+ tablePartOffset = currentRowOffset;
+ }
+
+ /**
+ * Signals that the end of the current table part is reached.
+ *
+ * @param lastInBody true if the part is the last table-body element to be displayed
+ * on the current page. In which case all the cells must be flushed even if they
+ * aren't finished, plus the proper collapsed borders must be selected (trailing
+ * instead of normal, or rest if the cell is unfinished)
+ * @param lastOnPage true if the part is the last to be displayed on the current page.
+ * In which case collapsed after borders for the cells on the last row must be drawn
+ * in the outer mode
+ */
+ void endTablePart(boolean lastInBody, boolean lastOnPage) {
+ addAreasAndFlushRow(lastInBody, lastOnPage);
+
+ if (tablePartBackground != null) {
+ TableLayoutManager tableLM = tclm.getTableLM();
+ for (Iterator iter = tablePartBackgroundAreas.iterator(); iter.hasNext();) {
+ Block backgroundArea = (Block) iter.next();
+ TraitSetter.addBackground(backgroundArea, tablePartBackground, tableLM,
+ -backgroundArea.getXOffset(), tablePartOffset - backgroundArea.getYOffset(),
+ tableLM.getContentAreaIPD(), currentRowOffset - tablePartOffset);
+ }
+ tablePartBackground = null;
+ tablePartBackgroundAreas.clear();
+ }
+ }
+
int getAccumulatedBPD() {
return currentRowOffset;
}
@@ -108,7 +155,6 @@ class RowPainter {
currentRow = row;
}
}
- rowFO = currentRow.getTableRow();
if (firstRowIndex < 0) {
firstRowIndex = currentRow.getIndex();
if (firstRowOnPageIndex < 0) {
@@ -148,7 +194,7 @@ class RowPainter {
* displayed on the current page. In which case collapsed after borders must be drawn
* in the outer mode
*/
- void addAreasAndFlushRow(boolean lastInPart, boolean lastOnPage) {
+ private void addAreasAndFlushRow(boolean lastInPart, boolean lastOnPage) {
if (log.isDebugEnabled()) {
log.debug("Remembering yoffset for row " + currentRow.getIndex() + ": "
+ currentRowOffset);
@@ -182,8 +228,6 @@ class RowPainter {
}
// Then add areas for cells finishing on the current row
- tclm.addRowBackgroundArea(rowFO, actualRowHeight, layoutContext.getRefIPD(),
- currentRowOffset);
for (int i = 0; i < colCount; i++) {
GridUnit currentGU = currentRow.getGridUnit(i);
if (!currentGU.isEmpty() && currentGU.getColSpanIndex() == 0
@@ -255,18 +299,22 @@ class RowPainter {
// cell, in most cases)
return 0;
} else {
- int actualStart = startIndex;
+ ListIterator iter = pgu.getElements().listIterator(startIndex);
// Skip from the content length calculation glues and penalties occurring at the
// beginning of the page
- while (actualStart <= endIndex
- && !((KnuthElement) pgu.getElements().get(actualStart)).isBox()) {
- actualStart++;
+ boolean nextIsBox = false;
+ while (iter.nextIndex() <= endIndex && !nextIsBox) {
+ nextIsBox = ((KnuthElement) iter.next()).isBox();
}
- int len = ElementListUtils.calcContentLength(
- pgu.getElements(), actualStart, endIndex);
- KnuthElement el = (KnuthElement)pgu.getElements().get(endIndex);
- if (el.isPenalty()) {
- len += el.getW();
+ int len = 0;
+ if (((KnuthElement) iter.previous()).isBox()) {
+ while (iter.nextIndex() < endIndex) {
+ KnuthElement el = (KnuthElement) iter.next();
+ if (el.isBox() || el.isGlue()) {
+ len += el.getW();
+ }
+ }
+ len += ActiveCell.getElementContentLength((KnuthElement) iter.next());
}
return len;
}
@@ -278,8 +326,20 @@ class RowPainter {
* Determine the index of the first row of this cell that will be displayed on the
* current page.
*/
- int startRowIndex = Math.max(pgu.getRowIndex(), firstRowIndex);
int currentRowIndex = currentRow.getIndex();
+ int startRowIndex;
+ int firstRowHeight;
+ if (pgu.getRowIndex() >= firstRowIndex) {
+ startRowIndex = pgu.getRowIndex();
+ if (startRowIndex < currentRowIndex) {
+ firstRowHeight = getRowOffset(startRowIndex + 1) - getRowOffset(startRowIndex);
+ } else {
+ firstRowHeight = rowHeight;
+ }
+ } else {
+ startRowIndex = firstRowIndex;
+ firstRowHeight = 0;
+ }
/*
* In collapsing-border model, if the cell spans over several columns/rows then
@@ -319,7 +379,25 @@ class RowPainter {
cellLM.addAreas(new KnuthPossPosIter(pgu.getElements(), startPos, endPos + 1),
layoutContext, spannedGridRowHeights, startRowIndex - pgu.getRowIndex(),
currentRowIndex - pgu.getRowIndex(), borderBeforeWhich, borderAfterWhich,
- startRowIndex == firstRowOnPageIndex, lastOnPage);
+ startRowIndex == firstRowOnPageIndex, lastOnPage, this, firstRowHeight);
+ }
+
+
+ /**
+ * Registers the given area, that will be used to render the part of
+ * table-header/footer/body background covered by a table-cell. If percentages are
+ * used to place the background image, the final bpd of the (fraction of) table part
+ * that will be rendered on the current page must be known. The traits can't then be
+ * set when the areas for the cell are created since at that moment this bpd is yet
+ * unknown. So they will instead be set in
+ * {@link #addAreasAndFlushRow(boolean, boolean)}.
+ *
+ * @param backgroundArea the block of the cell's dimensions that will hold the part
+ * background
+ */
+ void registerPartBackgroundArea(Block backgroundArea) {
+ tclm.getTableLM().addBackgroundArea(backgroundArea);
+ tablePartBackgroundAreas.add(backgroundArea);
}
/**
@@ -357,11 +435,13 @@ class RowPainter {
}
// TODO get rid of that
+ /** Signals that the first table-body instance has started. */
void startBody() {
Arrays.fill(firstCellOnPage, true);
}
// TODO get rid of that
+ /** Signals that the last table-body instance has ended. */
void endBody() {
Arrays.fill(firstCellOnPage, false);
}
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java
index 6d2e49e96..2e5bbdf1f 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableAndCaptionLayoutManager.java
@@ -23,7 +23,6 @@ import org.apache.fop.fo.flow.table.TableAndCaption;
import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
import org.apache.fop.layoutmgr.LayoutContext;
import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.layoutmgr.Position;
import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
@@ -36,8 +35,7 @@ import org.apache.fop.area.Block;
* @todo Implement getNextKnuthElements()
*/
public class TableAndCaptionLayoutManager extends BlockStackingLayoutManager {
- private TableAndCaption fobj;
-
+
private Block curBlockArea;
//private List childBreaks = new java.util.ArrayList();
@@ -48,7 +46,6 @@ public class TableAndCaptionLayoutManager extends BlockStackingLayoutManager {
*/
public TableAndCaptionLayoutManager(TableAndCaption node) {
super(node);
- fobj = node;
}
/**
@@ -134,7 +131,7 @@ public class TableAndCaptionLayoutManager extends BlockStackingLayoutManager {
public void addAreas(PositionIterator parentIter,
LayoutContext layoutContext) {
getParentArea(null);
- getPSLM().addIDToPage(fobj.getId());
+ addId();
/* TODO: Reimplement using Knuth approach
LayoutManager childLM;
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java
index 4c21df937..674fd9a90 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableCaptionLayoutManager.java
@@ -23,7 +23,6 @@ import org.apache.fop.fo.flow.table.TableCaption;
import org.apache.fop.layoutmgr.BlockStackingLayoutManager;
import org.apache.fop.layoutmgr.LayoutContext;
import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.layoutmgr.Position;
import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
@@ -34,7 +33,6 @@ import org.apache.fop.area.Block;
* @todo Implement getNextKnuthElements()
*/
public class TableCaptionLayoutManager extends BlockStackingLayoutManager {
- private TableCaption fobj;
private Block curBlockArea;
@@ -46,7 +44,6 @@ public class TableCaptionLayoutManager extends BlockStackingLayoutManager {
*/
public TableCaptionLayoutManager(TableCaption node) {
super(node);
- fobj = node;
}
/**
@@ -133,7 +130,7 @@ public class TableCaptionLayoutManager extends BlockStackingLayoutManager {
public void addAreas(PositionIterator parentIter,
LayoutContext layoutContext) {
getParentArea(null);
- getPSLM().addIDToPage(fobj.getId());
+ addId();
/* TODO: Reimplement using Knuth approach
LayoutManager childLM;
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
index 289785d68..8acfebca0 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableCellLayoutManager.java
@@ -23,16 +23,19 @@ import java.util.LinkedList;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+
import org.apache.fop.area.Area;
import org.apache.fop.area.Block;
import org.apache.fop.area.Trait;
import org.apache.fop.datatypes.PercentBaseContext;
-import org.apache.fop.fo.FONode;
import org.apache.fop.fo.flow.table.ConditionalBorder;
import org.apache.fop.fo.flow.table.GridUnit;
import org.apache.fop.fo.flow.table.PrimaryGridUnit;
import org.apache.fop.fo.flow.table.Table;
+import org.apache.fop.fo.flow.table.TableBody;
import org.apache.fop.fo.flow.table.TableCell;
+import org.apache.fop.fo.flow.table.TableColumn;
+import org.apache.fop.fo.flow.table.TableRow;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground;
import org.apache.fop.fo.properties.CommonBorderPaddingBackground.BorderInfo;
import org.apache.fop.layoutmgr.AreaAdditionUtil;
@@ -71,9 +74,8 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
private int xoffset;
private int yoffset;
private int cellIPD;
- private int rowHeight;
+ private int totalHeight;
private int usedBPD;
- private int borderAndPaddingBPD;
private boolean emptyCell = true;
/**
@@ -96,31 +98,11 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
return getTable().isSeparateBorderModel();
}
- /** {@inheritDoc} */
- public void initialize() {
- borderAndPaddingBPD = 0;
- borderAndPaddingBPD += getTableCell()
- .getCommonBorderPaddingBackground().getBorderBeforeWidth(false);
- borderAndPaddingBPD += getTableCell()
- .getCommonBorderPaddingBackground().getBorderAfterWidth(false);
- if (!isSeparateBorderModel()) {
- borderAndPaddingBPD /= 2;
- }
- borderAndPaddingBPD += getTableCell().getCommonBorderPaddingBackground()
- .getPaddingBefore(false, this);
- borderAndPaddingBPD += getTableCell().getCommonBorderPaddingBackground()
- .getPaddingAfter(false, this);
- }
-
/**
* @return the table owning this cell
*/
public Table getTable() {
- FONode node = fobj.getParent();
- while (!(node instanceof Table)) {
- node = node.getParent();
- }
- return (Table)node;
+ return getTableCell().getTable();
}
@@ -148,13 +130,13 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
* {@inheritDoc}
*/
public LinkedList getNextKnuthElements(LayoutContext context, int alignment) {
- MinOptMax stackLimit = new MinOptMax(context.getStackLimit());
+ MinOptMax stackLimit = new MinOptMax(context.getStackLimitBP());
referenceIPD = context.getRefIPD();
cellIPD = referenceIPD;
cellIPD -= getIPIndents();
- LinkedList returnedList = null;
+ LinkedList returnedList;
LinkedList contentList = new LinkedList();
LinkedList returnList = new LinkedList();
@@ -163,8 +145,8 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
while ((curLM = (BlockLevelLayoutManager) getChildLM()) != null) {
LayoutContext childLC = new LayoutContext(0);
// curLM is a ?
- childLC.setStackLimit(MinOptMax.subtract(context
- .getStackLimit(), stackLimit));
+ childLC.setStackLimitBP(MinOptMax.subtract(context
+ .getStackLimitBP(), stackLimit));
childLC.setRefIPD(cellIPD);
// get elements from curLM
@@ -260,7 +242,7 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
p.setP(0);
}
- getPSLM().notifyEndOfLayout(((TableCell)getFObj()).getId());
+ getPSLM().notifyEndOfLayout(fobj.getId());
setFinished(true);
return returnList;
@@ -303,7 +285,7 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
* @param h the height of cell
*/
public void setTotalHeight(int h) {
- rowHeight = h;
+ totalHeight = h;
}
/**
@@ -330,6 +312,10 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
* which case collapsed before borders must be drawn in the outer mode
* @param lastOnPage true if the cell will be the very last one on the page, in which
* case collapsed after borders must be drawn in the outer mode
+ * @param painter painter
+ * @param firstRowHeight height of the first row spanned by this cell (may be zero if
+ * this row is placed on a previous page). Used to calculate the placement of the
+ * row's background image if any
*/
public void addAreas(PositionIterator parentIter,
LayoutContext layoutContext,
@@ -339,13 +325,25 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
int borderBeforeWhich,
int borderAfterWhich,
boolean firstOnPage,
- boolean lastOnPage) {
+ boolean lastOnPage,
+ RowPainter painter,
+ int firstRowHeight) {
getParentArea(null);
- getPSLM().addIDToPage(getTableCell().getId());
+ addId();
int borderBeforeWidth = primaryGridUnit.getBeforeBorderWidth(startRow, borderBeforeWhich);
int borderAfterWidth = primaryGridUnit.getAfterBorderWidth(endRow, borderAfterWhich);
+
+ CommonBorderPaddingBackground padding = primaryGridUnit.getCell()
+ .getCommonBorderPaddingBackground();
+ int paddingRectBPD = totalHeight - borderBeforeWidth - borderAfterWidth;
+ int cellBPD = paddingRectBPD;
+ cellBPD -= padding.getPaddingBefore(borderBeforeWhich == ConditionalBorder.REST, this);
+ cellBPD -= padding.getPaddingAfter(borderAfterWhich == ConditionalBorder.REST, this);
+
+ addBackgroundAreas(painter, firstRowHeight, borderBeforeWidth, paddingRectBPD);
+
if (isSeparateBorderModel()) {
if (!emptyCell || getTableCell().showEmptyCells()) {
if (borderBeforeWidth > 0) {
@@ -421,7 +419,7 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
int dx = xoffset;
for (int x = 0; x < gridUnits.length; x++) {
int ipd = getTable().getColumn(primaryGridUnit.getColIndex() + x)
- .getColumnWidth().getValue((PercentBaseContext) getParent());
+ .getColumnWidth().getValue(getParent());
if (blocks[y][x] != null) {
Block block = blocks[y][x];
adjustYOffset(block, dy);
@@ -437,18 +435,12 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
}
}
- CommonBorderPaddingBackground padding = primaryGridUnit.getCell()
- .getCommonBorderPaddingBackground();
TraitSetter.addPadding(curBlockArea,
padding,
borderBeforeWhich == ConditionalBorder.REST,
borderAfterWhich == ConditionalBorder.REST,
false, false, this);
- int cellBPD = rowHeight - borderBeforeWidth - borderAfterWidth;
- cellBPD -= padding.getPaddingBefore(borderBeforeWhich == ConditionalBorder.REST, this);
- cellBPD -= padding.getPaddingAfter(borderAfterWhich == ConditionalBorder.REST, this);
-
//Handle display-align
if (usedBPD < cellBPD) {
if (getTableCell().getDisplayAlign() == EN_CENTER) {
@@ -468,16 +460,9 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
curBlockArea.setBPD(cellBPD);
// Add background after we know the BPD
- if (isSeparateBorderModel()) {
- if (!emptyCell || getTableCell().showEmptyCells()) {
- TraitSetter.addBackground(curBlockArea,
- getTableCell().getCommonBorderPaddingBackground(),
- this);
- }
- } else {
+ if (!isSeparateBorderModel() || !emptyCell || getTableCell().showEmptyCells()) {
TraitSetter.addBackground(curBlockArea,
- getTableCell().getCommonBorderPaddingBackground(),
- this);
+ getTableCell().getCommonBorderPaddingBackground(), this);
}
flush();
@@ -485,6 +470,33 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
curBlockArea = null;
}
+ /** Adds background areas for the column, body and row, if any. */
+ private void addBackgroundAreas(RowPainter painter, int firstRowHeight, int borderBeforeWidth,
+ int paddingRectBPD) {
+ TableColumn column = getTable().getColumn(primaryGridUnit.getColIndex());
+ if (column.getCommonBorderPaddingBackground().hasBackground()) {
+ Block colBackgroundArea = getBackgroundArea(paddingRectBPD, borderBeforeWidth);
+ ((TableLayoutManager) parentLM).registerColumnBackgroundArea(column, colBackgroundArea,
+ -startIndent);
+ }
+
+ TableBody body = primaryGridUnit.getTableBody();
+ if (body.getCommonBorderPaddingBackground().hasBackground()) {
+ painter.registerPartBackgroundArea(
+ getBackgroundArea(paddingRectBPD, borderBeforeWidth));
+ }
+
+ TableRow row = primaryGridUnit.getRow();
+ if (row != null && row.getCommonBorderPaddingBackground().hasBackground()) {
+ Block rowBackgroundArea = getBackgroundArea(paddingRectBPD, borderBeforeWidth);
+ ((TableLayoutManager) parentLM).addBackgroundArea(rowBackgroundArea);
+ TraitSetter.addBackground(rowBackgroundArea, row.getCommonBorderPaddingBackground(),
+ parentLM,
+ -xoffset - startIndent, -borderBeforeWidth,
+ parentLM.getContentAreaIPD(), firstRowHeight);
+ }
+ }
+
private void addBorder(Block[][] blocks, int i, int j, Integer side, BorderInfo border,
boolean outer) {
if (blocks[i][j] == null) {
@@ -513,6 +525,21 @@ public class TableCellLayoutManager extends BlockStackingLayoutManager
block.setBPD(block.getBPD() + amount);
}
+ private Block getBackgroundArea(int bpd, int borderBeforeWidth) {
+ CommonBorderPaddingBackground padding = getTableCell().getCommonBorderPaddingBackground();
+ int paddingStart = padding.getPaddingStart(false, this);
+ int paddingEnd = padding.getPaddingEnd(false, this);
+
+ Block block = new Block();
+ TraitSetter.setProducerID(block, getTable().getId());
+ block.setPositioning(Block.ABSOLUTE);
+ block.setIPD(cellIPD + paddingStart + paddingEnd);
+ block.setBPD(bpd);
+ block.setXOffset(xoffset + startIndent - paddingStart);
+ block.setYOffset(yoffset + borderBeforeWidth);
+ return block;
+ }
+
/**
* Return an Area which can contain the passed childArea. The childArea
* may not yet have any content, but it has essential traits set.
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
index b9a118e28..7cdeb79d5 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableContentLayoutManager.java
@@ -27,8 +27,6 @@ import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.apache.fop.area.Block;
-import org.apache.fop.area.Trait;
import org.apache.fop.datatypes.PercentBaseContext;
import org.apache.fop.fo.Constants;
import org.apache.fop.fo.FObj;
@@ -36,7 +34,6 @@ import org.apache.fop.fo.flow.table.EffRow;
import org.apache.fop.fo.flow.table.PrimaryGridUnit;
import org.apache.fop.fo.flow.table.Table;
import org.apache.fop.fo.flow.table.TableBody;
-import org.apache.fop.fo.flow.table.TableRow;
import org.apache.fop.layoutmgr.BreakElement;
import org.apache.fop.layoutmgr.ElementListUtils;
import org.apache.fop.layoutmgr.KnuthBox;
@@ -46,7 +43,6 @@ import org.apache.fop.layoutmgr.LayoutContext;
import org.apache.fop.layoutmgr.ListElement;
import org.apache.fop.layoutmgr.Position;
import org.apache.fop.layoutmgr.PositionIterator;
-import org.apache.fop.layoutmgr.TraitSetter;
import org.apache.fop.layoutmgr.SpaceResolver.SpaceHandlingBreakPosition;
import org.apache.fop.util.BreakUtil;
@@ -293,7 +289,7 @@ public class TableContentLayoutManager implements PercentBaseContext {
this.usedBPD = 0;
RowPainter painter = new RowPainter(this, layoutContext);
- List positions = new java.util.ArrayList();
+ List tablePositions = new ArrayList();
List headerElements = null;
List footerElements = null;
Position firstPos = null;
@@ -330,7 +326,7 @@ public class TableContentLayoutManager implements PercentBaseContext {
//ignore for now, see special handling below if break is at a penalty
//Only if the last position in this part/page us such a position it will be used
} else if (pos instanceof TableContentPosition) {
- positions.add(pos);
+ tablePositions.add(pos);
} else {
if (log.isDebugEnabled()) {
log.debug("Ignoring position: " + pos);
@@ -359,21 +355,23 @@ public class TableContentLayoutManager implements PercentBaseContext {
if (headerElements != null) {
//header positions for the last part are the second-to-last element and need to
//be handled first before all other TableContentPositions
- PositionIterator nestedIter = new KnuthPossPosIter(headerElements);
- iterateAndPaintPositions(nestedIter, painter, false);
+ addHeaderFooterAreas(headerElements, tableLM.getTable().getTableHeader(), painter,
+ false);
}
- //Iterate over all steps
- Iterator posIter = positions.iterator();
- painter.startBody();
- // Here we are sure that posIter iterates only over TableContentPosition instances
- iterateAndPaintPositions(posIter, painter, footerElements == null);
- painter.endBody();
+ if (tablePositions.isEmpty()) {
+ // TODO make sure this actually never happens
+ log.error("tablePositions empty."
+ + " Please send your FO file to fop-users@xmlgraphics.apache.org");
+ } else {
+ // Here we are sure that posIter iterates only over TableContentPosition instances
+ addBodyAreas(tablePositions.iterator(), painter, footerElements == null);
+ }
if (footerElements != null) {
//Positions for footers are simply added at the end
- PositionIterator nestedIter = new KnuthPossPosIter(footerElements);
- iterateAndPaintPositions(nestedIter, painter, true);
+ addHeaderFooterAreas(footerElements, tableLM.getTable().getTableFooter(), painter,
+ true);
}
this.usedBPD += painter.getAccumulatedBPD();
@@ -384,106 +382,74 @@ public class TableContentLayoutManager implements PercentBaseContext {
}
}
+ private void addHeaderFooterAreas(List elements, TableBody part, RowPainter painter,
+ boolean lastOnPage) {
+ List lst = new ArrayList(elements.size());
+ for (Iterator iter = new KnuthPossPosIter(elements); iter.hasNext();) {
+ Position pos = (Position) iter.next();
+ /*
+ * Unlike for the body the Positions associated to the glues generated by
+ * TableStepper haven't been removed yet.
+ */
+ if (pos instanceof TableContentPosition) {
+ lst.add((TableContentPosition) pos);
+ }
+ }
+ addTablePartAreas(lst, painter, part, true, true, true, lastOnPage);
+ }
+
/**
- * Iterates over a part of the table (header, footer, body) and paints the related
- * elements.
+ * Iterates over the positions corresponding to the table's body (which may contain
+ * several table-body elements!) and adds the corresponding areas.
*
- * @param iterator iterator over Position elements. Those positions correspond to the
- * elements of the table present on the current page
+ * @param iterator iterator over TableContentPosition elements. Those positions
+ * correspond to the elements of the body present on the current page
* @param painter
- * @param lastOnPage true if the corresponding part will be the last on the page
- * (either body or footer, obviously)
+ * @param lastOnPage true if the table has no footer (then the last line of the table
+ * that will be present on the page belongs to the body)
*/
- private void iterateAndPaintPositions(Iterator iterator, RowPainter painter,
+ private void addBodyAreas(Iterator iterator, RowPainter painter,
boolean lastOnPage) {
+ painter.startBody();
List lst = new ArrayList();
- boolean firstPos = false;
- TableBody body = null;
+ TableContentPosition pos = (TableContentPosition) iterator.next();
+ boolean isFirstPos = pos.getFlag(TableContentPosition.FIRST_IN_ROWGROUP)
+ && pos.getRow().getFlag(EffRow.FIRST_IN_PART);
+ TableBody body = pos.getTableBody();
+ lst.add(pos);
while (iterator.hasNext()) {
- Position pos = (Position)iterator.next();
- if (pos instanceof TableContentPosition) {
- TableContentPosition tcpos = (TableContentPosition)pos;
- lst.add(tcpos);
- CellPart part = (CellPart)tcpos.cellParts.get(0);
- if (body == null) {
- body = part.pgu.getBody();
- }
- if (tcpos.getFlag(TableContentPosition.FIRST_IN_ROWGROUP)
- && tcpos.getRow().getFlag(EffRow.FIRST_IN_PART)) {
- firstPos = true;
-
- }
- if (tcpos.getFlag(TableContentPosition.LAST_IN_ROWGROUP)
- && tcpos.getRow().getFlag(EffRow.LAST_IN_PART)) {
- log.trace("LAST_IN_ROWGROUP + LAST_IN_PART");
- handleMarkersAndPositions(lst, body, firstPos, true, painter);
- //reset
- firstPos = false;
- body = null;
- lst.clear();
- }
+ pos = (TableContentPosition) iterator.next();
+ if (pos.getTableBody() != body) {
+ addTablePartAreas(lst, painter, body, isFirstPos, true, false, false);
+ isFirstPos = true;
+ lst.clear();
+ body = pos.getTableBody();
}
+ lst.add(pos);
}
- if (body != null) {
- // Entering this block means that the end of the current table-part hasn't
- // been reached (otherwise it would have been caught by the test above). So
- // lastPos is necessarily false
- handleMarkersAndPositions(lst, body, firstPos, false, painter);
- }
- painter.addAreasAndFlushRow(true, lastOnPage);
- }
-
- private void handleMarkersAndPositions(List positions, TableBody body, boolean firstPos,
- boolean lastPos, RowPainter painter) {
- getTableLM().getCurrentPV().addMarkers(body.getMarkers(),
- true, firstPos, lastPos);
- int size = positions.size();
- for (int i = 0; i < size; i++) {
- painter.handleTableContentPosition((TableContentPosition)positions.get(i));
- }
- getTableLM().getCurrentPV().addMarkers(body.getMarkers(),
- false, firstPos, lastPos);
+ boolean isLastPos = pos.getFlag(TableContentPosition.LAST_IN_ROWGROUP)
+ && pos.getRow().getFlag(EffRow.LAST_IN_PART);
+ addTablePartAreas(lst, painter, body, isFirstPos, isLastPos, true, lastOnPage);
+ painter.endBody();
}
/**
- * Get the area for a row for background.
- * @param row the table-row object or null
- * @return the row area or null if there's no background to paint
+ * Adds the areas corresponding to a single fo:table-header/footer/body element.
*/
- Block getRowArea(TableRow row) {
- if (row == null || !row.getCommonBorderPaddingBackground().hasBackground()) {
- return null;
- } else {
- Block block = new Block();
- block.addTrait(Trait.IS_REFERENCE_AREA, Boolean.TRUE);
- block.setPositioning(Block.ABSOLUTE);
- return block;
+ private void addTablePartAreas(List positions, RowPainter painter, TableBody body,
+ boolean isFirstPos, boolean isLastPos, boolean lastInBody, boolean lastOnPage) {
+ getTableLM().getCurrentPV().addMarkers(body.getMarkers(),
+ true, isFirstPos, isLastPos);
+ painter.startTablePart(body);
+ for (Iterator iter = positions.iterator(); iter.hasNext();) {
+ painter.handleTableContentPosition((TableContentPosition) iter.next());
}
+ getTableLM().getCurrentPV().addMarkers(body.getMarkers(),
+ false, isFirstPos, isLastPos);
+ painter.endTablePart(lastInBody, lastOnPage);
}
/**
- * Adds the area for the row background if any.
- * @param row row for which to generate the background
- * @param bpd block-progression-dimension of the row
- * @param ipd inline-progression-dimension of the row
- * @param yoffset Y offset at which to paint
- */
- void addRowBackgroundArea(TableRow row, int bpd, int ipd, int yoffset) {
- //Add row background if any
- Block rowBackground = getRowArea(row);
- if (rowBackground != null) {
- rowBackground.setBPD(bpd);
- rowBackground.setIPD(ipd);
- rowBackground.setXOffset(this.startXOffset);
- rowBackground.setYOffset(yoffset);
- getTableLM().addChildArea(rowBackground);
- TraitSetter.addBackground(rowBackground,
- row.getCommonBorderPaddingBackground(), getTableLM());
- }
- }
-
-
- /**
* Sets the overall starting x-offset. Used for proper placement of cells.
* @param startXOffset starting x-offset (table's start-indent)
*/
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableContentPosition.java b/src/java/org/apache/fop/layoutmgr/table/TableContentPosition.java
index e702c58a9..260b8cfdf 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableContentPosition.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableContentPosition.java
@@ -22,6 +22,7 @@ package org.apache.fop.layoutmgr.table;
import java.util.List;
import org.apache.fop.fo.flow.table.EffRow;
+import org.apache.fop.fo.flow.table.TableBody;
import org.apache.fop.layoutmgr.LayoutManager;
import org.apache.fop.layoutmgr.Position;
@@ -79,6 +80,10 @@ class TableContentPosition extends Position {
return row;
}
+ TableBody getTableBody() {
+ return ((CellPart) cellParts.get(0)).pgu.getTableBody();
+ }
+
/**
* Returns a flag for this GridUnit.
* @param which the requested flag
@@ -101,10 +106,12 @@ class TableContentPosition extends Position {
}
}
+ /** {@inheritDoc} */
public boolean generatesAreas() {
return true;
}
+ /** {@inheritDoc} */
public String toString() {
StringBuffer sb = new StringBuffer("TableContentPosition:");
sb.append(getIndex());
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableHFPenaltyPosition.java b/src/java/org/apache/fop/layoutmgr/table/TableHFPenaltyPosition.java
index afa166985..3e504a45c 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableHFPenaltyPosition.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableHFPenaltyPosition.java
@@ -43,6 +43,11 @@ class TableHFPenaltyPosition extends Position {
super(lm);
}
+ /** {@inheritDoc} */
+ public boolean generatesAreas() {
+ return true;
+ }
+
public String toString() {
StringBuffer sb = new StringBuffer("TableHFPenaltyPosition:");
sb.append(getIndex()).append("(");
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableHeaderFooterPosition.java b/src/java/org/apache/fop/layoutmgr/table/TableHeaderFooterPosition.java
index c3ae72c74..8d3b993b2 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableHeaderFooterPosition.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableHeaderFooterPosition.java
@@ -48,6 +48,11 @@ class TableHeaderFooterPosition extends Position {
this.nestedElements = nestedElements;
}
+ /** {@inheritDoc} */
+ public boolean generatesAreas() {
+ return true;
+ }
+
public String toString() {
StringBuffer sb = new StringBuffer("Table");
sb.append(header ? "Header" : "Footer");
diff --git a/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java b/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
index 1cbc3e50a..d6bba5cb5 100644
--- a/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
+++ b/src/java/org/apache/fop/layoutmgr/table/TableLayoutManager.java
@@ -19,8 +19,10 @@
package org.apache.fop.layoutmgr.table;
+import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;
+import java.util.List;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -79,7 +81,27 @@ public class TableLayoutManager extends BlockStackingLayoutManager
private int halfBorderSeparationBPD;
private int halfBorderSeparationIPD;
-
+
+ /** See {@link TableLayoutManager#registerColumnBackgroundArea(TableColumn, Block, int)}. */
+ private List columnBackgroundAreas;
+
+ /**
+ * Temporary holder of column background informations for a table-cell's area.
+ *
+ * @see TableLayoutManager#registerColumnBackgroundArea(TableColumn, Block, int)
+ */
+ private static final class ColumnBackgroundInfo {
+ private TableColumn column;
+ private Block backgroundArea;
+ private int xShift;
+
+ private ColumnBackgroundInfo(TableColumn column, Block backgroundArea, int xShift) {
+ this.column = column;
+ this.backgroundArea = backgroundArea;
+ this.xShift = xShift;
+ }
+ }
+
/**
* Create a new table layout manager.
* @param node the table FO
@@ -211,7 +233,7 @@ public class TableLayoutManager extends BlockStackingLayoutManager
// Elements for the table-header/footer/body
- LinkedList contentKnuthElements = null;
+ LinkedList contentKnuthElements;
contentLM = new TableContentLayoutManager(this);
LayoutContext childLC = new LayoutContext(0);
/*
@@ -263,7 +285,30 @@ public class TableLayoutManager extends BlockStackingLayoutManager
resetSpaces();
return returnList;
}
-
+
+ /**
+ * Registers the given area, that will be used to render the part of column background
+ * covered by a table-cell. If percentages are used to place the background image, the
+ * final bpd of the (fraction of) table that will be rendered on the current page must
+ * be known. The traits can't then be set when the areas for the cell are created
+ * since at that moment this bpd is yet unknown. So they will instead be set in
+ * TableLM's {@link #addAreas(PositionIterator, LayoutContext)} method.
+ *
+ * @param column the table-column element from which the cell gets background
+ * informations
+ * @param backgroundArea the block of the cell's dimensions that will hold the column
+ * background
+ * @param xShift additional amount by which the image must be shifted to be correctly
+ * placed (to counterbalance the cell's start border)
+ */
+ void registerColumnBackgroundArea(TableColumn column, Block backgroundArea, int xShift) {
+ addBackgroundArea(backgroundArea);
+ if (columnBackgroundAreas == null) {
+ columnBackgroundAreas = new ArrayList();
+ }
+ columnBackgroundAreas.add(new ColumnBackgroundInfo(column, backgroundArea, xShift));
+ }
+
/**
* The table area is a reference area that contains areas for
* columns, bodies, rows and the contents are in cells.
@@ -274,7 +319,7 @@ public class TableLayoutManager extends BlockStackingLayoutManager
public void addAreas(PositionIterator parentIter,
LayoutContext layoutContext) {
getParentArea(null);
- getPSLM().addIDToPage(getTable().getId());
+ addId();
// add space before, in order to implement display-align = "center" or "after"
if (layoutContext.getSpaceBefore() != 0) {
@@ -298,6 +343,17 @@ public class TableLayoutManager extends BlockStackingLayoutManager
curBlockArea.setBPD(tableHeight);
+ if (columnBackgroundAreas != null) {
+ for (Iterator iter = columnBackgroundAreas.iterator(); iter.hasNext();) {
+ ColumnBackgroundInfo b = (ColumnBackgroundInfo) iter.next();
+ TraitSetter.addBackground(b.backgroundArea,
+ b.column.getCommonBorderPaddingBackground(), this,
+ b.xShift, -b.backgroundArea.getYOffset(),
+ b.column.getColumnWidth().getValue(this), tableHeight);
+ }
+ columnBackgroundAreas.clear();
+ }
+
if (getTable().isSeparateBorderModel()) {
TraitSetter.addBorders(curBlockArea,
getTable().getCommonBorderPaddingBackground(),
@@ -323,7 +379,7 @@ public class TableLayoutManager extends BlockStackingLayoutManager
resetSpaces();
curBlockArea = null;
- getPSLM().notifyEndOfLayout(((Table)getFObj()).getId());
+ getPSLM().notifyEndOfLayout(fobj.getId());
}
/**
@@ -366,6 +422,15 @@ public class TableLayoutManager extends BlockStackingLayoutManager
}
}
+ /**
+ * Adds the given area to this layout manager's area, without updating the used bpd.
+ *
+ * @param background an area
+ */
+ void addBackgroundArea(Block background) {
+ curBlockArea.addChildArea(background);
+ }
+
/** {@inheritDoc} */
public int negotiateBPDAdjustment(int adj, KnuthElement lastElement) {
// TODO Auto-generated method stub
diff --git a/src/java/org/apache/fop/pdf/PDFCMap.java b/src/java/org/apache/fop/pdf/PDFCMap.java
index bdf8108c2..1be5e9dc4 100644
--- a/src/java/org/apache/fop/pdf/PDFCMap.java
+++ b/src/java/org/apache/fop/pdf/PDFCMap.java
@@ -21,7 +21,6 @@ package org.apache.fop.pdf;
import java.io.IOException;
import java.io.OutputStream;
-import java.io.StringWriter;
import java.io.Writer;
/**
@@ -425,10 +424,8 @@ public class PDFCMap extends PDFStream {
/** {@inheritDoc} */
protected int output(OutputStream stream) throws IOException {
- StringWriter writer = new StringWriter();
- CMapBuilder builder = createCMapBuilder(writer);
+ CMapBuilder builder = createCMapBuilder(getBufferWriter());
builder.writeCMap();
- add(writer.getBuffer().toString()); //TODO Could be optimized by not buffering
return super.output(stream);
}
}
diff --git a/src/java/org/apache/fop/pdf/PDFEncoding.java b/src/java/org/apache/fop/pdf/PDFEncoding.java
index b2fba6e53..6dc448b40 100644
--- a/src/java/org/apache/fop/pdf/PDFEncoding.java
+++ b/src/java/org/apache/fop/pdf/PDFEncoding.java
@@ -132,6 +132,14 @@ public class PDFEncoding extends PDFDictionary {
}
/**
+ * Indicates whether any differences have been recorded.
+ * @return true if there are differences.
+ */
+ public boolean hasDifferences() {
+ return (this.differences.length() > 0);
+ }
+
+ /**
* Creates and returns the PDFArray representing the Differences entry.
* @return the Differences entry
*/
diff --git a/src/java/org/apache/fop/pdf/PDFFactory.java b/src/java/org/apache/fop/pdf/PDFFactory.java
index 687b32016..f4474331f 100644
--- a/src/java/org/apache/fop/pdf/PDFFactory.java
+++ b/src/java/org/apache/fop/pdf/PDFFactory.java
@@ -43,6 +43,7 @@ import org.apache.commons.logging.LogFactory;
import org.apache.xmlgraphics.xmp.Metadata;
import org.apache.fop.fonts.CIDFont;
+import org.apache.fop.fonts.CIDSubset;
import org.apache.fop.fonts.CodePointMapping;
import org.apache.fop.fonts.CustomFont;
import org.apache.fop.fonts.FontDescriptor;
@@ -50,6 +51,8 @@ import org.apache.fop.fonts.FontMetrics;
import org.apache.fop.fonts.FontType;
import org.apache.fop.fonts.LazyFont;
import org.apache.fop.fonts.MultiByteFont;
+import org.apache.fop.fonts.SimpleSingleByteEncoding;
+import org.apache.fop.fonts.SingleByteEncoding;
import org.apache.fop.fonts.SingleByteFont;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.fonts.truetype.FontFileReader;
@@ -1166,7 +1169,7 @@ public class PDFFactory {
}
/**
- * make a Type1 /Font object
+ * Make a Type1 /Font object.
*
* @param fontname internal name to use for this font (eg "F1")
* @param basefont name of the base font (eg "Helvetica")
@@ -1217,10 +1220,12 @@ public class PDFFactory {
(PDFCIDFontDescriptor)pdfdesc);
getDocument().registerObject(cidFont);
- PDFCMap cmap = new PDFToUnicodeCMap(cidMetrics.getCharsUsed(), "fop-ucs-H",
- new PDFCIDSystemInfo("Adobe",
- "Identity",
- 0));
+ PDFCMap cmap = new PDFToUnicodeCMap(
+ cidMetrics.getCIDSubset().getSubsetChars(),
+ "fop-ucs-H",
+ new PDFCIDSystemInfo("Adobe",
+ "Identity",
+ 0));
getDocument().registerObject(cmap);
((PDFFontType0)font).setCMAP(cmap);
((PDFFontType0)font).setDescendantFonts(cidFont);
@@ -1238,35 +1243,20 @@ public class PDFFactory {
int lastChar = singleByteFont.getLastChar();
nonBase14.setWidthMetrics(firstChar,
lastChar,
- makeArray(metrics.getWidths()));
+ new PDFArray(null, metrics.getWidths()));
//Handle encoding
- CodePointMapping mapping = singleByteFont.getCodePointMapping();
+ SingleByteEncoding mapping = singleByteFont.getEncoding();
if (PDFEncoding.isPredefinedEncoding(mapping.getName())) {
font.setEncoding(mapping.getName());
} else {
- CodePointMapping winansi = CodePointMapping.getMapping(
- CodePointMapping.WIN_ANSI_ENCODING);
- PDFEncoding pdfEncoding = new PDFEncoding(winansi.getName());
- PDFEncoding.DifferencesBuilder builder
- = pdfEncoding.createDifferencesBuilder();
- int start = -1;
- String[] winansiNames = winansi.getCharNameMap();
- String[] charNameMap = mapping.getCharNameMap();
- for (int i = 0; i < 256; i++) {
- String wac = winansiNames[i];
- String c = charNameMap[i];
- if (!wac.equals(c)) {
- if (start != i) {
- builder.addDifference(i);
- start = i;
- }
- builder.addName(c);
- start++;
- }
+ Object pdfEncoding = createPDFEncoding(mapping,
+ singleByteFont.getFontName());
+ if (pdfEncoding instanceof PDFEncoding) {
+ font.setEncoding((PDFEncoding)pdfEncoding);
+ } else {
+ font.setEncoding((String)pdfEncoding);
}
- pdfEncoding.setDifferences(builder.toPDFArray());
- font.setEncoding(pdfEncoding);
/* JM: What I thought would be a necessity with custom encodings turned out to
* be a bug in Adobe Acrobat 8. The following section just demonstrates how
@@ -1278,21 +1268,88 @@ public class PDFFactory {
nonBase14.setToUnicode(cmap);
*/
}
+
+ //Handle additional encodings (characters outside the primary encoding)
+ if (singleByteFont.hasAdditionalEncodings()) {
+ for (int i = 0, c = singleByteFont.getAdditionalEncodingCount(); i < c; i++) {
+ SimpleSingleByteEncoding addEncoding
+ = singleByteFont.getAdditionalEncoding(i);
+ String name = fontname + "_" + (i + 1);
+ Object pdfenc = createPDFEncoding(addEncoding,
+ singleByteFont.getFontName());
+ PDFFontNonBase14 addFont = (PDFFontNonBase14)PDFFont.createFont(
+ name, fonttype,
+ basefont, pdfenc);
+ addFont.setDescriptor(pdfdesc);
+ addFont.setWidthMetrics(
+ addEncoding.getFirstChar(),
+ addEncoding.getLastChar(),
+ new PDFArray(null, singleByteFont.getAdditionalWidths(i)));
+ getDocument().registerObject(addFont);
+ getDocument().getResources().addFont(addFont);
+ }
+ }
}
return font;
}
}
+ /**
+ * Creates a PDFEncoding instance from a CodePointMapping instance.
+ * @param encoding the code point mapping (encoding)
+ * @return the PDF Encoding dictionary (or a String with the predefined encoding)
+ */
+ public Object createPDFEncoding(SingleByteEncoding encoding, String fontNameHint) {
+ SingleByteEncoding baseEncoding;
+ if (fontNameHint.indexOf("Symbol") >= 0) {
+ baseEncoding = CodePointMapping.getMapping(
+ CodePointMapping.SYMBOL_ENCODING);
+ } else {
+ baseEncoding = CodePointMapping.getMapping(
+ CodePointMapping.STANDARD_ENCODING);
+ }
+ PDFEncoding pdfEncoding = new PDFEncoding(baseEncoding.getName());
+ PDFEncoding.DifferencesBuilder builder
+ = pdfEncoding.createDifferencesBuilder();
+ int start = -1;
+ String[] baseNames = baseEncoding.getCharNameMap();
+ String[] charNameMap = encoding.getCharNameMap();
+ for (int i = 0, ci = charNameMap.length; i < ci; i++) {
+ String basec = baseNames[i];
+ String c = charNameMap[i];
+ if (!basec.equals(c)) {
+ if (start != i) {
+ builder.addDifference(i);
+ start = i;
+ }
+ builder.addName(c);
+ start++;
+ }
+ }
+ if (builder.hasDifferences()) {
+ pdfEncoding.setDifferences(builder.toPDFArray());
+ return pdfEncoding;
+ } else {
+ return baseEncoding.getName();
+ }
+ }
+
+ /**
+ * Creates and returns a width array with the widths of all the characters in the subset.
+ * @param cidFont the font
+ * @return the width array
+ */
public PDFWArray getSubsetWidths(CIDFont cidFont) {
// Create widths for reencoded chars
PDFWArray warray = new PDFWArray();
- int[] tmpWidth = new int[cidFont.usedGlyphsCount];
+ int[] widths = cidFont.getWidths();
+ CIDSubset subset = cidFont.getCIDSubset();
+ int[] tmpWidth = new int[subset.getSubsetSize()];
- for (int i = 0; i < cidFont.usedGlyphsCount; i++) {
- Integer nw = (Integer)cidFont.usedGlyphsIndex.get(new Integer(i));
- int nwx = (nw == null) ? 0 : nw.intValue();
- tmpWidth[i] = cidFont.width[nwx];
+ for (int i = 0, c = subset.getSubsetSize(); i < c; i++) {
+ int nwx = Math.max(0, subset.getGlyphIndexForSubsetIndex(i));
+ tmpWidth[i] = widths[nwx];
}
warray.addEntry(0, tmpWidth);
return warray;
@@ -1345,12 +1402,7 @@ public class PDFFactory {
}
private void buildCIDSet(PDFFontDescriptor descriptor, CIDFont cidFont) {
- BitSet cidSubset = new BitSet();
- Iterator iter = cidFont.usedGlyphs.keySet().iterator();
- while (iter.hasNext()) {
- Integer cid = (Integer)iter.next();
- cidSubset.set(cid.intValue());
- }
+ BitSet cidSubset = cidFont.getCIDSubset().getGlyphIndexBitSet();
PDFStream cidSet = makeStream(null, true);
ByteArrayOutputStream baout = new ByteArrayOutputStream(cidSubset.length() / 8 + 1);
int value = 0;
@@ -1548,14 +1600,13 @@ public class PDFFactory {
}
/**
- * make an Array object (ex. Widths array for a font)
+ * Make an Array object (ex. Widths array for a font).
*
* @param values the int array values
* @return the PDF Array with the int values
*/
public PDFArray makeArray(int[] values) {
PDFArray array = new PDFArray(null, values);
-
getDocument().registerObject(array);
return array;
}
diff --git a/src/java/org/apache/fop/pdf/PDFResources.java b/src/java/org/apache/fop/pdf/PDFResources.java
index 66ccdc78b..b0c0128e1 100644
--- a/src/java/org/apache/fop/pdf/PDFResources.java
+++ b/src/java/org/apache/fop/pdf/PDFResources.java
@@ -110,7 +110,7 @@ public class PDFResources extends PDFObject {
desc = (FontDescriptor)font;
}
addFont(doc.getFactory().makeFont(
- f, font.getEmbedFontName(), font.getEncoding(), font, desc));
+ f, font.getEmbedFontName(), font.getEncodingName(), font, desc));
}
}
}
diff --git a/src/java/org/apache/fop/pdf/PDFStream.java b/src/java/org/apache/fop/pdf/PDFStream.java
index 59a8336c5..a213340e3 100644
--- a/src/java/org/apache/fop/pdf/PDFStream.java
+++ b/src/java/org/apache/fop/pdf/PDFStream.java
@@ -19,8 +19,9 @@
package org.apache.fop.pdf;
-import java.io.OutputStream;
import java.io.IOException;
+import java.io.OutputStream;
+import java.io.Writer;
/**
* Class representing a PDF stream.
@@ -37,6 +38,8 @@ public class PDFStream extends AbstractPDFStream {
*/
protected StreamCache data;
+ private transient Writer streamWriter;
+
/**
* Create an empty stream object
*/
@@ -44,6 +47,10 @@ public class PDFStream extends AbstractPDFStream {
super();
try {
data = StreamCacheFactory.getInstance().createStreamCache();
+ this.streamWriter = new java.io.OutputStreamWriter(
+ getBufferOutputStream(), PDFDocument.ENCODING);
+ //Buffer to minimize calls to the converter
+ this.streamWriter = new java.io.BufferedWriter(this.streamWriter);
} catch (IOException ex) {
//TODO throw the exception and catch it elsewhere
ex.printStackTrace();
@@ -57,21 +64,35 @@ public class PDFStream extends AbstractPDFStream {
*/
public void add(String s) {
try {
- data.getOutputStream().write(PDFDocument.encode(s));
+ this.streamWriter.write(s);
} catch (IOException ex) {
//TODO throw the exception and catch it elsewhere
ex.printStackTrace();
}
-
+ }
+
+ private void flush() throws IOException {
+ this.streamWriter.flush();
}
/**
+ * Returns a Writer that writes to the OutputStream of the buffer.
+ * @return the Writer
+ */
+ public Writer getBufferWriter() {
+ return this.streamWriter;
+ }
+
+ /**
* Returns an OutputStream that can be used to write to the buffer which is used
* to build up the PDF stream.
* @return the OutputStream
* @throws IOException In case of an I/O problem
*/
public OutputStream getBufferOutputStream() throws IOException {
+ if (this.streamWriter != null) {
+ flush(); //Just to be sure
+ }
return this.data.getOutputStream();
}
@@ -91,6 +112,7 @@ public class PDFStream extends AbstractPDFStream {
*/
public int getDataLength() {
try {
+ flush();
return data.getSize();
} catch (Exception e) {
//TODO throw the exception and catch it elsewhere
@@ -99,17 +121,15 @@ public class PDFStream extends AbstractPDFStream {
}
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
protected int getSizeHint() throws IOException {
+ flush();
return data.getSize();
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
protected void outputRawStreamData(OutputStream out) throws IOException {
+ flush();
data.outputContents(out);
}
diff --git a/src/java/org/apache/fop/pdf/PDFTTFStream.java b/src/java/org/apache/fop/pdf/PDFTTFStream.java
index b3488f6a1..5570c62f3 100644
--- a/src/java/org/apache/fop/pdf/PDFTTFStream.java
+++ b/src/java/org/apache/fop/pdf/PDFTTFStream.java
@@ -67,7 +67,7 @@ public class PDFTTFStream extends PDFStream {
*/
public void setData(byte[] data, int size) throws IOException {
this.data.clear();
- this.data.getOutputStream().write(data, 0, size);
+ getBufferOutputStream().write(data, 0, size);
}
}
diff --git a/src/java/org/apache/fop/pdf/PDFTextUtil.java b/src/java/org/apache/fop/pdf/PDFTextUtil.java
new file mode 100644
index 000000000..224bb6a1d
--- /dev/null
+++ b/src/java/org/apache/fop/pdf/PDFTextUtil.java
@@ -0,0 +1,295 @@
+/*
+ * 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.
+ */
+
+/* $Id$ */
+
+package org.apache.fop.pdf;
+
+import java.awt.geom.AffineTransform;
+
+/**
+ * Utility class for generating PDF text objects. It needs to be subclassed to add writing
+ * functionality (see {@link #write(String)}).
+ */
+public abstract class PDFTextUtil {
+
+ /** The number of decimal places. */
+ private static final int DEC = 8;
+
+ /** PDF text rendering mode: Fill text */
+ public static final int TR_FILL = 0;
+ /** PDF text rendering mode: Stroke text */
+ public static final int TR_STROKE = 1;
+ /** PDF text rendering mode: Fill, then stroke text */
+ public static final int TR_FILL_STROKE = 2;
+ /** PDF text rendering mode: Neither fill nor stroke text (invisible) */
+ public static final int TR_INVISIBLE = 3;
+ /** PDF text rendering mode: Fill text and add to path for clipping */
+ public static final int TR_FILL_CLIP = 4;
+ /** PDF text rendering mode: Stroke text and add to path for clipping */
+ public static final int TR_STROKE_CLIP = 5;
+ /** PDF text rendering mode: Fill, then stroke text and add to path for clipping */
+ public static final int TR_FILL_STROKE_CLIP = 6;
+ /** PDF text rendering mode: Add text to path for clipping */
+ public static final int TR_CLIP = 7;
+
+ private boolean inTextObject = false;
+ private String startText;
+ private String endText;
+ private boolean useMultiByte;
+ private StringBuffer bufTJ;
+ private int textRenderingMode = TR_FILL;
+
+ private String currentFontName;
+ private double currentFontSize;
+
+ /**
+ * Main constructor.
+ */
+ public PDFTextUtil() {
+ //nop
+ }
+
+ /**
+ * Writes PDF code.
+ * @param code the PDF code to write
+ */
+ protected abstract void write(String code);
+
+ private void writeAffineTransform(AffineTransform at, StringBuffer sb) {
+ double[] lt = new double[6];
+ at.getMatrix(lt);
+ sb.append(PDFNumber.doubleOut(lt[0], DEC)).append(" ");
+ sb.append(PDFNumber.doubleOut(lt[1], DEC)).append(" ");
+ sb.append(PDFNumber.doubleOut(lt[2], DEC)).append(" ");
+ sb.append(PDFNumber.doubleOut(lt[3], DEC)).append(" ");
+ sb.append(PDFNumber.doubleOut(lt[4], DEC)).append(" ");
+ sb.append(PDFNumber.doubleOut(lt[5], DEC));
+ }
+
+ private void writeChar(char ch, StringBuffer sb) {
+ if (!useMultiByte) {
+ if (ch < 32 || ch > 127) {
+ sb.append("\\").append(Integer.toOctalString((int)ch));
+ } else {
+ switch (ch) {
+ case '(':
+ case ')':
+ case '\\':
+ sb.append("\\");
+ break;
+ default:
+ }
+ sb.append(ch);
+ }
+ } else {
+ sb.append(PDFText.toUnicodeHex(ch));
+ }
+ }
+
+ private void checkInTextObject() {
+ if (!inTextObject) {
+ throw new IllegalStateException("Not in text object");
+ }
+ }
+
+ /**
+ * Indicates whether we are in a text object or not.
+ * @return true if we are in a text object
+ */
+ public boolean isInTextObject() {
+ return inTextObject;
+ }
+
+ /**
+ * Called when a new text object should be started. Be sure to call setFont() before
+ * issuing any text painting commands.
+ */
+ public void beginTextObject() {
+ if (inTextObject) {
+ throw new IllegalStateException("Already in text object");
+ }
+ write("BT\n");
+ this.inTextObject = true;
+ }
+
+ /**
+ * Called when a text object should be ended.
+ */
+ public void endTextObject() {
+ checkInTextObject();
+ write("ET\n");
+ this.inTextObject = false;
+ initValues();
+ }
+
+ /**
+ * Resets the state fields.
+ */
+ protected void initValues() {
+ this.currentFontName = null;
+ this.currentFontSize = 0.0;
+ this.textRenderingMode = TR_FILL;
+ }
+
+ /**
+ * Creates a "q" command, pushing a copy of the entire graphics state onto the stack.
+ */
+ public void saveGraphicsState() {
+ write("q\n");
+ }
+
+ /**
+ * Creates a "Q" command, restoring the entire graphics state to its former value by popping
+ * it from the stack.
+ */
+ public void restoreGraphicsState() {
+ write("Q\n");
+ }
+
+ /**
+ * Creates a "cm" command.
+ * @param at the transformation matrix
+ */
+ public void concatMatrix(AffineTransform at) {
+ if (!at.isIdentity()) {
+ writeTJ();
+ StringBuffer sb = new StringBuffer();
+ writeAffineTransform(at, sb);
+ sb.append(" cm\n");
+ write(sb.toString());
+ }
+ }
+
+ /**
+ * Writes a "Tf" command, setting a new current font.
+ * @param fontName the name of the font to select
+ * @param fontSize the font size (in points)
+ */
+ public void writeTf(String fontName, double fontSize) {
+ checkInTextObject();
+ write("/" + fontName + " " + PDFNumber.doubleOut(fontSize) + " Tf\n");
+
+ this.startText = useMultiByte ? "<" : "(";
+ this.endText = useMultiByte ? ">" : ")";
+ }
+
+ /**
+ * Updates the current font. This method only writes a "Tf" if the current font changes.
+ * @param fontName the name of the font to select
+ * @param fontSize the font size (in points)
+ * @param multiByte true indicates the font is a multi-byte font, false means single-byte
+ */
+ public void updateTf(String fontName, double fontSize, boolean multiByte) {
+ checkInTextObject();
+ if (!fontName.equals(this.currentFontName) || (fontSize != this.currentFontSize)) {
+ writeTJ();
+ this.currentFontName = fontName;
+ this.currentFontSize = fontSize;
+ this.useMultiByte = multiByte;
+ writeTf(fontName, fontSize);
+ }
+ }
+
+ /**
+ * Sets the text rendering mode.
+ * @param mode the rendering mode (value 0 to 7, see PDF Spec, constants: TR_*)
+ */
+ public void setTextRenderingMode(int mode) {
+ if (mode < 0 || mode > 7) {
+ throw new IllegalArgumentException(
+ "Illegal value for text rendering mode. Expected: 0-7");
+ }
+ if (mode != this.textRenderingMode) {
+ writeTJ();
+ this.textRenderingMode = mode;
+ write(this.textRenderingMode + " Tr\n");
+ }
+ }
+
+ /**
+ * Sets the text rendering mode.
+ * @param fill true if the text should be filled
+ * @param stroke true if the text should be stroked
+ * @param addToClip true if the path should be added for clipping
+ */
+ public void setTextRenderingMode(boolean fill, boolean stroke, boolean addToClip) {
+ int mode;
+ if (fill) {
+ mode = (stroke ? 2 : 0);
+ } else {
+ mode = (stroke ? 1 : 3);
+ }
+ if (addToClip) {
+ mode += 4;
+ }
+ setTextRenderingMode(mode);
+ }
+
+ /**
+ * Writes a "Tm" command, setting a new text transformation matrix.
+ * @param localTransform the new text transformation matrix
+ */
+ public void writeTextMatrix(AffineTransform localTransform) {
+ StringBuffer sb = new StringBuffer();
+ writeAffineTransform(localTransform, sb);
+ sb.append(" Tm ");
+ write(sb.toString());
+ }
+
+ /**
+ * Writes a char to the "TJ-Buffer".
+ * @param codepoint the mapped character (code point/character code)
+ */
+ public void writeTJMappedChar(char codepoint) {
+ if (bufTJ == null) {
+ bufTJ = new StringBuffer();
+ }
+ if (bufTJ.length() == 0) {
+ bufTJ.append("[").append(startText);
+ }
+ writeChar(codepoint, bufTJ);
+ }
+
+ /**
+ * Writes a glyph adjust value to the "TJ-Buffer".
+ * @param adjust the glyph adjust value in thousands of text unit space.
+ */
+ public void adjustGlyphTJ(double adjust) {
+ bufTJ.append(endText).append(" ");
+ bufTJ.append(PDFNumber.doubleOut(adjust, DEC - 4));
+ bufTJ.append(" ");
+ bufTJ.append(startText);
+ }
+
+ /**
+ * Writes a "TJ" command, writing out the accumulated buffer with the characters and glyph
+ * positioning values. The buffer is reset afterwards.
+ */
+ public void writeTJ() {
+ if (isInString()) {
+ bufTJ.append(endText).append("] TJ\n");
+ write(bufTJ.toString());
+ bufTJ.setLength(0);
+ }
+ }
+
+ private boolean isInString() {
+ return bufTJ != null && bufTJ.length() > 0;
+ }
+
+}
diff --git a/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java b/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
index f74699fd5..c0c9ce88c 100644
--- a/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
+++ b/src/java/org/apache/fop/render/AbstractGenericSVGHandler.java
@@ -47,7 +47,7 @@ import org.apache.fop.svg.SVGUserAgent;
public abstract class AbstractGenericSVGHandler implements XMLHandler, RendererContextConstants {
/** logging instance */
- private static Log log = LogFactory.getLog(AbstractGenericSVGHandler.class);
+ protected static Log log = LogFactory.getLog(AbstractGenericSVGHandler.class);
/** {@inheritDoc} */
public void handleXML(RendererContext context,
diff --git a/src/java/org/apache/fop/render/afp/AFPRenderer.java b/src/java/org/apache/fop/render/afp/AFPRenderer.java
index b10f4b30f..cb3d3a433 100644
--- a/src/java/org/apache/fop/render/afp/AFPRenderer.java
+++ b/src/java/org/apache/fop/render/afp/AFPRenderer.java
@@ -940,10 +940,7 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
int x = origin.x + posInt.x;
int y = origin.y + posInt.y;
- String name = null;
- if (pageSegmentsMap != null) {
- name = (String) pageSegmentsMap.get(uri);
- }
+ String name = (String)getPageSegments().get(uri);
if (name != null) {
afpDataStream.createIncludePageSegment(name, mpts2units(x), mpts2units(y));
} else {
@@ -1543,6 +1540,13 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
return MimeConstants.MIME_AFP;
}
+ private Map getPageSegments() {
+ if (pageSegmentsMap == null) {
+ pageSegmentsMap = new java.util.HashMap();
+ }
+ return pageSegmentsMap;
+ }
+
/**
* Method to render the page extension.
* <p>
@@ -1571,17 +1575,11 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
.equals(element)) {
String name = aps.getName();
String source = aps.getValue();
- if (pageSegmentsMap == null) {
- pageSegmentsMap = new java.util.HashMap();
- }
- pageSegmentsMap.put(source, name);
+ getPageSegments().put(source, name);
} else if (AFPElementMapping.TAG_LOGICAL_ELEMENT
.equals(element)) {
String name = aps.getName();
String value = aps.getValue();
- if (pageSegmentsMap == null) {
- pageSegmentsMap = new java.util.HashMap();
- }
afpDataStream.createTagLogicalElement(name, value);
} else if (AFPElementMapping.NO_OPERATION.equals(element)) {
String content = aps.getContent();
@@ -1589,7 +1587,7 @@ public class AFPRenderer extends AbstractPathOrientedRenderer {
afpDataStream.createNoOperation(content);
}
} else if (AFPElementMapping.RESOURCE.equals(element)) {
- System.out.println("resource: " + attachment);
+ log.info("resource: " + attachment);
}
}
}
diff --git a/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java b/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
index 4c8a3dc9f..cde464ba5 100644
--- a/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
+++ b/src/java/org/apache/fop/render/afp/AFPRendererConfigurator.java
@@ -234,8 +234,7 @@ public class AFPRendererConfigurator extends PrintRendererConfigurator {
Configuration rendererResolutionCfg = cfg.getChild("renderer-resolution", false);
if (rendererResolutionCfg != null) {
- afpRenderer.setResolution(rendererResolutionCfg.getValueAsInteger(
- AFPRenderer.DPI_240_RESOLUTION));
+ afpRenderer.setResolution(rendererResolutionCfg.getValueAsInteger(240));
}
Configuration gocaSupportCfg = cfg.getChild("goca-enabled", false);
diff --git a/src/java/org/apache/fop/render/afp/AFPSVGHandler.java b/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
index 2641e6fbe..1d469ea94 100644
--- a/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
+++ b/src/java/org/apache/fop/render/afp/AFPSVGHandler.java
@@ -49,9 +49,6 @@ import org.w3c.dom.Document;
*/
public class AFPSVGHandler extends AbstractGenericSVGHandler {
- /** logging instance */
- private static Log log = LogFactory.getLog(AFPSVGHandler.class);
-
/** {@inheritDoc} */
public void handleXML(RendererContext context,
Document doc, String ns) throws Exception {
@@ -196,7 +193,10 @@ public class AFPSVGHandler extends AbstractGenericSVGHandler {
}
/** {@inheritDoc} */
- public String getNamespace() {
- return SVGDOMImplementation.SVG_NAMESPACE_URI;
+ protected void updateRendererContext(RendererContext context) {
+ //Work around a problem in Batik: Gradients cannot be done in ColorSpace.CS_GRAY
+ context.setProperty(AFPRendererContextConstants.AFP_GRAYSCALE,
+ Boolean.FALSE);
}
+
}
diff --git a/src/java/org/apache/fop/render/afp/extensions/AFPElement.java b/src/java/org/apache/fop/render/afp/extensions/AFPElement.java
index 808cd88f1..659c79a8e 100755
--- a/src/java/org/apache/fop/render/afp/extensions/AFPElement.java
+++ b/src/java/org/apache/fop/render/afp/extensions/AFPElement.java
@@ -55,7 +55,8 @@ public class AFPElement extends AbstractAFPExtensionObject {
}
}
- protected ExtensionAttachment instantiateExtensionAttachment() {
- return null;
- }
+ protected ExtensionAttachment instantiateExtensionAttachment() {
+ return new AFPPageSetup(getName());
+ }
+
}
diff --git a/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java b/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java
index 8d4b0ae5e..ad80399e3 100755
--- a/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java
+++ b/src/java/org/apache/fop/render/afp/extensions/AFPElementMapping.java
@@ -19,8 +19,6 @@
package org.apache.fop.render.afp.extensions;
-import java.util.HashMap;
-
import org.apache.fop.fo.ElementMapping;
import org.apache.fop.fo.FONode;
@@ -39,7 +37,7 @@ public class AFPElementMapping extends ElementMapping {
public static final String PAGE = "page";
/** page group element */
- public static final String PAGE_GROUP = "page-group";
+// public static final String PAGE_GROUP = "page-group";
/** tag logical element */
public static final String TAG_LOGICAL_ELEMENT = "tag-logical-element";
@@ -78,9 +76,12 @@ public class AFPElementMapping extends ElementMapping {
protected void initialize() {
if (foObjs == null) {
- foObjs = new HashMap();
+ super.foObjs = new java.util.HashMap();
foObjs.put(PAGE, new AFPPageSetupMaker());
- // foObjs.put(PAGE_GROUP, new AFPMaker());
+// foObjs.put(
+// PAGE_GROUP,
+// new AFPPageGroupMaker()
+// );
foObjs.put(
TAG_LOGICAL_ELEMENT,
new AFPTagLogicalElementMaker());
@@ -94,7 +95,6 @@ public class AFPElementMapping extends ElementMapping {
NO_OPERATION,
new AFPNoOperationMaker());
}
-
}
static class AFPPageSetupMaker extends ElementMapping.Maker {
@@ -126,4 +126,10 @@ public class AFPElementMapping extends ElementMapping {
return new AFPElement(parent, NO_OPERATION);
}
}
+
+// static class AFPPageGroupMaker extends ElementMapping.Maker {
+// public FONode make(FONode parent) {
+// return new AFPElement(parent, PAGE_GROUP);
+// }
+// }
}
diff --git a/src/java/org/apache/fop/render/afp/extensions/AFPExtensionHandler.java b/src/java/org/apache/fop/render/afp/extensions/AFPExtensionHandler.java
index 7fdf7cd11..fca486279 100644
--- a/src/java/org/apache/fop/render/afp/extensions/AFPExtensionHandler.java
+++ b/src/java/org/apache/fop/render/afp/extensions/AFPExtensionHandler.java
@@ -54,7 +54,7 @@ public class AFPExtensionHandler extends DefaultHandler
|| localName.equals(AFPElementMapping.INCLUDE_PAGE_OVERLAY)
|| localName.equals(AFPElementMapping.INCLUDE_PAGE_SEGMENT)
|| localName.equals(AFPElementMapping.PAGE)
- || localName.equals(AFPElementMapping.PAGE_GROUP)) {
+ /*|| localName.equals(AFPElementMapping.PAGE_GROUP)*/) {
//handled in endElement
} else {
handled = false;
diff --git a/src/java/org/apache/fop/render/afp/fonts/OutlineFont.java b/src/java/org/apache/fop/render/afp/fonts/OutlineFont.java
index 57886f89c..f8dd9a1ed 100644
--- a/src/java/org/apache/fop/render/afp/fonts/OutlineFont.java
+++ b/src/java/org/apache/fop/render/afp/fonts/OutlineFont.java
@@ -174,11 +174,8 @@ public class OutlineFont extends AFPFont {
return charSet.mapChar(c);
}
- /**
- * Get the encoding of the font.
- * @return the encoding
- */
- public String getEncoding() {
+ /** {@inheritDoc} */
+ public String getEncodingName() {
return charSet.getEncoding();
}
} \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/afp/fonts/RasterFont.java b/src/java/org/apache/fop/render/afp/fonts/RasterFont.java
index a61f97ab5..44dcd0e9f 100644
--- a/src/java/org/apache/fop/render/afp/fonts/RasterFont.java
+++ b/src/java/org/apache/fop/render/afp/fonts/RasterFont.java
@@ -229,11 +229,8 @@ public class RasterFont extends AFPFont {
return charSet.mapChar(c);
}
- /**
- * Get the encoding of the font.
- * @return the encoding
- */
- public String getEncoding() {
+ /** {@inheritDoc} */
+ public String getEncodingName() {
return charSet.getEncoding();
}
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractAFPObject.java b/src/java/org/apache/fop/render/afp/modca/AbstractAFPObject.java
index 26d42b2d4..106454ad6 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractAFPObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractAFPObject.java
@@ -44,7 +44,7 @@ public abstract class AbstractAFPObject {
* DataStream objects must implement the writeDataStream()
* method to write its data to the given OutputStream
* @param os The outputsteam stream
- * @throws java.io.IOException in the event that an I/O exception occurred
+ * @throws java.io.IOException
*/
public abstract void writeDataStream(OutputStream os) throws IOException;
@@ -52,10 +52,10 @@ public abstract class AbstractAFPObject {
* Help method to write a set of AFPObjects to the AFP datastream.
* @param objects a list of AFPObjects
* @param os The stream to write to
- * @throws java.io.IOException in the event that an I/O exception occurred
+ * @throws java.io.IOException
*/
protected void writeObjects(Collection/*<AbstractAFPObject>*/ objects, OutputStream os)
- throws IOException {
+ throws IOException {
if (objects != null) {
for (Iterator it = objects.iterator(); it.hasNext();) {
Object obj1 = it.next();
@@ -63,5 +63,7 @@ public abstract class AbstractAFPObject {
obj.writeDataStream(os);
}
}
+
}
-} \ No newline at end of file
+}
+
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractDescriptor.java b/src/java/org/apache/fop/render/afp/modca/AbstractDescriptor.java
index 29c619d32..6d827766e 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractDescriptor.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractDescriptor.java
@@ -28,22 +28,22 @@ public abstract class AbstractDescriptor extends AbstractAFPObject {
/** height of this descriptor */
protected int height = 0;
/** width resolution of this descriptor */
- protected int widthRes = 0;
+ protected int widthResolution = 0;
/** height resolution of this descriptor */
- protected int heightRes = 0;
+ protected int heightResolution = 0;
/**
* Constructor a PresentationTextDescriptor for the specified
* width and height.
* @param width The width of the page.
* @param height The height of the page.
- * @param widthRes The width resolution of the page.
- * @param heightRes The height resolution of the page.
+ * @param widthResolution The width resolution of the page.
+ * @param heightResolution The height resolution of the page.
*/
- public AbstractDescriptor(int width, int height, int widthRes, int heightRes) {
+ public AbstractDescriptor(int width, int height, int widthResolution, int heightResolution) {
this.width = width;
this.height = height;
- this.widthRes = widthRes;
- this.heightRes = heightRes;
+ this.widthResolution = widthResolution;
+ this.heightResolution = heightResolution;
}
}
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractNamedAFPObject.java b/src/java/org/apache/fop/render/afp/modca/AbstractNamedAFPObject.java
index 393cff84b..09fa33f8f 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractNamedAFPObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractNamedAFPObject.java
@@ -38,7 +38,7 @@ public abstract class AbstractNamedAFPObject extends AbstractStructuredAFPObject
* The name of the object in EBCIDIC bytes
*/
protected byte[] nameBytes;
-
+
/**
* Default constructor
*/
@@ -51,19 +51,17 @@ public abstract class AbstractNamedAFPObject extends AbstractStructuredAFPObject
* @param name the object name
*/
protected AbstractNamedAFPObject(String name) {
- int nameLen = getNameLength();
- if (name.length() < nameLen) {
- this.name = (name + " ").substring(0, nameLen);
- } else if (name.length() > nameLen) {
- log.warn("Constructor:: name truncated to " + nameLen + " chars: " + name);
- this.name = name.substring(0, nameLen);
- } else {
- this.name = name;
+ this.name = name;
+ if (name.length() < 8) {
+ name = (name + " ").substring(0, 8);
+ } else if (name.length() > 8) {
+ log.warn("Constructor:: name truncated to 8 chars" + name);
+ name = name.substring(0, 8);
}
try {
- this.nameBytes = name.getBytes(AFPConstants.EBCIDIC_ENCODING);
+ nameBytes = name.getBytes(AFPConstants.EBCIDIC_ENCODING);
} catch (UnsupportedEncodingException usee) {
- this.nameBytes = name.getBytes();
+ nameBytes = name.getBytes();
log.warn(
"Constructor:: UnsupportedEncodingException translating the name "
+ name);
@@ -82,5 +80,6 @@ public abstract class AbstractNamedAFPObject extends AbstractStructuredAFPObject
*/
public String getName() {
return name;
- }
+ }
+
}
diff --git a/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java b/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java
index f373b5bf7..984aa44c9 100644
--- a/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/AbstractPageObject.java
@@ -310,7 +310,7 @@ public abstract class AbstractPageObject extends AbstractResourceGroupContainer
private PresentationTextObject getPresentationTextObject() {
if (presentationTextObject == null) {
this.presentationTextObject = new PresentationTextObject();
- addObject(this.presentationTextObject);
+ super.addObject(this.presentationTextObject);
}
return presentationTextObject;
}
diff --git a/src/java/org/apache/fop/render/afp/modca/ImageContent.java b/src/java/org/apache/fop/render/afp/modca/ImageContent.java
index 4aea02901..726c58762 100644
--- a/src/java/org/apache/fop/render/afp/modca/ImageContent.java
+++ b/src/java/org/apache/fop/render/afp/modca/ImageContent.java
@@ -18,13 +18,11 @@
/* $Id$ */
package org.apache.fop.render.afp.modca;
-
import java.io.IOException;
import java.io.OutputStream;
import org.apache.fop.render.afp.tools.BinaryUtils;
/**
- * Image content IOCA object
*/
public class ImageContent extends AbstractStructuredAFPObject {
@@ -55,27 +53,27 @@ public class ImageContent extends AbstractStructuredAFPObject {
/**
* The image size parameter
*/
- private ImageSizeParameter imageSizeParam = null;
+ private ImageSizeParameter _imageSizeParameter = null;
/**
* The image encoding
*/
- private byte encoding = 0x03;
+ private byte _encoding = 0x03;
/**
* The image ide size
*/
- private byte size = 1;
+ private byte _size = 1;
/**
* The image compression
*/
- private byte compression = (byte)0xC0;
+ private byte _compression = (byte)0xC0;
/**
* The image color model
*/
- private byte colorModel = 0x01;
+ private byte _colorModel = 0x01;
/**
* The image data
@@ -97,39 +95,39 @@ public class ImageContent extends AbstractStructuredAFPObject {
* @param vsize The vertival size of the image.
*/
public void setImageSize(int hresol, int vresol, int hsize, int vsize) {
- this.imageSizeParam = new ImageSizeParameter(hresol, vresol, hsize, vsize);
+ _imageSizeParameter = new ImageSizeParameter(hresol, vresol, hsize, vsize);
}
/**
* Sets the image encoding.
- * @param enc The image encoding.
+ * @param encoding The image encoding.
*/
- public void setImageEncoding(byte enc) {
- this.encoding = enc;
+ public void setImageEncoding(byte encoding) {
+ _encoding = encoding;
}
/**
* Sets the image compression.
- * @param comp The image compression.
+ * @param compression The image compression.
*/
- public void setImageCompression(byte comp) {
- this.compression = comp;
+ public void setImageCompression(byte compression) {
+ _compression = compression;
}
/**
* Sets the image IDE size.
- * @param siz The IDE size.
+ * @param size The IDE size.
*/
- public void setImageIDESize(byte siz) {
- this.size = siz;
+ public void setImageIDESize(byte size) {
+ _size = size;
}
/**
* Sets the image IDE color model.
- * @param model the IDE color model.
+ * @param colorModel the IDE color model.
*/
- public void setImageIDEColorModel(byte model) {
- this.colorModel = model;
+ public void setImageIDEColorModel(byte colorModel) {
+ _colorModel = colorModel;
}
/**
@@ -144,8 +142,8 @@ public class ImageContent extends AbstractStructuredAFPObject {
* {@inheritDoc}
*/
protected void writeContent(OutputStream os) throws IOException {
- if (imageSizeParam != null) {
- imageSizeParam.writeDataStream(os);
+ if (_imageSizeParameter != null) {
+ _imageSizeParameter.writeDataStream(os);
}
os.write(getImageEncodingParameter());
os.write(getImageIDESizeParameter());
@@ -190,16 +188,21 @@ public class ImageContent extends AbstractStructuredAFPObject {
* @return byte[] The data stream.
*/
private byte[] getImageDataStart(int len) {
- byte[] imageDataStartData = new byte[] {
+
+ byte[] data = new byte[] {
(byte)0xFE, // ID
(byte)0x92, // ID
0x00, // Length
0x00, // Length
};
+
byte[] l = BinaryUtils.convert(len, 2);
- imageDataStartData[2] = l[0];
- imageDataStartData[3] = l[1];
- return imageDataStartData;
+ data[2] = l[0];
+ data[3] = l[1];
+
+
+ return data;
+
}
/**
@@ -207,13 +210,16 @@ public class ImageContent extends AbstractStructuredAFPObject {
* @return byte[] The data stream.
*/
private byte[] getImageEncodingParameter() {
- byte[] imageEncParamData = new byte[] {
+
+ byte[] data = new byte[] {
(byte)0x95, // ID
0x02, // Length
- encoding,
+ _encoding,
0x01, // RECID
};
- return imageEncParamData;
+
+ return data;
+
}
/**
@@ -221,8 +227,9 @@ public class ImageContent extends AbstractStructuredAFPObject {
* @return byte[] The data stream.
*/
private byte[] getExternalAlgorithmParameter() {
- if (encoding == (byte)0x83 && compression != 0) {
- byte[] extAlgParamData = new byte[] {
+
+ if (_encoding == (byte)0x83 && _compression != 0) {
+ byte[] data = new byte[] {
(byte)0x95, // ID
0x00, // Length
0x10, // ALGTYPE = Compression Algorithm
@@ -231,13 +238,13 @@ public class ImageContent extends AbstractStructuredAFPObject {
0x00, // Reserved
0x00, // Reserved
0x00, // Reserved
- compression, // MARKER
+ _compression, // MARKER
0x00, // Reserved
0x00, // Reserved
0x00, // Reserved
};
- extAlgParamData[1] = (byte)(extAlgParamData.length - 2);
- return extAlgParamData;
+ data[1] = (byte)(data.length - 2);
+ return data;
}
return new byte[0];
}
@@ -247,12 +254,15 @@ public class ImageContent extends AbstractStructuredAFPObject {
* @return byte[] The data stream.
*/
private byte[] getImageIDESizeParameter() {
- byte[] imageIDESizeParamData = new byte[] {
+
+ byte[] data = new byte[] {
(byte)0x96, // ID
0x01, // Length
- size,
+ _size,
};
- return imageIDESizeParamData;
+
+ return data;
+
}
/**
@@ -260,14 +270,15 @@ public class ImageContent extends AbstractStructuredAFPObject {
* @return byte[] The data stream.
*/
private byte[] getIDEStructureParameter() {
- if (colorModel != 0 && size == 24) {
- byte bits = (byte)(size / 3);
- byte[] ideStructParamData = new byte[] {
+
+ if (_colorModel != 0 && _size == 24) {
+ byte bits = (byte)(_size / 3);
+ byte[] data = new byte[] {
(byte)0x9B, // ID
0x00, // Length
0x00, // FLAGS
0x00, // Reserved
- colorModel, // COLOR MODEL
+ _colorModel, // COLOR MODEL
0x00, // Reserved
0x00, // Reserved
0x00, // Reserved
@@ -275,9 +286,10 @@ public class ImageContent extends AbstractStructuredAFPObject {
bits,
bits,
};
- ideStructParamData[1] = (byte)(ideStructParamData.length - 2);
- return ideStructParamData;
+ data[1] = (byte)(data.length - 2);
+ return data;
}
return new byte[0];
}
+
}
diff --git a/src/java/org/apache/fop/render/afp/modca/ImageDataDescriptor.java b/src/java/org/apache/fop/render/afp/modca/ImageDataDescriptor.java
index d1c2c11c7..9250f0c7f 100644
--- a/src/java/org/apache/fop/render/afp/modca/ImageDataDescriptor.java
+++ b/src/java/org/apache/fop/render/afp/modca/ImageDataDescriptor.java
@@ -27,17 +27,10 @@ import org.apache.fop.render.afp.tools.BinaryUtils;
*/
public class ImageDataDescriptor extends AbstractAFPObject {
- /** x resolution */
- private int xresol = 0;
-
- /** y resolution */
- private int yresol = 0;
-
- /** width */
- private int width = 0;
-
- /** height */
- private int height = 0;
+ private int _xresol = 0;
+ private int _yresol = 0;
+ private int _width = 0;
+ private int _height = 0;
/**
* Constructor for a ImageDataDescriptor for the specified
@@ -48,25 +41,26 @@ public class ImageDataDescriptor extends AbstractAFPObject {
* @param height The height of the height.
*/
public ImageDataDescriptor(int xresol, int yresol, int width, int height) {
- this.xresol = xresol;
- this.yresol = yresol;
- this.width = width;
- this.height = height;
+
+ _xresol = xresol;
+ _yresol = yresol;
+ _width = width;
+ _height = height;
+
}
/**
- * {@inheritDoc}
+ * Accessor method to write the AFP datastream for the Image Data Descriptor
+ * @param os The stream to write to
+ * @throws java.io.IOException
*/
- public void writeDataStream(OutputStream os) throws IOException {
- byte[] len = BinaryUtils.convert(21, 2);
- byte[] xres = BinaryUtils.convert(xresol, 2);
- byte[] yres = BinaryUtils.convert(yresol, 2);
- byte[] w = BinaryUtils.convert(width, 2);
- byte[] h = BinaryUtils.convert(height, 2);
+ public void writeDataStream(OutputStream os)
+ throws IOException {
+
byte[] data = new byte[] {
0x5A,
- len[0],
- len[1],
+ 0x00,
+ 0x20,
(byte) 0xD3,
(byte) 0xA6,
(byte) 0xFB,
@@ -74,19 +68,42 @@ public class ImageDataDescriptor extends AbstractAFPObject {
0x00, // Reserved
0x00, // Reserved
0x00, // Unit base - 10 Inches
- xres[0], // XRESOL
- xres[1], //
- yres[0], // YRESOL
- yres[1], //
- w[0], // XSIZE
- w[1], //
- h[0], // YSIZE
- h[1], //
+ 0x00, // XRESOL
+ 0x00, //
+ 0x00, // YRESOL
+ 0x00, //
+ 0x00, // XSIZE
+ 0x00, //
+ 0x00, // YSIZE
+ 0x00, //
(byte)0xF7, // ID = Set IOCA Function Set
0x02, // Length
0x01, // Category = Function set identifier
0x0B, // FCNSET = IOCA FS 11
};
+
+ byte[] l = BinaryUtils.convert(data.length - 1, 2);
+ data[1] = l[0];
+ data[2] = l[1];
+
+ byte[] x = BinaryUtils.convert(_xresol, 2);
+ data[10] = x[0];
+ data[11] = x[1];
+
+ byte[] y = BinaryUtils.convert(_yresol, 2);
+ data[12] = y[0];
+ data[13] = y[1];
+
+ byte[] w = BinaryUtils.convert(_width, 2);
+ data[14] = w[0];
+ data[15] = w[1];
+
+ byte[] h = BinaryUtils.convert(_height, 2);
+ data[16] = h[0];
+ data[17] = h[1];
+
os.write(data);
+
}
+
}
diff --git a/src/java/org/apache/fop/render/afp/modca/ImageSegment.java b/src/java/org/apache/fop/render/afp/modca/ImageSegment.java
index 2876e8348..ea8eb334b 100644
--- a/src/java/org/apache/fop/render/afp/modca/ImageSegment.java
+++ b/src/java/org/apache/fop/render/afp/modca/ImageSegment.java
@@ -18,7 +18,6 @@
/* $Id$ */
package org.apache.fop.render.afp.modca;
-
import java.io.IOException;
import java.io.OutputStream;
@@ -165,6 +164,7 @@ public class ImageSegment extends AbstractNamedAFPObject {
* {@inheritDoc}
*/
protected void writeEnd(OutputStream os) throws IOException {
+
byte[] data = new byte[] {
0x71, // ID
0x00, // Length
diff --git a/src/java/org/apache/fop/render/afp/modca/ObjectAreaDescriptor.java b/src/java/org/apache/fop/render/afp/modca/ObjectAreaDescriptor.java
index aa35db10e..7c940148b 100644
--- a/src/java/org/apache/fop/render/afp/modca/ObjectAreaDescriptor.java
+++ b/src/java/org/apache/fop/render/afp/modca/ObjectAreaDescriptor.java
@@ -35,11 +35,11 @@ public class ObjectAreaDescriptor extends AbstractDescriptor {
* and object height.
* @param width The page width.
* @param height The page height.
- * @param widthRes The page width resolution.
- * @param heightRes The page height resolution.
+ * @param widthResolution The page width resolution.
+ * @param heightResolution The page height resolution.
*/
- public ObjectAreaDescriptor(int width, int height, int widthRes, int heightRes) {
- super(width, height, widthRes, heightRes);
+ public ObjectAreaDescriptor(int width, int height, int widthResolution, int heightResolution) {
+ super(width, height, widthResolution, heightResolution);
}
/**
@@ -47,7 +47,8 @@ public class ObjectAreaDescriptor extends AbstractDescriptor {
* @param os The stream to write to
* @throws java.io.IOException thrown if an I/O exception of some sort has occurred
*/
- public void writeDataStream(OutputStream os) throws IOException {
+ public void writeDataStream(OutputStream os)
+ throws IOException {
byte[] data = new byte[29];
data[0] = 0x5A;
@@ -71,12 +72,12 @@ public class ObjectAreaDescriptor extends AbstractDescriptor {
data[15] = 0x00; // YaoBase = 10 inches
// XaoUnits
- byte[] xdpi = BinaryUtils.convert(this.widthRes * 10, 2);
+ byte[] xdpi = BinaryUtils.convert(widthResolution * 10, 2);
data[16] = xdpi[0];
data[17] = xdpi[1];
// YaoUnits
- byte[] ydpi = BinaryUtils.convert(this.heightRes * 10, 2);
+ byte[] ydpi = BinaryUtils.convert(heightResolution * 10, 2);
data[18] = ydpi[0];
data[19] = ydpi[1];
@@ -84,16 +85,18 @@ public class ObjectAreaDescriptor extends AbstractDescriptor {
data[21] = 0x4C; // tid = Object Area Size
data[22] = 0x02; // Size Type
- byte[] x = BinaryUtils.convert(this.width, 3);
+ byte[] x = BinaryUtils.convert(width, 3);
data[23] = x[0];
data[24] = x[1];
data[25] = x[2];
- byte[] y = BinaryUtils.convert(this.height, 3);
+ byte[] y = BinaryUtils.convert(height, 3);
data[26] = y[0];
data[27] = y[1];
data[28] = y[2];
os.write(data);
+
}
+
} \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/afp/modca/PageDescriptor.java b/src/java/org/apache/fop/render/afp/modca/PageDescriptor.java
index ffa5f3c85..1cdec7616 100644
--- a/src/java/org/apache/fop/render/afp/modca/PageDescriptor.java
+++ b/src/java/org/apache/fop/render/afp/modca/PageDescriptor.java
@@ -35,11 +35,11 @@ public class PageDescriptor extends AbstractDescriptor {
* and page height.
* @param width The page width.
* @param height The page height.
- * @param widthRes The page width resolution
- * @param heightRes The page height resolution
+ * @param widthResolution The page width resolution
+ * @param heightResolution The page height resolution
*/
- public PageDescriptor(int width, int height, int widthRes, int heightRes) {
- super(width, height, widthRes, heightRes);
+ public PageDescriptor(int width, int height, int widthResolution, int heightResolution) {
+ super(width, height, widthResolution, heightResolution);
}
/**
@@ -68,12 +68,12 @@ public class PageDescriptor extends AbstractDescriptor {
data[10] = 0x00; // YpgBase = 10 inches
// XpgUnits
- byte[] xdpi = BinaryUtils.convert(widthRes * 10, 2);
+ byte[] xdpi = BinaryUtils.convert(widthResolution * 10, 2);
data[11] = xdpi[0];
data[12] = xdpi[1];
// YpgUnits
- byte[] ydpi = BinaryUtils.convert(heightRes * 10, 2);
+ byte[] ydpi = BinaryUtils.convert(heightResolution * 10, 2);
data[13] = ydpi[0];
data[14] = ydpi[1];
diff --git a/src/java/org/apache/fop/render/afp/modca/PageObject.java b/src/java/org/apache/fop/render/afp/modca/PageObject.java
index bad80bcc1..9a8646ba0 100644
--- a/src/java/org/apache/fop/render/afp/modca/PageObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/PageObject.java
@@ -56,14 +56,14 @@ public class PageObject extends AbstractPageObject {
* the height of the page.
* @param rotation
* the rotation of the page.
- * @param widthRes
+ * @param widthResolution
* the width resolution of the page.
- * @param heightRes
+ * @param heightResolution
* the height resolution of the page.
*/
public PageObject(String name, int width, int height, int rotation,
- int widthRes, int heightRes) {
- super(name, width, height, rotation, widthRes, heightRes);
+ int widthResolution, int heightResolution) {
+ super(name, width, height, rotation, widthResolution, heightResolution);
}
/**
diff --git a/src/java/org/apache/fop/render/afp/modca/PresentationTextData.java b/src/java/org/apache/fop/render/afp/modca/PresentationTextData.java
index 30a78d6c9..98beb96f7 100644
--- a/src/java/org/apache/fop/render/afp/modca/PresentationTextData.java
+++ b/src/java/org/apache/fop/render/afp/modca/PresentationTextData.java
@@ -56,42 +56,42 @@ public class PresentationTextData extends AbstractAFPObject {
/**
* The afp data relating to this presentaion text data.
*/
- private ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
+ private ByteArrayOutputStream _baos = new ByteArrayOutputStream(1024);
/**
* The current x coordinate.
*/
- private int currentXCoordinate = -1;
+ private int _currentXCoordinate = -1;
/**
* The current y cooridnate
*/
- private int currentYCoordinate = -1;
+ private int _currentYCoordinate = -1;
/**
* The current font
*/
- private String currentFont = "";
+ private String _currentFont = "";
/**
* The current orientation
*/
- private int currentOrientation = 0;
+ private int _currentOrientation = 0;
/**
* The current color
*/
- private Color currentColor = new Color(0, 0, 0);
+ private Color _currentColor = new Color(0, 0, 0);
/**
* The current variable space increment
*/
- private int currentVariableSpaceCharacterIncrement = 0;
+ private int _currentVariableSpaceCharacterIncrement = 0;
/**
* The current inter character adjustment
*/
- private int currentInterCharacterAdjustment = 0;
+ private int _currentInterCharacterAdjustment = 0;
/**
* Default constructor for the PresentationTextData.
@@ -112,7 +112,7 @@ public class PresentationTextData extends AbstractAFPObject {
*/
public PresentationTextData(boolean controlInd) {
- baos.write(new byte[] {0x5A, // Structured field identifier
+ _baos.write(new byte[] { 0x5A, // Structured field identifier
0x00, // Record length byte 1
0x00, // Record length byte 2
(byte) 0xD3, // PresentationTextData identifier byte 1
@@ -124,7 +124,7 @@ public class PresentationTextData extends AbstractAFPObject {
}, 0, 9);
if (controlInd) {
- baos.write(new byte[] {0x2B, (byte) 0xD3}, 0, 2);
+ _baos.write(new byte[] { 0x2B, (byte) 0xD3 }, 0, 2);
}
}
@@ -142,13 +142,13 @@ public class PresentationTextData extends AbstractAFPObject {
private void setCodedFont(byte font, ByteArrayOutputStream afpdata) {
// Avoid unnecessary specification of the font
- if (String.valueOf(font).equals(currentFont)) {
+ if (String.valueOf(font).equals(_currentFont)) {
return;
} else {
- currentFont = String.valueOf(font);
+ _currentFont = String.valueOf(font);
}
- afpdata.write(new byte[] {0x03, (byte) 0xF1, font}, 0, 3);
+ afpdata.write(new byte[] { 0x03, (byte) 0xF1, font, }, 0, 3);
}
@@ -167,9 +167,9 @@ public class PresentationTextData extends AbstractAFPObject {
byte[] b = BinaryUtils.convert(coordinate, 2);
- afpdata.write(new byte[] {0x04, (byte) 0xC7, b[0], b[1]}, 0, 4);
+ afpdata.write(new byte[] { 0x04, (byte) 0xC7, b[0], b[1], }, 0, 4);
- currentXCoordinate = coordinate;
+ _currentXCoordinate = coordinate;
}
@@ -188,9 +188,9 @@ public class PresentationTextData extends AbstractAFPObject {
byte[] b = BinaryUtils.convert(coordinate, 2);
- afpdata.write(new byte[] {0x04, (byte) 0xD3, b[0], b[1]}, 0, 4);
+ afpdata.write(new byte[] { 0x04, (byte) 0xD3, b[0], b[1], }, 0, 4);
- currentYCoordinate = coordinate;
+ _currentYCoordinate = coordinate;
}
@@ -214,7 +214,7 @@ public class PresentationTextData extends AbstractAFPObject {
"Transparent data is longer than 253 bytes: " + data);
}
- afpdata.write(new byte[] {BinaryUtils.convert(l)[0], (byte) 0xDB},
+ afpdata.write(new byte[] { BinaryUtils.convert(l)[0], (byte) 0xDB, },
0, 2);
afpdata.write(data, 0, data.length);
@@ -236,7 +236,7 @@ public class PresentationTextData extends AbstractAFPObject {
private void drawBaxisRule(int length, int width,
ByteArrayOutputStream afpdata) {
- afpdata.write(new byte[] {0x07, // Length
+ afpdata.write(new byte[] { 0x07, // Length
(byte) 0xE7, // Type
}, 0, 2);
@@ -266,7 +266,7 @@ public class PresentationTextData extends AbstractAFPObject {
private void drawIaxisRule(int length, int width,
ByteArrayOutputStream afpdata) {
- afpdata.write(new byte[] {0x07, // Length
+ afpdata.write(new byte[] { 0x07, // Length
(byte) 0xE5, // Type
}, 0, 2);
@@ -284,7 +284,7 @@ public class PresentationTextData extends AbstractAFPObject {
/**
* Create the presentation text data for the byte array of data.
*
- * @param fontReference
+ * @param fontNumber
* The font resource identifier.
* @param x
* The x coordinate for the text data.
@@ -300,64 +300,64 @@ public class PresentationTextData extends AbstractAFPObject {
* The inter character adjustment.
* @param data
* The text data to be created.
- * @throws MaximumSizeExceededException if the maximum size is exceeded
+ * @throws MaximumSizeExceededException
*/
- public void createTextData(int fontReference, int x, int y, int orientation,
+ public void createTextData(int fontNumber, int x, int y, int orientation,
Color col, int vsci, int ica, byte[] data)
throws MaximumSizeExceededException {
ByteArrayOutputStream afpdata = new ByteArrayOutputStream();
- if (currentOrientation != orientation) {
+ if (_currentOrientation != orientation) {
setTextOrientation(orientation, afpdata);
- currentOrientation = orientation;
- currentXCoordinate = -1;
- currentYCoordinate = -1;
+ _currentOrientation = orientation;
+ _currentXCoordinate = -1;
+ _currentYCoordinate = -1;
}
// Avoid unnecessary specification of the Y co-ordinate
- if (y != currentYCoordinate) {
+ if (y != _currentYCoordinate) {
absoluteMoveBaseline(y, afpdata);
- currentXCoordinate = -1;
+ _currentXCoordinate = -1;
}
// Avoid unnecessary specification of the X co-ordinate
- if (x != currentXCoordinate) {
+ if (x != _currentXCoordinate) {
absoluteMoveInline(x, afpdata);
}
// Avoid unnecessary specification of the variable space increment
- if (vsci != currentVariableSpaceCharacterIncrement) {
+ if (vsci != _currentVariableSpaceCharacterIncrement) {
setVariableSpaceCharacterIncrement(vsci, afpdata);
- currentVariableSpaceCharacterIncrement = vsci;
+ _currentVariableSpaceCharacterIncrement = vsci;
}
// Avoid unnecessary specification of the inter character adjustment
- if (ica != currentInterCharacterAdjustment) {
+ if (ica != _currentInterCharacterAdjustment) {
setInterCharacterAdjustment(ica, afpdata);
- currentInterCharacterAdjustment = ica;
+ _currentInterCharacterAdjustment = ica;
}
// Avoid unnecessary specification of the text color
- if (!col.equals(currentColor)) {
+ if (!col.equals(_currentColor)) {
setExtendedTextColor(col, afpdata);
- currentColor = col;
+ _currentColor = col;
}
- setCodedFont(BinaryUtils.convert(fontReference)[0], afpdata);
+ setCodedFont(BinaryUtils.convert(fontNumber)[0], afpdata);
addTransparentData(data, afpdata);
- currentXCoordinate = -1;
+ _currentXCoordinate = -1;
int s = afpdata.size();
- if (baos.size() + s > MAX_SIZE) {
- currentXCoordinate = -1;
- currentYCoordinate = -1;
+ if (_baos.size() + s > MAX_SIZE) {
+ _currentXCoordinate = -1;
+ _currentYCoordinate = -1;
throw new MaximumSizeExceededException();
}
byte[] outputdata = afpdata.toByteArray();
- baos.write(outputdata, 0, outputdata.length);
+ _baos.write(outputdata, 0, outputdata.length);
}
@@ -379,31 +379,30 @@ public class PresentationTextData extends AbstractAFPObject {
* The orientation of the text data.
* @param col
* The text color.
- * @throws MaximumSizeExceededException if the maximum size is exceeded
*/
public void createLineData(int x1, int y1, int x2, int y2, int thickness,
int orientation, Color col) throws MaximumSizeExceededException {
ByteArrayOutputStream afpdata = new ByteArrayOutputStream();
- if (currentOrientation != orientation) {
+ if (_currentOrientation != orientation) {
setTextOrientation(orientation, afpdata);
- currentOrientation = orientation;
+ _currentOrientation = orientation;
}
// Avoid unnecessary specification of the Y coordinate
- if (y1 != currentYCoordinate) {
+ if (y1 != _currentYCoordinate) {
absoluteMoveBaseline(y1, afpdata);
}
// Avoid unnecessary specification of the X coordinate
- if (x1 != currentXCoordinate) {
+ if (x1 != _currentXCoordinate) {
absoluteMoveInline(x1, afpdata);
}
- if (!col.equals(currentColor)) {
+ if (!col.equals(_currentColor)) {
setExtendedTextColor(col, afpdata);
- currentColor = col;
+ _currentColor = col;
}
if (y1 == y2) {
@@ -416,14 +415,14 @@ public class PresentationTextData extends AbstractAFPObject {
int s = afpdata.size();
- if (baos.size() + s > MAX_SIZE) {
- currentXCoordinate = -1;
- currentYCoordinate = -1;
+ if (_baos.size() + s > MAX_SIZE) {
+ _currentXCoordinate = -1;
+ _currentYCoordinate = -1;
throw new MaximumSizeExceededException();
}
byte[] outputdata = afpdata.toByteArray();
- baos.write(outputdata, 0, outputdata.length);
+ _baos.write(outputdata, 0, outputdata.length);
}
@@ -444,7 +443,7 @@ public class PresentationTextData extends AbstractAFPObject {
private void setTextOrientation(int orientation,
ByteArrayOutputStream afpdata) {
- afpdata.write(new byte[] {0x06, (byte) 0xF7}, 0, 2);
+ afpdata.write(new byte[] { 0x06, (byte) 0xF7, }, 0, 2);
switch (orientation) {
case 90:
@@ -560,11 +559,12 @@ public class PresentationTextData extends AbstractAFPObject {
* Accessor method to write the AFP datastream for
* the text data.
* @param os The stream to write to
- * @throws java.io.IOException if an I/O exception occurred
+ * @throws java.io.IOException
*/
- public void writeDataStream(OutputStream os) throws IOException {
+ public void writeDataStream(OutputStream os)
+ throws IOException {
- byte[] data = baos.toByteArray();
+ byte[] data = _baos.toByteArray();
byte[] size = BinaryUtils.convert(data.length - 1, 2);
data[1] = size[0];
data[2] = size[1];
@@ -580,7 +580,7 @@ public class PresentationTextData extends AbstractAFPObject {
* presentation text data objects, but must eventually be terminated. This
* method terminates the control sequence.
*
- * @throws MaximumSizeExceededException if the maximum size is exceeded
+ * @throws MaximumSizeExceededException
*/
public void endControlSequence() throws MaximumSizeExceededException {
@@ -588,10 +588,12 @@ public class PresentationTextData extends AbstractAFPObject {
data[0] = 0x02;
data[1] = (byte) 0xF8;
- if (data.length + baos.size() > MAX_SIZE) {
+ if (data.length + _baos.size() > MAX_SIZE) {
throw new MaximumSizeExceededException();
}
- baos.write(data, 0, data.length);
+
+ _baos.write(data, 0, data.length);
+
}
} \ No newline at end of file
diff --git a/src/java/org/apache/fop/render/afp/modca/PresentationTextDescriptor.java b/src/java/org/apache/fop/render/afp/modca/PresentationTextDescriptor.java
index 27b3de5ca..3858f4169 100644
--- a/src/java/org/apache/fop/render/afp/modca/PresentationTextDescriptor.java
+++ b/src/java/org/apache/fop/render/afp/modca/PresentationTextDescriptor.java
@@ -52,11 +52,12 @@ public class PresentationTextDescriptor extends AbstractDescriptor {
* width and height.
* @param width The width of the page.
* @param height The height of the page.
- * @param widthRes The width resolution of the page.
- * @param heightRes The height resolution of the page.
+ * @param widthResolution The width resolution of the page.
+ * @param heightResolution The height resolution of the page.
*/
- public PresentationTextDescriptor(int width, int height, int widthRes, int heightRes) {
- super(width, height, widthRes, heightRes);
+ public PresentationTextDescriptor(int width, int height,
+ int widthResolution, int heightResolution) {
+ super(width, height, widthResolution, heightResolution);
}
/**
@@ -80,11 +81,11 @@ public class PresentationTextDescriptor extends AbstractDescriptor {
data[9] = 0x00;
data[10] = 0x00;
- byte[] xdpi = BinaryUtils.convert(widthRes * 10, 2);
+ byte[] xdpi = BinaryUtils.convert(widthResolution * 10, 2);
data[11] = xdpi[0]; // xdpi
data[12] = xdpi[1];
- byte[] ydpi = BinaryUtils.convert(heightRes * 10, 2);
+ byte[] ydpi = BinaryUtils.convert(heightResolution * 10, 2);
data[13] = ydpi[0]; // ydpi
data[14] = ydpi[1];
diff --git a/src/java/org/apache/fop/render/afp/modca/PresentationTextObject.java b/src/java/org/apache/fop/render/afp/modca/PresentationTextObject.java
index 49f7c81a8..5df9fdb4c 100644
--- a/src/java/org/apache/fop/render/afp/modca/PresentationTextObject.java
+++ b/src/java/org/apache/fop/render/afp/modca/PresentationTextObject.java
@@ -117,7 +117,6 @@ public class PresentationTextObject extends AbstractNamedAFPObject {
startPresentationTextData();
}
try {
-
currentPresentationTextData.createTextData(fontRef, x, y,
orientation, col, vsci, ica, data);
} catch (MaximumSizeExceededException msee) {
@@ -279,4 +278,4 @@ public class PresentationTextObject extends AbstractNamedAFPObject {
endControlSequence();
}
}
-} \ No newline at end of file
+}
diff --git a/src/java/org/apache/fop/render/afp/modca/TagLogicalElementBean.java b/src/java/org/apache/fop/render/afp/modca/TagLogicalElementBean.java
index 99f31ba14..29ac9eb5d 100644
--- a/src/java/org/apache/fop/render/afp/modca/TagLogicalElementBean.java
+++ b/src/java/org/apache/fop/render/afp/modca/TagLogicalElementBean.java
@@ -47,7 +47,7 @@ public class TagLogicalElementBean {
* @return the key
*/
public String getKey() {
- return this.key;
+ return key;
}
/**
@@ -55,7 +55,7 @@ public class TagLogicalElementBean {
* @return the value
*/
public String getValue() {
- return this.value;
+ return value;
}
}
diff --git a/src/java/org/apache/fop/render/java2d/CustomFontMetricsMapper.java b/src/java/org/apache/fop/render/java2d/CustomFontMetricsMapper.java
index 208bc303a..3a773a2db 100644
--- a/src/java/org/apache/fop/render/java2d/CustomFontMetricsMapper.java
+++ b/src/java/org/apache/fop/render/java2d/CustomFontMetricsMapper.java
@@ -112,7 +112,7 @@ public class CustomFontMetricsMapper extends Typeface implements FontMetricsMapp
}
/** {@inheritDoc} */
- public final String getEncoding() {
+ public final String getEncodingName() {
return null; //Not applicable to Java2D rendering
}
diff --git a/src/java/org/apache/fop/render/java2d/Java2DRenderer.java b/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
index 8442af229..583d2ad2f 100644
--- a/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
+++ b/src/java/org/apache/fop/render/java2d/Java2DRenderer.java
@@ -312,6 +312,8 @@ public abstract class Java2DRenderer extends AbstractPathOrientedRenderer implem
graphics.setRenderingHint(RenderingHints.KEY_RENDERING,
RenderingHints.VALUE_RENDER_QUALITY);
}
+ graphics.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
+ RenderingHints.VALUE_STROKE_PURE);
// transform page based on scale factor supplied
AffineTransform at = graphics.getTransform();
diff --git a/src/java/org/apache/fop/render/java2d/SystemFontMetricsMapper.java b/src/java/org/apache/fop/render/java2d/SystemFontMetricsMapper.java
index ed7391383..19e9a4d1d 100644
--- a/src/java/org/apache/fop/render/java2d/SystemFontMetricsMapper.java
+++ b/src/java/org/apache/fop/render/java2d/SystemFontMetricsMapper.java
@@ -172,7 +172,7 @@ public class SystemFontMetricsMapper extends Typeface implements FontMetricsMapp
}
/** {@inheritDoc} */
- public String getEncoding() {
+ public String getEncodingName() {
return null; //Not applicable to Java2D rendering
}
diff --git a/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java b/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
index b676ad6d5..caf8928ac 100644
--- a/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/AbstractImageAdapter.java
@@ -81,7 +81,7 @@ public abstract class AbstractImageAdapter implements PDFImage {
/** {@inheritDoc} */
public void setup(PDFDocument doc) {
- ICC_Profile prof = image.getICCProfile();
+ ICC_Profile prof = getEffectiveICCProfile();
PDFDeviceColorSpace pdfCS = toPDFColorSpace(getImageColorSpace());
if (prof != null) {
pdfICCStream = setupColorProfile(doc, prof, pdfCS);
@@ -100,6 +100,14 @@ public abstract class AbstractImageAdapter implements PDFImage {
}
}
+ /**
+ * Returns the effective ICC profile for the image.
+ * @return an ICC profile or null
+ */
+ protected ICC_Profile getEffectiveICCProfile() {
+ return image.getICCProfile();
+ }
+
private static PDFICCStream setupColorProfile(PDFDocument doc,
ICC_Profile prof, PDFDeviceColorSpace pdfCS) {
boolean defaultsRGB = ColorProfileUtil.isDefaultsRGB(prof);
diff --git a/src/java/org/apache/fop/render/pdf/ImageRawJPEGAdapter.java b/src/java/org/apache/fop/render/pdf/ImageRawJPEGAdapter.java
index 4b0ce4a85..1c8fceb50 100644
--- a/src/java/org/apache/fop/render/pdf/ImageRawJPEGAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/ImageRawJPEGAdapter.java
@@ -18,19 +18,33 @@
/* $Id$ */
package org.apache.fop.render.pdf;
+import java.awt.color.ICC_Profile;
+import java.io.DataInput;
import java.io.IOException;
+import java.io.InputStream;
import java.io.OutputStream;
+import org.apache.commons.io.IOUtils;
+
import org.apache.xmlgraphics.image.loader.impl.ImageRawJPEG;
+import org.apache.xmlgraphics.image.loader.impl.JPEGConstants;
+import org.apache.xmlgraphics.image.loader.impl.JPEGFile;
+import org.apache.xmlgraphics.image.loader.util.ImageUtil;
import org.apache.fop.pdf.DCTFilter;
import org.apache.fop.pdf.PDFDeviceColorSpace;
import org.apache.fop.pdf.PDFDocument;
import org.apache.fop.pdf.PDFFilter;
import org.apache.fop.pdf.PDFFilterList;
+import org.apache.fop.util.ColorProfileUtil;
/**
* PDFImage implementation for the PDF renderer which handles raw JPEG images.
+ * <p>
+ * The JPEG is copied to the XObject's stream as-is but some elements (marker segments) are
+ * filtered. For example, an embedded color profile is filtered since it is already added as
+ * a PDF object and associated with the XObject. This way, the PDF file size is kept as small
+ * as possible.
*/
public class ImageRawJPEGAdapter extends AbstractImageAdapter {
@@ -68,6 +82,21 @@ public class ImageRawJPEGAdapter extends AbstractImageAdapter {
}
/** {@inheritDoc} */
+ protected ICC_Profile getEffectiveICCProfile() {
+ ICC_Profile profile = super.getEffectiveICCProfile();
+ if (profile != null
+ && profile.getNumComponents() == 3
+ && !ColorProfileUtil.isDefaultsRGB(profile)) {
+ //RGB profiles which are not sRGB don't seem to work.
+ //Without this override, the image drifts into yellow for an unknown reason.
+ //TODO Find out why this happens.
+ //Test using a JPEG images with, for example, "Adobe RGB 1998" color profile.
+ profile = null;
+ }
+ return profile;
+ }
+
+ /** {@inheritDoc} */
public int getBitsPerComponent() {
return 8;
}
@@ -84,7 +113,77 @@ public class ImageRawJPEGAdapter extends AbstractImageAdapter {
/** {@inheritDoc} */
public void outputContents(OutputStream out) throws IOException {
- getImage().writeTo(out);
+ InputStream in = getImage().createInputStream();
+ in = ImageUtil.decorateMarkSupported(in);
+ try {
+ JPEGFile jpeg = new JPEGFile(in);
+ DataInput din = jpeg.getDataInput();
+
+ //Copy the whole JPEG file except:
+ // - the ICC profile
+ //TODO Thumbnails could safely be skipped, too.
+ //TODO Metadata (XMP, IPTC, EXIF) could safely be skipped, too.
+ while (true) {
+ int reclen;
+ int segID = jpeg.readMarkerSegment();
+ switch (segID) {
+ case JPEGConstants.SOI:
+ out.write(0xFF);
+ out.write(segID);
+ break;
+ case JPEGConstants.EOI:
+ case JPEGConstants.SOS:
+ out.write(0xFF);
+ out.write(segID);
+ IOUtils.copy(in, out); //Just copy the rest!
+ return;
+ /*
+ case JPEGConstants.APP1: //Metadata
+ case JPEGConstants.APPD:
+ jpeg.skipCurrentMarkerSegment();
+ break;*/
+ case JPEGConstants.APP2: //ICC (see ICC1V42.pdf)
+ boolean skipICCProfile = false;
+ in.mark(16);
+ try {
+ reclen = jpeg.readSegmentLength();
+ // Check for ICC profile
+ byte[] iccString = new byte[11];
+ din.readFully(iccString);
+ din.skipBytes(1); //string terminator (null byte)
+
+ if ("ICC_PROFILE".equals(new String(iccString, "US-ASCII"))) {
+ skipICCProfile = (this.image.getICCProfile() != null);
+ }
+ } finally {
+ in.reset();
+ }
+ if (skipICCProfile) {
+ //ICC profile is skipped as it is already embedded as a PDF object
+ jpeg.skipCurrentMarkerSegment();
+ break;
+ }
+ default:
+ out.write(0xFF);
+ out.write(segID);
+
+ reclen = jpeg.readSegmentLength();
+ //write short
+ out.write((reclen >>> 8) & 0xFF);
+ out.write((reclen >>> 0) & 0xFF);
+ int left = reclen - 2;
+ byte[] buf = new byte[2048];
+ while (left > 0) {
+ int part = Math.min(buf.length, left);
+ din.readFully(buf, 0, part);
+ out.write(buf, 0, part);
+ left -= part;
+ }
+ }
+ }
+ } finally {
+ IOUtils.closeQuietly(in);
+ }
}
/** {@inheritDoc} */
diff --git a/src/java/org/apache/fop/render/pdf/PDFGraphics2DAdapter.java b/src/java/org/apache/fop/render/pdf/PDFGraphics2DAdapter.java
index 1a121e294..c47b944d0 100644
--- a/src/java/org/apache/fop/render/pdf/PDFGraphics2DAdapter.java
+++ b/src/java/org/apache/fop/render/pdf/PDFGraphics2DAdapter.java
@@ -89,8 +89,8 @@ public class PDFGraphics2DAdapter extends AbstractGraphics2DAdapter {
PDFGraphics2D graphics = new PDFGraphics2D(textAsShapes,
pdfInfo.fi, pdfInfo.pdfDoc,
pdfInfo.pdfContext, pdfInfo.pdfPage.referencePDF(),
- renderer.currentFontName,
- renderer.currentFontSize);
+ pdfInfo.currentFontName,
+ pdfInfo.currentFontSize);
graphics.setGraphicContext(new org.apache.xmlgraphics.java2d.GraphicContext());
AffineTransform transform = new AffineTransform();
diff --git a/src/java/org/apache/fop/render/pdf/PDFRenderer.java b/src/java/org/apache/fop/render/pdf/PDFRenderer.java
index 19f274902..55524534e 100644
--- a/src/java/org/apache/fop/render/pdf/PDFRenderer.java
+++ b/src/java/org/apache/fop/render/pdf/PDFRenderer.java
@@ -63,7 +63,6 @@ import org.apache.fop.area.OffDocumentExtensionAttachment;
import org.apache.fop.area.OffDocumentItem;
import org.apache.fop.area.PageSequence;
import org.apache.fop.area.PageViewport;
-import org.apache.fop.area.RegionViewport;
import org.apache.fop.area.Trait;
import org.apache.fop.area.inline.AbstractTextArea;
import org.apache.fop.area.inline.Image;
@@ -78,6 +77,8 @@ import org.apache.fop.fo.Constants;
import org.apache.fop.fo.extensions.ExtensionAttachment;
import org.apache.fop.fo.extensions.xmp.XMPMetadata;
import org.apache.fop.fonts.Font;
+import org.apache.fop.fonts.LazyFont;
+import org.apache.fop.fonts.SingleByteFont;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.pdf.PDFAMode;
import org.apache.fop.pdf.PDFAction;
@@ -106,7 +107,7 @@ import org.apache.fop.pdf.PDFResourceContext;
import org.apache.fop.pdf.PDFResources;
import org.apache.fop.pdf.PDFState;
import org.apache.fop.pdf.PDFStream;
-import org.apache.fop.pdf.PDFText;
+import org.apache.fop.pdf.PDFTextUtil;
import org.apache.fop.pdf.PDFXMode;
import org.apache.fop.pdf.PDFXObject;
import org.apache.fop.render.AbstractPathOrientedRenderer;
@@ -250,21 +251,14 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
/** drawing state */
protected PDFState currentState = null;
- /** Name of currently selected font */
- protected String currentFontName = "";
- /** Size of currently selected font */
- protected int currentFontSize = 0;
+ /** Text generation utility holding the current font status */
+ protected PDFTextUtil textutil;
/** page height */
protected int pageHeight;
/** Registry of PDF filters */
protected Map filterMap;
- /**
- * true if a BT command has been written.
- */
- protected boolean inTextMode = false;
-
/** Image handler registry */
private PDFImageHandlerRegistry imageHandlerRegistry = new PDFImageHandlerRegistry();
@@ -527,7 +521,7 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
currentContext = null;
currentPage = null;
currentState = null;
- currentFontName = "";
+ this.textutil = null;
idPositions.clear();
idGoTos.clear();
@@ -665,19 +659,15 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
/** Indicates the beginning of a text object. */
protected void beginTextObject() {
- if (!inTextMode) {
- currentStream.add("BT\n");
- currentFontName = "";
- inTextMode = true;
+ if (!textutil.isInTextObject()) {
+ textutil.beginTextObject();
}
}
/** Indicates the end of a text object. */
protected void endTextObject() {
- closeText();
- if (inTextMode) {
- currentStream.add("ET\n");
- inTextMode = false;
+ if (textutil.isInTextObject()) {
+ textutil.endTextObject();
}
}
@@ -787,6 +777,11 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
currentStream = this.pdfDoc.getFactory()
.makeStream(PDFFilterList.CONTENT_FILTER, false);
+ this.textutil = new PDFTextUtil() {
+ protected void write(String code) {
+ currentStream.add(code);
+ }
+ };
currentState = new PDFState();
// Transform the PDF's default coordinate system (0,0 at lower left) to the PDFRenderer's
@@ -795,9 +790,6 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
currentState.concatenate(basicPageTransform);
currentStream.add(CTMHelper.toPDFString(basicPageTransform, false) + " cm\n");
-
- currentFontName = "";
-
super.renderPage(page);
this.pdfDoc.registerObject(currentStream);
@@ -808,6 +800,7 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
}
this.pdfDoc.addObject(currentPage);
this.pdfDoc.output(ostream);
+ this.textutil = null;
}
/** {@inheritDoc} */
@@ -841,17 +834,6 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
}
/**
- * Handle the traits for a region
- * This is used to draw the traits for the given page region.
- * (See Sect. 6.4.1.2 of XSL-FO spec.)
- * @param region the RegionViewport whose region is to be drawn
- */
- protected void handleRegionTraits(RegionViewport region) {
- currentFontName = "";
- super.handleRegionTraits(region);
- }
-
- /**
* Formats a float value (normally coordinates) as Strings.
* @param value the value
* @return the formatted value
@@ -866,7 +848,8 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
float w = x2 - x1;
float h = y2 - y1;
if ((w < 0) || (h < 0)) {
- log.error("Negative extent received (w=" + w + ", h=" + h + "). Border won't be painted.");
+ log.error("Negative extent received (w=" + w + ", h=" + h
+ + "). Border won't be painted.");
return;
}
switch (style) {
@@ -1329,12 +1312,9 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
super.renderBlock(block);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
protected void renderLineArea(LineArea line) {
super.renderLineArea(line);
- closeText();
}
/**
@@ -1423,11 +1403,20 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
}
}
- /**
- * {@inheritDoc}
- */
+ private Typeface getTypeface(String fontName) {
+ Typeface tf = (Typeface) fontInfo.getFonts().get(fontName);
+ if (tf instanceof LazyFont) {
+ tf = ((LazyFont)tf).getRealFont();
+ }
+ return tf;
+ }
+
+ /** {@inheritDoc} */
public void renderText(TextArea text) {
renderInlineAreaBackAndBorders(text);
+ Color ct = (Color) text.getTrait(Trait.COLOR);
+ updateColor(ct, true);
+
beginTextObject();
StringBuffer pdf = new StringBuffer();
@@ -1435,12 +1424,10 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
int size = ((Integer) text.getTrait(Trait.FONT_SIZE)).intValue();
// This assumes that *all* CIDFonts use a /ToUnicode mapping
- Typeface tf = (Typeface) fontInfo.getFonts().get(fontName);
- boolean useMultiByte = tf.isMultiByte();
+ Typeface tf = getTypeface(fontName);
+
+ textutil.updateTf(fontName, size / 1000f, tf.isMultiByte());
- updateFont(fontName, size, pdf);
- Color ct = (Color) text.getTrait(Trait.COLOR);
- updateColor(ct, true, pdf);
// word.getOffset() = only height of text itself
// currentBlockIPPosition: 0 for beginning of line; nonzero
@@ -1448,66 +1435,46 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
int rx = currentIPPosition + text.getBorderAndPaddingWidthStart();
int bl = currentBPPosition + text.getOffset() + text.getBaselineOffset();
- pdf.append("1 0 0 -1 " + format(rx / 1000f) + " " + format(bl / 1000f) + " Tm "
- /*+ format(text.getTextLetterSpaceAdjust() / 1000f) + " Tc\n"*/
- /*+ format(text.getTextWordSpaceAdjust() / 1000f) + " Tw ["*/);
+ textutil.writeTextMatrix(new AffineTransform(1, 0, 0, -1, rx / 1000f, bl / 1000f));
- pdf.append("[");
currentStream.add(pdf.toString());
super.renderText(text);
- currentStream.add("] TJ\n");
+ textutil.writeTJ();
renderTextDecoration(tf, size, text, bl, rx);
}
-
- /**
- * {@inheritDoc}
- */
+
+ /** {@inheritDoc} */
public void renderWord(WordArea word) {
Font font = getFontFromArea(word.getParentArea());
- Typeface tf = (Typeface) fontInfo.getFonts().get(font.getFontName());
- boolean useMultiByte = tf.isMultiByte();
-
- StringBuffer pdf = new StringBuffer();
-
String s = word.getWord();
- escapeText(s, word.getLetterAdjustArray(),
- font, (AbstractTextArea)word.getParentArea(), useMultiByte, pdf);
- currentStream.add(pdf.toString());
+ escapeText(s, word.getLetterAdjustArray(),
+ font, (AbstractTextArea)word.getParentArea());
super.renderWord(word);
}
- /**
- * {@inheritDoc}
- */
+ /** {@inheritDoc} */
public void renderSpace(SpaceArea space) {
Font font = getFontFromArea(space.getParentArea());
- Typeface tf = (Typeface) fontInfo.getFonts().get(font.getFontName());
- boolean useMultiByte = tf.isMultiByte();
-
String s = space.getSpace();
- StringBuffer pdf = new StringBuffer();
-
AbstractTextArea textArea = (AbstractTextArea)space.getParentArea();
- escapeText(s, null, font, textArea, useMultiByte, pdf);
+ escapeText(s, null, font, textArea);
if (space.isAdjustable()) {
int tws = -((TextArea) space.getParentArea()).getTextWordSpaceAdjust()
- 2 * textArea.getTextLetterSpaceAdjust();
if (tws != 0) {
- pdf.append(format(tws / (font.getFontSize() / 1000f)));
- pdf.append(" ");
+ float adjust = tws / (font.getFontSize() / 1000f);
+ textutil.adjustGlyphTJ(adjust);
}
}
- currentStream.add(pdf.toString());
-
super.renderSpace(space);
}
@@ -1515,101 +1482,77 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
* Escapes text according to PDF rules.
* @param s Text to escape
* @param letterAdjust an array of widths for letter adjustment (may be null)
- * @param fs Font state
+ * @param font to font in use
+ * @param parentArea the parent text area to retrieve certain traits from
+ */
+ protected void escapeText(String s,
+ int[] letterAdjust,
+ Font font, AbstractTextArea parentArea) {
+ escapeText(s, 0, s.length(), letterAdjust, font, parentArea);
+ }
+
+ /**
+ * Escapes text according to PDF rules.
+ * @param s Text to escape
+ * @param start the start position in the text
+ * @param end the end position in the text
+ * @param letterAdjust an array of widths for letter adjustment (may be null)
+ * @param font to font in use
* @param parentArea the parent text area to retrieve certain traits from
- * @param useMultiByte Indicates the use of multi byte convention
- * @param pdf target buffer for the escaped text
*/
- public void escapeText(String s, int[] letterAdjust,
- Font fs, AbstractTextArea parentArea,
- boolean useMultiByte, StringBuffer pdf) {
- String startText = useMultiByte ? "<" : "(";
- String endText = useMultiByte ? "> " : ") ";
-
- /*
- boolean kerningAvailable = false;
- Map kerning = fs.getKerning();
- if (kerning != null && !kerning.isEmpty()) {
- //kerningAvailable = true;
- //TODO Reenable me when the layout engine supports kerning, too
- log.warn("Kerning support is disabled until it is supported by the layout engine!");
- }
- */
+ protected void escapeText(String s, int start, int end,
+ int[] letterAdjust,
+ Font font, AbstractTextArea parentArea) {
+ String fontName = font.getFontName();
+ float fontSize = font.getFontSize() / 1000f;
+ Typeface tf = getTypeface(fontName);
+ SingleByteFont singleByteFont = null;
+ if (tf instanceof SingleByteFont) {
+ singleByteFont = (SingleByteFont)tf;
+ }
int l = s.length();
-
- float fontSize = fs.getFontSize() / 1000f;
- boolean startPending = true;
- for (int i = 0; i < l; i++) {
+
+ for (int i = start; i < end; i++) {
char orgChar = s.charAt(i);
char ch;
float glyphAdjust = 0;
- if (fs.hasChar(orgChar)) {
- ch = fs.mapChar(orgChar);
+ if (font.hasChar(orgChar)) {
+ ch = font.mapChar(orgChar);
+ if (singleByteFont != null && singleByteFont.hasAdditionalEncodings()) {
+ int encoding = ch / 256;
+ if (encoding == 0) {
+ textutil.updateTf(fontName, fontSize, tf.isMultiByte());
+ } else {
+ textutil.updateTf(fontName + "_" + Integer.toString(encoding),
+ fontSize, tf.isMultiByte());
+ ch = (char)(ch % 256);
+ }
+ }
int tls = (i < l - 1 ? parentArea.getTextLetterSpaceAdjust() : 0);
glyphAdjust -= tls;
} else {
if (CharUtilities.isFixedWidthSpace(orgChar)) {
//Fixed width space are rendered as spaces so copy/paste works in a reader
- ch = fs.mapChar(CharUtilities.SPACE);
- glyphAdjust = fs.getCharWidth(ch) - fs.getCharWidth(orgChar);
+ ch = font.mapChar(CharUtilities.SPACE);
+ glyphAdjust = font.getCharWidth(ch) - font.getCharWidth(orgChar);
} else {
- ch = fs.mapChar(orgChar);
+ ch = font.mapChar(orgChar);
}
}
if (letterAdjust != null && i < l - 1) {
glyphAdjust -= letterAdjust[i + 1];
}
- if (startPending) {
- pdf.append(startText);
- startPending = false;
- }
- if (!useMultiByte) {
- if (ch < 32 || ch > 127) {
- pdf.append("\\");
- pdf.append(Integer.toOctalString((int) ch));
- } else {
- switch (ch) {
- case '(':
- case ')':
- case '\\':
- pdf.append("\\");
- break;
- default:
- }
- pdf.append(ch);
- }
- } else {
- pdf.append(PDFText.toUnicodeHex(ch));
- }
+ textutil.writeTJMappedChar(ch);
float adjust = glyphAdjust / fontSize;
if (adjust != 0) {
- pdf.append(endText).append(format(adjust)).append(' ');
- startPending = true;
+ textutil.adjustGlyphTJ(adjust);
}
}
- if (!startPending) {
- pdf.append(endText);
- }
- }
-
- /**
- * Checks to see if we have some text rendering commands open
- * still and writes out the TJ command to the stream if we do
- */
- protected void closeText() {
- /*
- if (textOpen) {
- currentStream.add("] TJ\n");
- textOpen = false;
- prevWordX = 0;
- prevWordY = 0;
- currentFontName = "";
- }*/
}
/**
@@ -1623,8 +1566,6 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
protected void setColor(Color col, boolean fill, StringBuffer pdf) {
PDFColor color = new PDFColor(this.pdfDoc, col);
- closeText();
-
if (pdf != null) {
pdf.append(color.getColorSpaceOut(fill));
} else {
@@ -1656,22 +1597,10 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
}
/** {@inheritDoc} */
- protected void updateColor(Color col, boolean fill) {
+ protected void updateColor(Color col, boolean fill) {
updateColor(col, fill, null);
}
- private void updateFont(String name, int size, StringBuffer pdf) {
- if ((!name.equals(this.currentFontName))
- || (size != this.currentFontSize)) {
- closeText();
-
- this.currentFontName = name;
- this.currentFontSize = size;
- pdf = pdf.append("/" + name + " " + format((float) size / 1000f)
- + " Tf\n");
- }
- }
-
/** {@inheritDoc} */
public void renderImage(Image image, Rectangle2D pos) {
endTextObject();
@@ -1727,8 +1656,6 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
ImageSessionContext sessionContext = getUserAgent().getImageSessionContext();
info = manager.getImageInfo(uri, sessionContext);
-
-
Map hints = ImageUtil.getDefaultHints(sessionContext);
org.apache.xmlgraphics.image.loader.Image img = manager.getImage(
info, imageHandlerRegistry.getSupportedFlavors(), hints, sessionContext);
@@ -1803,9 +1730,8 @@ public class PDFRenderer extends AbstractPathOrientedRenderer {
context.setProperty(PDFRendererContextConstants.PDF_CONTEXT, currentContext);
context.setProperty(PDFRendererContextConstants.PDF_STREAM, currentStream);
context.setProperty(PDFRendererContextConstants.PDF_FONT_INFO, fontInfo);
- context.setProperty(PDFRendererContextConstants.PDF_FONT_NAME, currentFontName);
- context.setProperty(PDFRendererContextConstants.PDF_FONT_SIZE,
- new Integer(currentFontSize));
+ context.setProperty(PDFRendererContextConstants.PDF_FONT_NAME, "");
+ context.setProperty(PDFRendererContextConstants.PDF_FONT_SIZE, new Integer(0));
return context;
}
diff --git a/src/java/org/apache/fop/render/ps/PSFontUtils.java b/src/java/org/apache/fop/render/ps/PSFontUtils.java
index bbc811b4e..1566ef799 100644
--- a/src/java/org/apache/fop/render/ps/PSFontUtils.java
+++ b/src/java/org/apache/fop/render/ps/PSFontUtils.java
@@ -32,16 +32,20 @@ import javax.xml.transform.stream.StreamSource;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.apache.xmlgraphics.fonts.Glyphs;
import org.apache.xmlgraphics.ps.DSCConstants;
import org.apache.xmlgraphics.ps.PSGenerator;
import org.apache.xmlgraphics.ps.PSResource;
import org.apache.xmlgraphics.ps.dsc.ResourceTracker;
+import org.apache.fop.fonts.Base14Font;
import org.apache.fop.fonts.CustomFont;
import org.apache.fop.fonts.Font;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontType;
import org.apache.fop.fonts.LazyFont;
+import org.apache.fop.fonts.SingleByteEncoding;
+import org.apache.fop.fonts.SingleByteFont;
import org.apache.fop.fonts.Typeface;
/**
@@ -81,9 +85,21 @@ public class PSFontUtils extends org.apache.xmlgraphics.ps.PSFontUtils {
while (iter.hasNext()) {
String key = (String)iter.next();
Typeface tf = getTypeFace(fontInfo, fonts, key);
- PSResource fontRes = new PSResource("font", tf.getFontName());
+ PSResource fontRes = new PSResource(PSResource.TYPE_FONT, tf.getFontName());
fontResources.put(key, fontRes);
embedFont(gen, tf, fontRes);
+
+ if (tf instanceof SingleByteFont) {
+ SingleByteFont sbf = (SingleByteFont)tf;
+ for (int i = 0, c = sbf.getAdditionalEncodingCount(); i < c; i++) {
+ SingleByteEncoding encoding = sbf.getAdditionalEncoding(i);
+ defineEncoding(gen, encoding);
+ String postFix = "_" + (i + 1);
+ PSResource derivedFontRes = defineDerivedFont(gen, tf.getFontName(),
+ tf.getFontName() + postFix, encoding.getName());
+ fontResources.put(key + postFix, derivedFontRes);
+ }
+ }
}
gen.commentln("%FOPEndFontDict");
reencodeFonts(gen, fonts);
@@ -91,29 +107,35 @@ public class PSFontUtils extends org.apache.xmlgraphics.ps.PSFontUtils {
}
private static void reencodeFonts(PSGenerator gen, Map fonts) throws IOException {
+ ResourceTracker tracker = gen.getResourceTracker();
+
+ if (!tracker.isResourceSupplied(WINANSI_ENCODING_RESOURCE)) {
+ defineWinAnsiEncoding(gen);
+ }
gen.commentln("%FOPBeginFontReencode");
- defineWinAnsiEncoding(gen);
//Rewrite font encodings
Iterator iter = fonts.keySet().iterator();
while (iter.hasNext()) {
String key = (String)iter.next();
- Typeface fm = (Typeface)fonts.get(key);
- if (fm instanceof LazyFont && ((LazyFont)fm).getRealFont() == null) {
- continue;
- } else if (null == fm.getEncoding()) {
+ Typeface tf = (Typeface)fonts.get(key);
+ if (tf instanceof LazyFont) {
+ tf = ((LazyFont)tf).getRealFont();
+ if (tf == null) {
+ continue;
+ }
+ }
+ if (null == tf.getEncodingName()) {
//ignore (ZapfDingbats and Symbol used to run through here, kept for safety reasons)
- } else if ("SymbolEncoding".equals(fm.getEncoding())) {
+ } else if ("SymbolEncoding".equals(tf.getEncodingName())) {
//ignore (no encoding redefinition)
- } else if ("ZapfDingbatsEncoding".equals(fm.getEncoding())) {
+ } else if ("ZapfDingbatsEncoding".equals(tf.getEncodingName())) {
//ignore (no encoding redefinition)
- } else if ("WinAnsiEncoding".equals(fm.getEncoding())) {
- redefineFontEncoding(gen, fm.getFontName(), fm.getEncoding());
} else {
- /* Don't complain anymore, just use the font's default encoding.
- gen.commentln("%WARNING: Only WinAnsiEncoding is supported. Font '"
- + fm.getFontName() + "' asks for: " + fm.getEncoding());
- */
+ if (tf instanceof Base14Font) {
+ //Our Base 14 fonts don't use the default encoding
+ redefineFontEncoding(gen, tf.getFontName(), tf.getEncodingName());
+ }
}
}
gen.commentln("%FOPEndFontReencode");
@@ -233,10 +255,88 @@ public class PSFontUtils extends org.apache.xmlgraphics.ps.PSFontUtils {
if (isEmbeddable(cf)) {
resTracker.registerSuppliedResource(fontRes);
}
+ if (tf instanceof SingleByteFont) {
+ SingleByteFont sbf = (SingleByteFont)tf;
+ for (int i = 0, c = sbf.getAdditionalEncodingCount(); i < c; i++) {
+ SingleByteEncoding encoding = sbf.getAdditionalEncoding(i);
+ PSResource encodingRes = new PSResource(
+ PSResource.TYPE_ENCODING, encoding.getName());
+ resTracker.registerSuppliedResource(encodingRes);
+ PSResource derivedFontRes = new PSResource(
+ PSResource.TYPE_FONT, tf.getFontName() + "_" + (i + 1));
+ resTracker.registerSuppliedResource(derivedFontRes);
+ }
+ }
}
}
}
return fontResources;
}
+ /**
+ * Defines the single-byte encoding for use in PostScript files.
+ * @param gen the PostScript generator
+ * @param encoding the single-byte encoding
+ * @return the PSResource instance that represents the encoding
+ * @throws IOException In case of an I/O problem
+ */
+ public static PSResource defineEncoding(PSGenerator gen, SingleByteEncoding encoding)
+ throws IOException {
+ PSResource res = new PSResource(PSResource.TYPE_ENCODING, encoding.getName());
+ gen.writeDSCComment(DSCConstants.BEGIN_RESOURCE, res);
+ gen.writeln("/" + encoding.getName() + " [");
+ String[] charNames = encoding.getCharNameMap();
+ for (int i = 0; i < 256; i++) {
+ if (i > 0) {
+ if ((i % 5) == 0) {
+ gen.newLine();
+ } else {
+ gen.write(" ");
+ }
+ }
+ String glyphname = null;
+ if (i < charNames.length) {
+ glyphname = charNames[i];
+ }
+ if (glyphname == null || "".equals(glyphname)) {
+ glyphname = Glyphs.NOTDEF;
+ }
+ gen.write("/");
+ gen.write(glyphname);
+ }
+ gen.newLine();
+ gen.writeln("] def");
+ gen.writeDSCComment(DSCConstants.END_RESOURCE);
+ gen.getResourceTracker().registerSuppliedResource(res);
+ return res;
+ }
+
+ /**
+ * Derives a new font based on an existing font with a given encoding. The encoding must
+ * have been registered before.
+ * @param gen the PostScript generator
+ * @param baseFontName the font name of the font to derive from
+ * @param fontName the font name of the new font to be define
+ * @param encoding the new encoding (must be predefined in the PS file)
+ * @return the PSResource representing the derived font
+ * @throws IOException In case of an I/O problem
+ */
+ public static PSResource defineDerivedFont(PSGenerator gen, String baseFontName, String fontName,
+ String encoding) throws IOException {
+ PSResource res = new PSResource(PSResource.TYPE_FONT, fontName);
+ gen.writeDSCComment(DSCConstants.BEGIN_RESOURCE, res);
+ gen.commentln("%XGCDependencies: font " + baseFontName);
+ gen.commentln("%XGC+ encoding " + encoding);
+ gen.writeln("/" + baseFontName + " findfont");
+ gen.writeln("dup length dict begin");
+ gen.writeln(" {1 index /FID ne {def} {pop pop} ifelse} forall");
+ gen.writeln(" /Encoding " + encoding + " def");
+ gen.writeln(" currentdict");
+ gen.writeln("end");
+ gen.writeln("/" + fontName + " exch definefont pop");
+ gen.writeDSCComment(DSCConstants.END_RESOURCE);
+ gen.getResourceTracker().registerSuppliedResource(res);
+ return res;
+ }
+
}
diff --git a/src/java/org/apache/fop/render/ps/PSImageUtils.java b/src/java/org/apache/fop/render/ps/PSImageUtils.java
deleted file mode 100644
index 004d5a22a..000000000
--- a/src/java/org/apache/fop/render/ps/PSImageUtils.java
+++ /dev/null
@@ -1,73 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.render.ps;
-
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.xmlgraphics.ps.PSGenerator;
-
-import org.apache.fop.image.EPSImage;
-import org.apache.fop.image.FopImage;
-
-/**
- * Utility code for rendering images in PostScript.
- */
-public class PSImageUtils extends org.apache.xmlgraphics.ps.PSImageUtils {
-
- /** logging instance */
- protected static Log log = LogFactory.getLog(PSImageUtils.class);
-
- /**
- * Renders an EPS image to PostScript.
- * @param img EPS image to render
- * @param x x position
- * @param y y position
- * @param w width
- * @param h height
- * @param gen PS generator
- * @deprecated Use {@link #renderEPS(java.io.InputStream, String, java.awt.geom.Rectangle2D,
- * java.awt.geom.Rectangle2D, PSGenerator)} instead
- */
- public static void renderEPS(EPSImage img,
- float x, float y, float w, float h,
- PSGenerator gen) {
- try {
- if (!img.load(FopImage.ORIGINAL_DATA)) {
- gen.commentln("%EPS image could not be processed: " + img);
- return;
- }
- int[] bbox = img.getBBox();
- int bboxw = bbox[2] - bbox[0];
- int bboxh = bbox[3] - bbox[1];
- String name = img.getDocName();
- if (name == null || name.length() == 0) {
- name = img.getOriginalURI();
- }
- renderEPS(img.getEPSImage(), name,
- x, y, w, h,
- bbox[0], bbox[1], bboxw, bboxh, gen);
-
- } catch (Exception e) {
- log.error("PSRenderer.renderImageArea(): Error rendering bitmap ("
- + e.getMessage() + ")", e);
- }
- }
-
-}
diff --git a/src/java/org/apache/fop/render/ps/PSRenderer.java b/src/java/org/apache/fop/render/ps/PSRenderer.java
index ecd403749..7e32977e6 100644
--- a/src/java/org/apache/fop/render/ps/PSRenderer.java
+++ b/src/java/org/apache/fop/render/ps/PSRenderer.java
@@ -89,6 +89,7 @@ import org.apache.fop.fo.Constants;
import org.apache.fop.fo.extensions.ExtensionAttachment;
import org.apache.fop.fonts.Font;
import org.apache.fop.fonts.LazyFont;
+import org.apache.fop.fonts.SingleByteFont;
import org.apache.fop.fonts.Typeface;
import org.apache.fop.render.AbstractPathOrientedRenderer;
import org.apache.fop.render.Graphics2DAdapter;
@@ -660,6 +661,12 @@ public class PSRenderer extends AbstractPathOrientedRenderer
}
private String getPostScriptNameForFontKey(String key) {
+ int pos = key.indexOf('_');
+ String postFix = null;
+ if (pos > 0) {
+ postFix = key.substring(pos);
+ key = key.substring(0, pos);
+ }
Map fonts = fontInfo.getFonts();
Typeface tf = (Typeface)fonts.get(key);
if (tf instanceof LazyFont) {
@@ -668,7 +675,11 @@ public class PSRenderer extends AbstractPathOrientedRenderer
if (tf == null) {
throw new IllegalStateException("Font not available: " + key);
}
- return tf.getFontName();
+ if (postFix == null) {
+ return tf.getFontName();
+ } else {
+ return tf.getFontName() + postFix;
+ }
}
/**
@@ -698,7 +709,6 @@ public class PSRenderer extends AbstractPathOrientedRenderer
protected void useFont(String key, int size) {
try {
PSResource res = getPSResourceForFontKey(key);
- //gen.useFont(key, size / 1000f);
gen.useFont("/" + res.getName(), size / 1000f);
gen.getResourceTracker().notifyResourceUsageOnPage(res);
} catch (IOException ioe) {
@@ -951,7 +961,7 @@ public class PSRenderer extends AbstractPathOrientedRenderer
if (!isOptimizeResources()) {
this.fontResources = PSFontUtils.writeFontDict(gen, fontInfo);
} else {
- gen.commentln("%FOPFontSetup");
+ gen.commentln("%FOPFontSetup"); //Place-holder, will be replaced in the second pass
}
gen.writeDSCComment(DSCConstants.END_SETUP);
}
@@ -1292,17 +1302,16 @@ public class PSRenderer extends AbstractPathOrientedRenderer
*/
public void renderText(TextArea area) {
renderInlineAreaBackAndBorders(area);
- String fontname = getInternalFontNameForArea(area);
+ String fontkey = getInternalFontNameForArea(area);
int fontsize = area.getTraitAsInteger(Trait.FONT_SIZE);
// This assumes that *all* CIDFonts use a /ToUnicode mapping
- Typeface tf = (Typeface) fontInfo.getFonts().get(fontname);
+ Typeface tf = (Typeface) fontInfo.getFonts().get(fontkey);
//Determine position
int rx = currentIPPosition + area.getBorderAndPaddingWidthStart();
int bl = currentBPPosition + area.getOffset() + area.getBaselineOffset();
- useFont(fontname, fontsize);
Color ct = (Color)area.getTrait(Trait.COLOR);
if (ct != null) {
try {
@@ -1347,30 +1356,75 @@ public class PSRenderer extends AbstractPathOrientedRenderer
super.renderSpace(space);
}
+ private Typeface getTypeface(String fontName) {
+ Typeface tf = (Typeface)fontInfo.getFonts().get(fontName);
+ if (tf instanceof LazyFont) {
+ tf = ((LazyFont)tf).getRealFont();
+ }
+ return tf;
+ }
+
private void renderText(AbstractTextArea area, String text, int[] letterAdjust) {
+ String fontkey = getInternalFontNameForArea(area);
+ int fontSize = area.getTraitAsInteger(Trait.FONT_SIZE);
Font font = getFontFromArea(area);
- Typeface tf = (Typeface) fontInfo.getFonts().get(font.getFontName());
+ Typeface tf = getTypeface(font.getFontName());
+ SingleByteFont singleByteFont = null;
+ if (tf instanceof SingleByteFont) {
+ singleByteFont = (SingleByteFont)tf;
+ }
+ int textLen = text.length();
+ if (singleByteFont != null && singleByteFont.hasAdditionalEncodings()) {
+ int start = 0;
+ int currentEncoding = -1;
+ for (int i = 0; i < textLen; i++) {
+ char c = text.charAt(i);
+ char mapped = tf.mapChar(c);
+ int encoding = mapped / 256;
+ if (currentEncoding != encoding) {
+ if (i > 0) {
+ writeText(area, text, start, i - start, letterAdjust, fontSize, tf);
+ }
+ if (encoding == 0) {
+ useFont(fontkey, fontSize);
+ } else {
+ useFont(fontkey + "_" + Integer.toString(encoding), fontSize);
+ }
+ currentEncoding = encoding;
+ start = i;
+ }
+ }
+ writeText(area, text, start, textLen - start, letterAdjust, fontSize, tf);
+ } else {
+ useFont(fontkey, fontSize);
+ writeText(area, text, 0, textLen, letterAdjust, fontSize, tf);
+ }
+ }
+
+ private void writeText(AbstractTextArea area, String text, int start, int len,
+ int[] letterAdjust, int fontsize, Typeface tf) {
+ int end = start + len;
int initialSize = text.length();
initialSize += initialSize / 2;
StringBuffer sb = new StringBuffer(initialSize);
- int textLen = text.length();
if (letterAdjust == null
&& area.getTextLetterSpaceAdjust() == 0
&& area.getTextWordSpaceAdjust() == 0) {
sb.append("(");
- for (int i = 0; i < textLen; i++) {
+ for (int i = start; i < end; i++) {
final char c = text.charAt(i);
- final char mapped = tf.mapChar(c);
+ final char mapped = (char)(tf.mapChar(c) % 256);
PSGenerator.escapeChar(mapped, sb);
}
sb.append(") t");
} else {
sb.append("(");
- int[] offsets = new int[textLen];
- for (int i = 0; i < textLen; i++) {
+ int[] offsets = new int[len];
+ for (int i = start; i < end; i++) {
final char c = text.charAt(i);
final char mapped = tf.mapChar(c);
+ char codepoint = (char)(mapped % 256);
int wordSpace;
if (CharUtilities.isAdjustableSpace(mapped)) {
@@ -1378,14 +1432,14 @@ public class PSRenderer extends AbstractPathOrientedRenderer
} else {
wordSpace = 0;
}
- int cw = tf.getWidth(mapped, font.getFontSize()) / 1000;
- int ladj = (letterAdjust != null && i < textLen - 1 ? letterAdjust[i + 1] : 0);
- int tls = (i < textLen - 1 ? area.getTextLetterSpaceAdjust() : 0);
- offsets[i] = cw + ladj + tls + wordSpace;
- PSGenerator.escapeChar(mapped, sb);
+ int cw = tf.getWidth(mapped, fontsize) / 1000;
+ int ladj = (letterAdjust != null && i < end - 1 ? letterAdjust[i + 1] : 0);
+ int tls = (i < end - 1 ? area.getTextLetterSpaceAdjust() : 0);
+ offsets[i - start] = cw + ladj + tls + wordSpace;
+ PSGenerator.escapeChar(codepoint, sb);
}
sb.append(")" + PSGenerator.LF + "[");
- for (int i = 0; i < textLen; i++) {
+ for (int i = 0; i < len; i++) {
if (i > 0) {
if (i % 8 == 0) {
sb.append(PSGenerator.LF);
@@ -1398,7 +1452,6 @@ public class PSRenderer extends AbstractPathOrientedRenderer
sb.append("]" + PSGenerator.LF + "xshow");
}
writeln(sb.toString());
-
}
/** {@inheritDoc} */
diff --git a/src/java/org/apache/fop/render/rtf/SVGConverter.java b/src/java/org/apache/fop/render/rtf/SVGConverter.java
deleted file mode 100644
index 11ba8dc82..000000000
--- a/src/java/org/apache/fop/render/rtf/SVGConverter.java
+++ /dev/null
@@ -1,70 +0,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.
- */
-
-/* $Id$ */
-
-package org.apache.fop.render.rtf;
-
-import org.apache.batik.transcoder.TranscoderException;
-import org.apache.batik.transcoder.TranscoderInput;
-import org.apache.batik.transcoder.TranscoderOutput;
-import org.apache.batik.transcoder.image.JPEGTranscoder;
-import org.apache.commons.io.output.ByteArrayOutputStream;
-import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
-import org.apache.fop.image.XMLImage;
-
-/**
- * Helper class for converting SVG to bitmap images.
- */
-public final class SVGConverter {
-
- /** logger instance */
- private static Log log = LogFactory.getLog(SVGConverter.class);
-
- /**
- * Constructor is private, because it's just a utility class.
- */
- private SVGConverter() {
- }
-
- /**
- * Converts a SVG image to a JPEG bitmap.
- * @param image the SVG image
- * @return a byte array containing the JPEG image
- */
- public static byte[] convertToJPEG(XMLImage image) {
- JPEGTranscoder transcoder = new JPEGTranscoder();
- /* TODO Disabled to avoid side-effect due to the mixing of source and target resolutions
- * This should be reenabled when it has been determined how exactly to handle this
- transcoder.addTranscodingHint(ImageTranscoder.KEY_PIXEL_UNIT_TO_MILLIMETER,
- new Float(25.4f / 300)); //300dpi should be enough for now.
- */
- transcoder.addTranscodingHint(JPEGTranscoder.KEY_QUALITY, new Float(0.9f));
- TranscoderInput input = new TranscoderInput(image.getDocument());
- ByteArrayOutputStream baout = new ByteArrayOutputStream(16384);
- TranscoderOutput output = new TranscoderOutput(baout);
- try {
- transcoder.transcode(input, output);
- return baout.toByteArray();
- } catch (TranscoderException e) {
- log.error(e);
- return null;
- }
- }
-
-}
diff --git a/src/java-1.4/org/apache/fop/svg/GraphicsConfiguration.java b/src/java/org/apache/fop/svg/GraphicsConfiguration.java
index a92baed27..a92baed27 100644
--- a/src/java-1.4/org/apache/fop/svg/GraphicsConfiguration.java
+++ b/src/java/org/apache/fop/svg/GraphicsConfiguration.java
diff --git a/src/java/org/apache/fop/svg/PDFGraphics2D.java b/src/java/org/apache/fop/svg/PDFGraphics2D.java
index 864809ebe..f6a7cbc3b 100644
--- a/src/java/org/apache/fop/svg/PDFGraphics2D.java
+++ b/src/java/org/apache/fop/svg/PDFGraphics2D.java
@@ -70,12 +70,10 @@ import org.apache.xmlgraphics.image.loader.impl.ImageRendered;
import org.apache.xmlgraphics.java2d.AbstractGraphics2D;
import org.apache.xmlgraphics.java2d.GraphicContext;
-import org.apache.fop.fonts.CIDFont;
import org.apache.fop.fonts.Font;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontSetup;
import org.apache.fop.fonts.FontTriplet;
-import org.apache.fop.fonts.LazyFont;
import org.apache.fop.pdf.BitmapImage;
import org.apache.fop.pdf.PDFAnnotList;
import org.apache.fop.pdf.PDFColor;
@@ -1473,14 +1471,7 @@ public class PDFGraphics2D extends AbstractGraphics2D {
// This assumes that *all* CIDFonts use a /ToUnicode mapping
org.apache.fop.fonts.Typeface f
= (org.apache.fop.fonts.Typeface)fontInfo.getFonts().get(name);
- if (f instanceof LazyFont) {
- if (((LazyFont) f).getRealFont() instanceof CIDFont) {
- return true;
- }
- } else if (f instanceof CIDFont) {
- return true;
- }
- return false;
+ return f.isMultiByte();
}
private void addKerning(StringWriter buf, Integer ch1, Integer ch2,
diff --git a/src/java/org/apache/fop/svg/PDFTextPainter.java b/src/java/org/apache/fop/svg/PDFTextPainter.java
index 7154c68a9..754b0794b 100644
--- a/src/java/org/apache/fop/svg/PDFTextPainter.java
+++ b/src/java/org/apache/fop/svg/PDFTextPainter.java
@@ -43,6 +43,7 @@ import org.apache.batik.gvt.renderer.StrokingTextPainter;
import org.apache.batik.gvt.text.GVTAttributedCharacterIterator;
import org.apache.batik.gvt.text.TextPaintInfo;
import org.apache.batik.gvt.text.TextSpanLayout;
+
import org.apache.fop.fonts.Font;
import org.apache.fop.fonts.FontInfo;
import org.apache.fop.fonts.FontTriplet;
@@ -83,8 +84,12 @@ public class PDFTextPainter extends StrokingTextPainter {
super.paintTextRuns(textRuns, g2d);
return;
}
- PDFGraphics2D pdf = (PDFGraphics2D)g2d;
- PDFTextUtil textUtil = new PDFTextUtil(pdf);
+ final PDFGraphics2D pdf = (PDFGraphics2D)g2d;
+ PDFTextUtil textUtil = new PDFTextUtil(pdf.fontInfo) {
+ protected void write(String code) {
+ pdf.currentStream.write(code);
+ }
+ };
for (int i = 0; i < textRuns.size(); i++) {
TextRun textRun = (TextRun)textRuns.get(i);
AttributedCharacterIterator runaci = textRun.getACI();
@@ -134,7 +139,7 @@ public class PDFTextPainter extends StrokingTextPainter {
}
textUtil.saveGraphicsState();
- textUtil.concatMatrixCurrentTransform();
+ textUtil.concatMatrix(g2d.getTransform());
Shape imclip = g2d.getClip();
pdf.writeClip(imclip);
diff --git a/src/java/org/apache/fop/svg/PDFTextUtil.java b/src/java/org/apache/fop/svg/PDFTextUtil.java
index 0fb552026..f3c7f31a2 100644
--- a/src/java/org/apache/fop/svg/PDFTextUtil.java
+++ b/src/java/org/apache/fop/svg/PDFTextUtil.java
@@ -19,145 +19,33 @@
package org.apache.fop.svg;
-import java.awt.geom.AffineTransform;
-
import org.apache.fop.fonts.Font;
-import org.apache.fop.pdf.PDFNumber;
-import org.apache.fop.pdf.PDFText;
+import org.apache.fop.fonts.FontInfo;
+import org.apache.fop.fonts.Typeface;
/**
- * Utility class for generating PDF text objects.
+ * Utility class for generating PDF text objects. It needs to be subclassed to add writing
+ * functionality (see {@link #write(String)}).
*/
-public class PDFTextUtil {
+public abstract class PDFTextUtil extends org.apache.fop.pdf.PDFTextUtil {
- /** The number of decimal places. */
- private static final int DEC = 8;
-
- /** PDF text rendering mode: Fill text */
- public static final int TR_FILL = 0;
- /** PDF text rendering mode: Stroke text */
- public static final int TR_STROKE = 1;
- /** PDF text rendering mode: Fill, then stroke text */
- public static final int TR_FILL_STROKE = 2;
- /** PDF text rendering mode: Neither fill nor stroke text (invisible) */
- public static final int TR_INVISIBLE = 3;
- /** PDF text rendering mode: Fill text and add to path for clipping */
- public static final int TR_FILL_CLIP = 4;
- /** PDF text rendering mode: Stroke text and add to path for clipping */
- public static final int TR_STROKE_CLIP = 5;
- /** PDF text rendering mode: Fill, then stroke text and add to path for clipping */
- public static final int TR_FILL_STROKE_CLIP = 6;
- /** PDF text rendering mode: Add text to path for clipping */
- public static final int TR_CLIP = 7;
-
-
- private PDFGraphics2D g2d;
- private boolean inTextObject = false;
+ private FontInfo fontInfo;
private Font[] fonts;
private Font font;
- private String startText;
- private String endText;
- private boolean useMultiByte;
- private StringBuffer bufTJ;
- private int textRenderingMode = 0;
/**
* Main constructor.
- * @param g2d the PDFGraphics2D instance to work with
+ * @param fontInfo the font catalog
*/
- public PDFTextUtil(PDFGraphics2D g2d) {
- this.g2d = g2d;
+ public PDFTextUtil(FontInfo fontInfo) {
+ super();
+ this.fontInfo = fontInfo;
}
- private void writeAffineTransform(AffineTransform at, StringBuffer sb) {
- double[] lt = new double[6];
- at.getMatrix(lt);
- sb.append(PDFNumber.doubleOut(lt[0], DEC)).append(" ");
- sb.append(PDFNumber.doubleOut(lt[1], DEC)).append(" ");
- sb.append(PDFNumber.doubleOut(lt[2], DEC)).append(" ");
- sb.append(PDFNumber.doubleOut(lt[3], DEC)).append(" ");
- sb.append(PDFNumber.doubleOut(lt[4], DEC)).append(" ");
- sb.append(PDFNumber.doubleOut(lt[5], DEC));
- }
-
- private void writeChar(char ch, StringBuffer sb) {
- if (!useMultiByte) {
- if (ch > 127) {
- sb.append("\\").append(Integer.toOctalString((int)ch));
- } else {
- switch (ch) {
- case '(':
- case ')':
- case '\\':
- sb.append("\\");
- break;
- default:
- }
- sb.append(ch);
- }
- } else {
- sb.append(PDFText.toUnicodeHex(ch));
- }
- }
-
- private void checkInTextObject() {
- if (!inTextObject) {
- throw new IllegalStateException("Not in text object");
- }
- }
-
- /**
- * Called when a new text object should be started. Be sure to call setFont() before
- * issuing any text painting commands.
- */
- public void beginTextObject() {
- if (inTextObject) {
- throw new IllegalStateException("Already in text object");
- }
- g2d.currentStream.write("BT\n");
- this.inTextObject = true;
- }
-
- /**
- * Called when a text object should be ended.
- */
- public void endTextObject() {
- checkInTextObject();
- g2d.currentStream.write("ET\n");
- this.inTextObject = false;
- initValues();
- }
-
- private void initValues() {
+ /** {@inheritDoc} */
+ protected void initValues() {
+ super.initValues();
this.font = null;
- this.textRenderingMode = TR_FILL;
- }
-
- /**
- * Creates a "q" command, pushing a copy of the entire graphics state onto the stack.
- */
- public void saveGraphicsState() {
- g2d.currentStream.write("q\n");
- }
-
- /**
- * Creates a "Q" command, restoring the entire graphics state to its former value by popping
- * it from the stack.
- */
- public void restoreGraphicsState() {
- g2d.currentStream.write("Q\n");
- }
-
- /**
- * Creates a "cm" command using the current transformation as the matrix.
- */
- public void concatMatrixCurrentTransform() {
- StringBuffer sb = new StringBuffer();
- if (!g2d.getTransform().isIdentity()) {
- writeAffineTransform(g2d.getTransform(), sb);
- sb.append(" cm\n");
- }
- g2d.currentStream.write(sb.toString());
}
/**
@@ -194,63 +82,23 @@ public class PDFTextUtil {
}
/**
+ * Determines whether the font with the given name is a multi-byte font.
+ * @param name the name of the font
+ * @return true if it's a multi-byte font
+ */
+ protected boolean isMultiByteFont(String name) {
+ Typeface f = (Typeface)fontInfo.getFonts().get(name);
+ return f.isMultiByte();
+ }
+
+ /**
* Writes a "Tf" command, setting a new current font.
* @param f the font to select
*/
public void writeTf(Font f) {
- checkInTextObject();
String fontName = f.getFontName();
float fontSize = (float)f.getFontSize() / 1000f;
- g2d.currentStream.write("/" + fontName + " " + PDFNumber.doubleOut(fontSize) + " Tf\n");
-
- this.useMultiByte = g2d.isMultiByteFont(fontName);
- this.startText = useMultiByte ? "<" : "(";
- this.endText = useMultiByte ? ">" : ")";
- }
-
- /**
- * Sets the text rendering mode.
- * @param mode the rendering mode (value 0 to 7, see PDF Spec, constants: TR_*)
- */
- public void setTextRenderingMode(int mode) {
- if (mode < 0 || mode > 7) {
- throw new IllegalArgumentException(
- "Illegal value for text rendering mode. Expected: 0-7");
- }
- if (mode != this.textRenderingMode) {
- this.textRenderingMode = mode;
- g2d.currentStream.write(this.textRenderingMode + " Tr\n");
- }
- }
-
- /**
- * Sets the text rendering mode.
- * @param fill true if the text should be filled
- * @param stroke true if the text should be stroked
- * @param addToClip true if the path should be added for clipping
- */
- public void setTextRenderingMode(boolean fill, boolean stroke, boolean addToClip) {
- int mode;
- if (fill) {
- mode = (stroke ? 2 : 0);
- } else {
- mode = (stroke ? 1 : 3);
- }
- if (addToClip) {
- mode += 4;
- }
- setTextRenderingMode(mode);
- }
-
- /**
- * Writes a "Tm" command, setting a new text transformation matrix.
- * @param localTransform the new text transformation matrix
- */
- public void writeTextMatrix(AffineTransform localTransform) {
- StringBuffer sb = new StringBuffer();
- writeAffineTransform(localTransform, sb);
- sb.append(" Tm\n");
- g2d.currentStream.write(sb.toString());
+ updateTf(fontName, fontSize, isMultiByteFont(fontName));
}
/**
@@ -272,37 +120,8 @@ public class PDFTextUtil {
* @param ch the unmapped character
*/
public void writeTJChar(char ch) {
- if (bufTJ == null) {
- bufTJ = new StringBuffer();
- }
- if (bufTJ.length() == 0) {
- bufTJ.append("[").append(startText);
- }
char mappedChar = font.mapChar(ch);
- writeChar(mappedChar, bufTJ);
- }
-
- /**
- * Writes a glyph adjust value to the "TJ-Buffer".
- * @param adjust the glyph adjust value in thousands of text unit space.
- */
- public void adjustGlyphTJ(double adjust) {
- bufTJ.append(endText).append(" ");
- bufTJ.append(PDFNumber.doubleOut(adjust, DEC - 4));
- bufTJ.append(" ");
- bufTJ.append(startText);
- }
-
- /**
- * Writes a "TJ" command, writing out the accumulated buffer with the characters and glyph
- * positioning values. The buffer is reset afterwards.
- */
- public void writeTJ() {
- if (bufTJ != null && bufTJ.length() > 0) {
- bufTJ.append(endText).append("] TJ\n");
- g2d.currentStream.write(bufTJ.toString());
- bufTJ.setLength(0);
- }
+ writeTJMappedChar(mappedChar);
}
}
diff --git a/status.xml b/status.xml
index f618b0074..a008177c1 100644
--- a/status.xml
+++ b/status.xml
@@ -16,25 +16,159 @@
limitations under the License.
-->
<!-- $Id$ -->
+<!DOCTYPE status PUBLIC "-//APACHE//DTD Status V1.3//EN"
+ "http://forrest.apache.org/dtd/status-v13.dtd">
<status>
<developers>
- <!-- Maintained in src/documentation/content/xdocs/team.xml -->
+ <!-- In alphabetical order (last name) -->
+ <person name="Max Berger" email="mayberger@apache.org" id="MB"/>
+ <person name="Chris Bowditch" email="cbowditch@apache.org" id="CB"/>
+ <person name="Jay Bryant" email="jbryant@apache.org" id="JB"/>
+ <person name="Adrian Cumiskey" email="acumiskey@apache.org" id="AC"/>
+ <person name="Bertrand Delacrétaz" email="bdelacretaz@apache.org" id="BD"/>
+ <person name="Andreas Delmelle" email="adelmelle@apache.org" id="AD"/>
+ <person name="Luca Furini" email="lfurini@apache.org" id="LF"/>
+ <person name="Christian Geisert" email="chrisg@apache.org" id="CG"/>
+ <person name="Vincent Hennebert" email="vhennebert@apache.org" id="VH"/>
+ <person name="Clay Leeds" email="clay@apache.org" id="CL"/>
+ <person name="Manuel Mall" email="manuel@apache.org" id="MM"/>
+ <person name="Jeremias Märki" email="jeremias@apache.org" id="JM"/>
+ <person name="Simon Pepping" email="spepping@apache.org" id="SP"/>
+ <person name="the FOP committers" email="fop-dev@xmlgraphics.apache.org" id="all"/>
+ <person name="Volunteer needed" email="general@xmlgraphics.apache.org" id="open"/>
+ <!-- See also src/documentation/content/xdocs/team.xml -->
</developers>
- <todo>
- <!-- See Bugzilla and http://wiki.apache.org/xmlgraphics-fop/FOPProjectTasks -->
- </todo>
-
+ <contexts>
+ <context id="Docs" title="Changes to Documentation"/>
+ <context id="Code" title="Changes to the Code Base"/>
+ <context id="Layout" title="Changes to the Layout Engine"/>
+ <context id="Renderers" title="Changes to Renderers (Output Formats)"/>
+ <context id="Fonts" title="Changes to the Font Subsystem"/>
+ <context id="API" title="Changes to the End-User API"/>
+ <context id="Extensions" title="Changes to the Bundled Extensions"/>
+ <context id="Images" title="Changes to the Image Support"/>
+ </contexts>
+
<changes>
- <release version="FOP Trunk">
+ <release version="FOP Trunk" date="TBD">
+ <action context="Renderers" dev="AC" importance="high" type="add">
+ Added SVG support for AFP (GOCA).
+ </action>
+ <action context="Renderers" dev="AC" importance="high" type="add">
+ Added de-duplication and externalization support for IOCA and GOCA data resource objects.
+ </action>
+ <action context="Renderers" dev="JM" type="update">
+ When a JPEG image is embedded, an optionally embedded color profile is filtered out
+ as it's already embedded separately in the PDF file.
+ </action>
+ <action context="Renderers" dev="JM" type="fix">
+ Worked around a problem (PDF renderer) with JPEG image containing RGB color profiles which
+ are not sRGB. The images drifted into yellow. The color profile is simply disabled in this
+ case. Please let us know if you know what the problem could be.
+ </action>
+ <action context="Fonts" dev="JM" type="add">
+ Added support for addressing all glyphs available in a Type 1 font, not just the ones
+ in the font's primary encoding.
+ </action>
+ </release>
+ <release version="0.95beta" date="22 March 2008">
+ <notes>
+ <section>
+ <title>Notes</title>
+ <p>
+ Besides the important changes listed below, the most important areas with
+ improvements in this release are:
+ </p>
+ <ul>
+ <li>
+ Many bugfixes in tables, plus some new features (full support for keeps and
+ breaks, border conditionality, background on columns and header/footer/body)
+ </li>
+ <li>
+ Improvements and bugfixes for font handling and font
+ auto-detection/-registration.
+ </li>
+ <li>
+ Performance improvements and memory optimizations for the property handling
+ in the FO tree.
+ </li>
+ </ul>
+ <p>
+ Please note that with this release, we've dropped support for Java 1.3.
+ FOP will, from now on, <strong>require at least Java 1.4</strong>.
+ </p>
+ <p>
+ There have been a few changes in tables that make FOP both more strict and more
+ compliant to the Recommendation:
+ <ul>
+ <li>XSL-FO 1.1 explicitly states that a row-spanning fo:table-cell element is not
+ allowed to span further than its enclosing fo:table-header/footer/body element
+ (see bottom of <link href="http://www.w3.org/TR/xsl11/#fo_table">section
+ 6.7.3</link>). From now on FOP will give a validation error if a document
+ contains such an erroneous cell.
+ </li>
+ <li>
+ <p>If an fo:table element contains explicit fo:table-column children, then those
+ elements set the total number of columns in the table. This means that a
+ validation error will now occur if a row contains more cells than available
+ columns. This change allows to improve performance, since the rendering of the
+ table may start as soon as the table-column elements have been parsed.</p>
+ <p>If more flexibility is needed, then the fo:table-column elements may be just
+ omitted. The final number of columns will then be set by the row that has the
+ most cells.</p>
+ </li>
+ </ul>
+ </p>
+ <p>
+ The image libraries Jimi and JAI are no longer needed (and used) for image loading.
+ Instead we rely completely on the Image I/O API that has been introduced with
+ Java 1.4. If you still need support for bitmap image formats that do not work
+ out-of-the-box, we recommend adding
+ <link href="http://jai-imageio.dev.java.net/">JAI Image I/O Tools</link>
+ (an Image I/O compatible image codec package) to the classpath. JAI is still required
+ for building the FOP distribution but it is optional for normal builds and at run-time.
+ </p>
+ </section>
+ </notes>
+ <action context="Layout" dev="JM" type="fix" fixes-bug="44412">
+ Bugfix: The before border of a block is no longer swallowed if its first child issues
+ a break-before.
+ </action>
+ <action context="Layout" dev="JM" type="fix" fixes-bug="44412">
+ Bugfix: When there was a forced break after a block with (conditional) borders the
+ border-after wasn't painted.
+ </action>
+ <action context="Layout" dev="VH" type="fix">
+ Bugfix: a forced break inside a cell was ignored when occurring before the minimum height
+ set on the enclosing row was set.
+ </action>
+ <action context="Layout" dev="JM" type="fix">
+ Fixed exceptions when lists, tables or block-container are children of an inline-level
+ FO.
+ </action>
+ <action context="Layout" dev="VH" type="add" importance="high">
+ Added support for background on fo:table-column and fo:table-header/footer/body elements.
+ </action>
+ <action context="Layout" dev="VH" type="fix">
+ Fixed the rendering of the area of a table corresponding to border-separation, which must
+ be filled with the background of the table, and not the rows.
+ </action>
+ <action context="Layout" dev="VH" type="fix">
+ Improved conformance: even if a table-cell spans several rows its background must
+ correspond to the first row spanned.
+ </action>
+ <action context="Renderers" dev="JM" type="fix" due-to="Gordon Cooke">
+ Slight improvement for thin lines in Java2D/AWT output.
+ </action>
<action context="Layout" dev="VH" type="add">
Added full support for keep-with-previous on fo:table-row and in fo:table-cell elements.
</action>
<action context="Code" dev="MB" type="add">
Turned on XInclude processing for the main source given on the command line.
</action>
- <action context="Fonts" dev="JM" type="fix" fixed-bug="44451" due-to="Justus Piater">
+ <action context="Fonts" dev="JM" type="fix" fixes-bug="44451" due-to="Justus Piater">
Improved the font auto-detection so fonts accessed using the font-family name are
selected with higher accuracy.
</action>
@@ -64,7 +198,7 @@
Bugfix for date formatting with negative time zones in the PDF's Info object.
This affected PDF/A compliance.
</action>
- <action context="Fonts" dev="JM" type="add">
+ <action context="Renderers" dev="JM" type="add">
Added an option to disable the default sRGB profile in PDF output for those who
don't care about color fidelity, but care about PDF file size.
</action>
@@ -134,7 +268,7 @@
<action context="Renderers" dev="JM" type="add" fixes-bug="44176" due-to="Patrick Jaromin">
Added support for custom fonts in Java2DRenderer and derived renderers.
</action>
- <action context="Extensions" dev="JM" type="add">
+ <action context="Extensions" dev="JM" type="add" importance="high">
Added new extension element: fox:external-document. It allows to add whole documents
such as multi-page TIFF images to be inserted as peers to a page-sequence. Each image
will make up an entire page. See the documentation for details.
@@ -143,15 +277,12 @@
Added minimal support for the .minimum/.maximum components of block/inline-progression-dimension
on fo:external-graphic and fo:instream-foreign-object.
</action>
- <action context="Layout" dev="JM" type="add">
+ <action context="Layout" dev="JM" type="add" importance="high">
Added support for scale-down-to-fit and scale-up-to-fit (introduced in XSL 1.1).
</action>
<action context="Layout" dev="VH" type="fix" fixes-bug="43633">
Bugfix: content of a row with zero height overriding the previous row
</action>
- <action context="Renderers" dev="AC" importance="high" type="add">
- Added SVG support for AFP (GOCA).
- </action>
<action context="Renderers" dev="JM" type="fix" fixes-bug="37993">
Bugfix: allow multiple bookmarks to point at the same destination.
</action>
@@ -232,7 +363,7 @@
<action context="Layout" dev="AD" type="add">
Added support for fo:markers in fo:inline and fo:basic-link.
</action>
- <action context="Renderers" dev="JM" type="update">
+ <action context="Renderers" dev="JM" type="update" importance="high">
PDF Transcoder (SVG) text painting has been completely rewritten.
Except for some special cases (with filters for example), all text
(including flow text) is now painted using PDF text operators.
@@ -279,31 +410,21 @@
Added a configuration setting for the renderer/device resolution to the AFP renderer.
</action>
<action context="Layout" dev="AD" type="update">
- <p>
- Facilitate the implementation for font-selection-strategy:
- </p>
- <ul>
- <li>Changed FontInfo.fontLookup to always return an array of FontTriplet</li>
- <li>Changed CommonFont.getFontState to return an array of FontTriplet</li>
- <li>Initial modifications to the related LMs: initialized with
- the font corresponding to the first of the triplets</li>
- </ul>
+ Facilitate the implementation for font-selection-strategy:<br/>
+ • Changed FontInfo.fontLookup to always return an array of FontTriplet.<br/>
+ • Changed CommonFont.getFontState to return an array of FontTriplet.<br/>
+ • Initial modifications to the related LMs: initialized with
+ the font corresponding to the first of the triplets.<br/>
</action>
<action context="Layout" dev="AD" type="update">
- <p>PropertyCache phase 2:</p>
- <ul>
- <li>
- improvement of the PropertyCache itself should now guarantee acceptable
+ PropertyCache phase 2:<br/>
+ • improvement of the PropertyCache itself should now guarantee acceptable
performance of the static caches in multi-session environments, which is
- a possible problem with synchronizedMap
- </li>
- <li>
- changed CommonFont to use the cache:
+ a possible problem with synchronizedMap.<br/>
+ • changed CommonFont to use the cache:
added CachedCommonFont to contain the properties that are always cacheable
- CommonFont itself is only cached if the remaining properties are absolutes
- </li>
- <li>changed CommonHyphenation, KeepProperty, ColorProperty and FontFamilyProperty to use the cache</li>
- </ul>
+ CommonFont itself is only cached if the remaining properties are absolutes.<br/>
+ • changed CommonHyphenation, KeepProperty, ColorProperty and FontFamilyProperty to use the cache.<br/>
</action>
<action context="Layout" dev="AD" type="fix" fixes-bug="42705">
Fixed swallowing PCDATA in text-node children of
@@ -463,33 +584,36 @@
</release>
<release version="0.93" date="9 January 2007">
<notes>
- <p>This is the first production grade release of the new FOP
- codebase.</p>
- <ul>
- <li>It contains the new API first introduced in release 0.92
- beta. The preceding API has been removed.
- </li>
- <li>
- See the <a href="../compliance.html">compliance page</a> for an
- overview of the compliance of this release with the XSL 1.0 and
- 1.1 recommendations.
- </li>
- <li>
- This release again contains many bug fixes and new features. See
- below for details.
- </li>
- <li>
- See the <a href="../knownissues.html">known issues page</a>
- for an overview of the known issues with this release.
- </li>
- </ul>
- <p>Caveats:</p>
- <ul>
- <li>
- You may experience different behaviour compared to version 0.20.5.
- Please consult the <a href="upgrading.html">"Upgrading"</a> page for details.
- </li>
- </ul>
+ <section>
+ <title>Notes</title>
+ <p>This is the first production grade release of the new FOP
+ codebase.</p>
+ <ul>
+ <li>It contains the new API first introduced in release 0.92
+ beta. The preceding API has been removed.
+ </li>
+ <li>
+ See the <link href="../compliance.html">compliance page</link> for an
+ overview of the compliance of this release with the XSL 1.0 and
+ 1.1 recommendations.
+ </li>
+ <li>
+ This release again contains many bug fixes and new features. See
+ below for details.
+ </li>
+ <li>
+ See the <link href="../knownissues.html">known issues page</link>
+ for an overview of the known issues with this release.
+ </li>
+ </ul>
+ <p>Caveats:</p>
+ <ul>
+ <li>
+ You may experience different behaviour compared to version 0.20.5.
+ Please consult the <link href="upgrading.html">"Upgrading"</link> page for details.
+ </li>
+ </ul>
+ </section>
</notes>
<action context="Code" dev="BD" type="add" importance="high">
Added support for the use of Open Type fonts
@@ -1064,9 +1188,18 @@
<action context="Code" dev="all" type="update">
For the change log for the maintenance branch
(where FOP 0.20.5 came from), please see the "CHANGES" file in the distribution, or
- <a href="http://svn.apache.org/viewcvs.cgi/xmlgraphics/fop/branches/fop-0_20_2-maintain/CHANGES?view=markup">the CHANGES file in the SVN repository</a>.
+ <link href="http://svn.apache.org/viewcvs.cgi/xmlgraphics/fop/branches/fop-0_20_2-maintain/CHANGES?view=markup">the CHANGES file in the SVN repository</link>.
</action>
</release>
</changes>
+ <todo>
+ <!-- See Bugzilla and http://wiki.apache.org/xmlgraphics-fop/FOPProjectTasks -->
+ <actions>
+ <action dev="open" type="update" context="Docs">
+ Improve the documentation.
+ </action>
+ </actions>
+ </todo>
+
</status>
diff --git a/test/java/org/apache/fop/URIResolutionTestCase.java b/test/java/org/apache/fop/URIResolutionTestCase.java
index 1277126bc..106ec0a2c 100644
--- a/test/java/org/apache/fop/URIResolutionTestCase.java
+++ b/test/java/org/apache/fop/URIResolutionTestCase.java
@@ -36,17 +36,19 @@ import javax.xml.transform.sax.TransformerHandler;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
+import org.w3c.dom.Document;
+
import org.apache.commons.io.IOUtils;
import org.apache.commons.io.output.ByteArrayOutputStream;
+import org.apache.xpath.XPathAPI;
+import org.apache.xpath.objects.XObject;
+
import org.apache.fop.apps.FOPException;
import org.apache.fop.apps.FOUserAgent;
import org.apache.fop.apps.Fop;
import org.apache.fop.apps.FopFactory;
import org.apache.fop.apps.MimeConstants;
import org.apache.fop.render.xml.XMLRenderer;
-import org.apache.xpath.XPathAPI;
-import org.apache.xpath.objects.XObject;
-import org.w3c.dom.Document;
/**
* Tests URI resolution facilities.
@@ -85,9 +87,6 @@ public class URIResolutionTestCase extends AbstractFOPTestCase {
private void innerTestFO1(boolean withStream) throws Exception {
FOUserAgent ua = fopFactory.newFOUserAgent();
- //Reset the image caches to force URI resolution!
- ua.getFactory().getImageFactory().clearCaches();
-
File foFile = new File(getBaseDir(), "test/xml/uri-resolution1.fo");
MyURIResolver resolver = new MyURIResolver(withStream);
diff --git a/test/java/org/apache/fop/render/pdf/PDFEncodingTestCase.java b/test/java/org/apache/fop/render/pdf/PDFEncodingTestCase.java
index b29249f00..c9fba08c7 100644
--- a/test/java/org/apache/fop/render/pdf/PDFEncodingTestCase.java
+++ b/test/java/org/apache/fop/render/pdf/PDFEncodingTestCase.java
@@ -65,7 +65,7 @@ public class PDFEncodingTestCase extends BasePDFTestCase {
* The following array is used to look for these patterns
*/
final String[] testPatterns = {
- TEST_MARKER + "1", "(Standard)",
+ TEST_MARKER + "1", "Standard",
TEST_MARKER + "2", "XX_\\351_XX",
TEST_MARKER + "3", "XX_\\342\\352\\356\\364\\373_XX"
};
@@ -75,7 +75,9 @@ public class PDFEncodingTestCase extends BasePDFTestCase {
/**
* TODO test disabled for now, fails due (probably) do different PDF
- * encoding when custom font is used
+ * encoding when custom font is used.
+ * TODO This should be tested using PDFBox. If PDFBox can extract the text correctly,
+ * everything is fine. The tests here are too unstable.
*
* @throws Exception
* checkstyle wants a comment here, even a silly one
diff --git a/test/layoutengine/disabled-testcases.xml b/test/layoutengine/disabled-testcases.xml
index 15ac8aa48..b4de16ef4 100644
--- a/test/layoutengine/disabled-testcases.xml
+++ b/test/layoutengine/disabled-testcases.xml
@@ -233,54 +233,6 @@
<description>Column balancing doesn't work as expected.</description>
</testcase>
<testcase>
- <name>No background-images on table-body</name>
- <file>table-body_background-image.xml</file>
- <description>The backgrounds of table-body, table-header,
- table-footer and table-column are not painted, yet.</description>
- </testcase>
- <testcase>
- <name>Collapsing Border Model NYI</name>
- <file>table_border-collapse_collapse_1.xml</file>
- <description>Border-collapse="collapse" is not yet
- implemented.</description>
- </testcase>
- <testcase>
- <name>Collapsing Border Model NYI</name>
- <file>table_border-collapse_collapse_2.xml</file>
- <description>Border-collapse="collapse" is not yet
- implemented.</description>
- </testcase>
- <testcase>
- <name>Problems with border and padding on tables</name>
- <file>table_border_padding.xml</file>
- <description>The element list seems to not be fully correct, yet, causing
- the layout to look odd.</description>
- </testcase>
- <testcase>
- <name>keep-with-previous doesn't work inside tables</name>
- <file>table-cell_block_keep-with-previous.xml</file>
- <description>Keep-with-previous doesn't work inside tables and
- lists, yet.</description>
- </testcase>
- <testcase>
- <name>Border and padding conditionality is NYI on table-cells</name>
- <file>table-cell_border_padding_conditionality.xml</file>
- <description>Border and padding conditionality are not supported
- on table-cells, yet.</description>
- </testcase>
- <testcase>
- <name>No background-images on table-header</name>
- <file>table-header_background-image.xml</file>
- <description>The backgrounds of table-body, table-header,
- table-footer and table-column are not painted, yet.</description>
- </testcase>
- <testcase>
- <name>keep-with-previous doesn't work on table-rows</name>
- <file>table-row_keep-with-previous.xml</file>
- <description>Keep-with-previous doesn't work inside tables and
- lists, yet.</description>
- </testcase>
- <testcase>
<name>table-cell empty area with marker.xml</name>
<file>table-cell_empty_area_with_marker.xml</file>
<description>A table-cell producing an empty area does currently not add any markers to a page.
diff --git a/test/layoutengine/standard-testcases/block-container_absolute-position_no-height_3.xml b/test/layoutengine/standard-testcases/block-container_absolute-position_no-height_3.xml
new file mode 100644
index 000000000..d2eba0d3c
--- /dev/null
+++ b/test/layoutengine/standard-testcases/block-container_absolute-position_no-height_3.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks absolutely positioned block-containers with auto-height and shrinks.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block-container id="bc0" width="80pt" absolute-position="absolute"
+ left="10pt" top="10pt" overflow="visible"
+ keep-together.within-column="always"
+ background-color="lightgray">
+ <fo:block space-after.maximum="1em" space-after.optimum="0.3em"
+ space-before.maximum="1em" space-before.optimum="0.3em">
+ Lorem ipsum dolor sit amet.
+ </fo:block>
+ <fo:block space-after.maximum="1em" space-after.optimum="0.3em"
+ space-before.maximum="1em" space-before.optimum="0.3em">
+ Lorem ipsum dolor sit amet.
+ </fo:block>
+ <fo:block space-after.maximum="1em" space-after.optimum="0.3em"
+ space-before.maximum="1em" space-before.optimum="0.3em">
+ Lorem ipsum dolor sit amet.
+ </fo:block>
+ </fo:block-container>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="93600" xpath="//block[@prod-id='bc0' and boolean(@is-reference-area)]/@bpd"/>
+ <eval expected="28800" xpath="//block[@prod-id='bc0' and boolean(@is-reference-area)]/block[1]/@bpda"/>
+ <eval expected="32400" xpath="//block[@prod-id='bc0' and boolean(@is-reference-area)]/block[2]/@bpda"/>
+ <eval expected="32400" xpath="//block[@prod-id='bc0' and boolean(@is-reference-area)]/block[3]/@bpda"/>
+ <eval expected="3600" xpath="//block[@prod-id='bc0' and boolean(@is-reference-area)]/block[2]/@space-before"/>
+ <eval expected="3600" xpath="//block[@prod-id='bc0' and boolean(@is-reference-area)]/block[3]/@space-before"/>
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/block-level_break-after_bug44412.xml b/test/layoutengine/standard-testcases/block-level_break-after_bug44412.xml
new file mode 100644
index 000000000..523d22c6f
--- /dev/null
+++ b/test/layoutengine/standard-testcases/block-level_break-after_bug44412.xml
@@ -0,0 +1,112 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks Bugzilla #44412 where the border-after of an fo:block wasn't painted in
+ case break-after is present.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page" page-height="5in" page-width="5in" margin="20pt">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>Before the block</fo:block>
+ <fo:block id="b1" border="4pt solid black" break-before="column" break-after="column">A block with
+ borders and break-before and break-after.</fo:block>
+ <fo:block>After the block</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block-container id="bc1" border="4pt solid black" break-after="column">
+ <fo:block>A block-container with borders and break-after.</fo:block>
+ </fo:block-container>
+ <fo:block>After the block-container</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:list-block id="lb1" border="4pt solid black" break-after="column">
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block>&#x2022;</fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body>
+ <fo:block start-indent="body-start()">Blaaaaaah</fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </fo:list-block>
+ <fo:block>After the list-block</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:list-block>
+ <fo:list-item id="li1" border="4pt solid black" break-after="column">
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block>&#x2022;</fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body>
+ <fo:block start-indent="body-start()">Blaaaaaah</fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </fo:list-block>
+ <fo:block>After the list-item</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:table table-layout="fixed" width="100%" id="tbl1" border="4pt solid black" break-after="column">
+ <fo:table-column column-width="proportional-column-width(1)"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell>
+ <fo:block>Blaaaaah</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ <fo:block>After the table</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="1" xpath="count(//block[@prod-id = 'b1'])"/>
+ <eval expected="4000 4000 4000 4000" xpath="//block[@prod-id = 'b1']/@bap"/>
+
+ <eval expected="2" xpath="count(//block[@prod-id = 'bc1'])"/> <!-- 2 because viewport/ref pair -->
+ <eval expected="4000 4000 4000 4000" xpath="//block[@prod-id = 'bc1'][1]/@bap"/>
+
+ <eval expected="1" xpath="count(//block[@prod-id = 'lb1'])"/>
+ <eval expected="4000 4000 4000 4000" xpath="//block[@prod-id = 'lb1']/@bap"/>
+
+ <eval expected="1" xpath="count(//block[@prod-id = 'li1'])"/>
+ <eval expected="4000 4000 4000 4000" xpath="//block[@prod-id = 'li1']/@bap"/>
+
+ <eval expected="1" xpath="count(//block[@prod-id = 'tbl1'])"/>
+ <eval expected="4000 4000 4000 4000" xpath="//block[@prod-id = 'tbl1']/block[1]/@bap"/>
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/block_break-before_bug44412.xml b/test/layoutengine/standard-testcases/block_break-before_bug44412.xml
new file mode 100644
index 000000000..9ef4150b5
--- /dev/null
+++ b/test/layoutengine/standard-testcases/block_break-before_bug44412.xml
@@ -0,0 +1,64 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks Bugzilla #44412 where a break-before on the first child of an otherwise
+ empty block is set. It is expected that the parent block creates two areas, the first with
+ only border-before on the first page and zero bpd.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page" page-height="5in" page-width="5in" margin="20pt">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>Before the block</fo:block>
+ <fo:block id="b1" border="4pt solid black">
+ <fo:block break-before="page">The break-before set on this block causes the parent
+ block to produce an empty block area with only a border before on the
+ first page.</fo:block>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="2" xpath="count(//block[@prod-id = 'b1'])"/>
+ <eval expected="4000 4000 4000 0" xpath="(//block[@prod-id = 'b1'])[1]/@bap"/>
+ <eval expected="4000 4000 0 4000" xpath="(//block[@prod-id = 'b1'])[2]/@bap"/>
+ <eval expected="0" xpath="(//block[@prod-id = 'b1'])[1]/@bpd"/>
+ <eval expected="43200" xpath="(//block[@prod-id = 'b1'])[2]/@bpd"/>
+
+ <element-list category="breaker" index="0">
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="0" aux="true"/>
+ <penalty w="0" p="INF"/>
+ <glue w="4000"/> <!-- border-before -->
+ <box w="0"/> <!-- first block area of the "b1" block with zero bpd -->
+
+ <skip>3</skip>
+ </element-list>
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/inline_block-level_nested_1.xml b/test/layoutengine/standard-testcases/inline_block-level_nested_1.xml
new file mode 100644
index 000000000..6b6761dee
--- /dev/null
+++ b/test/layoutengine/standard-testcases/inline_block-level_nested_1.xml
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks fo:inline and nested block-level nodes.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="6in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>
+ <fo:inline>before
+ <fo:list-block>
+ <fo:list-item>
+ <fo:list-item-label end-indent="label-end()">
+ <fo:block>&#x2022;</fo:block>
+ </fo:list-item-label>
+ <fo:list-item-body start-indent="body-start()">
+ <fo:block id="list-item-body1">Inline list item one.</fo:block>
+ </fo:list-item-body>
+ </fo:list-item>
+ </fo:list-block>
+ after</fo:inline>
+ </fo:block>
+ <fo:block space-before="0.5em">
+ <fo:inline>before
+ <fo:table table-layout="fixed" width="100%">
+ <fo:table-column column-width="proportional-column-width(1)"
+ number-columns-repeated="2"/>"
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell id="table-cell1">
+ <fo:block>cell1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell>
+ <fo:block>cell2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ after</fo:inline>
+ </fo:block>
+ <fo:block space-before="0.5em">
+ <fo:inline>before
+ <fo:block-container>
+ <fo:block id="block-in-bc">block in block-container</fo:block>
+ </fo:block-container>
+ after</fo:inline>
+ </fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <element-list category="breaker">
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <glue w="6000" aux="true"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <glue w="6000" aux="true"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="14400"/>
+ <penalty w="0" p="0"/>
+ <box w="14400"/>
+ <skip>3</skip>
+ </element-list>
+ <true xpath="boolean(//block[@prod-id='list-item-body1'])"/>
+ <true xpath="boolean(//block[@prod-id='table-cell1'])"/>
+ <true xpath="boolean(//block[@prod-id='block-in-bc'])"/>
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/table-body_background-image.xml b/test/layoutengine/standard-testcases/table-body_background-image.xml
deleted file mode 100644
index 2a9aa9362..000000000
--- a/test/layoutengine/standard-testcases/table-body_background-image.xml
+++ /dev/null
@@ -1,110 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks background image on a fo:table-body.
- </p>
- </info>
- <variables>
- <img>../../resources/images/bgimg300dpi.jpg</img>
- </variables>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
- <fo:region-body/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal" white-space-collapse="true">
- <fo:flow flow-name="xsl-region-body">
- <fo:table>
- <fo:table-column column-number="1" />
- <fo:table-column column-number="2" />
- <fo:table-column column-number="3" />
- <fo:table-header>
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Header Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Header Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Header Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-header>
- <fo:table-body background-color="yellow" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center" background-image="##img">
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Row 1 Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 1 Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 1 Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Row 2 Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 2 Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 2 Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Row 3 Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 3 Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 3 Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Row 4 Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 4 Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 4 Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- <fo:block>Table with centered background image on body</fo:block>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <!-- backgrounds on table-body are not supported at the time this test
- was written. Therefore no checks! -->
- </checks>
-</testcase>
diff --git a/test/layoutengine/standard-testcases/table-cell_block_keep-with-previous.xml b/test/layoutengine/standard-testcases/table-cell_block_keep-with-previous.xml
deleted file mode 100644
index 00257a10a..000000000
--- a/test/layoutengine/standard-testcases/table-cell_block_keep-with-previous.xml
+++ /dev/null
@@ -1,85 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks keep-with-previous on content inside tables.
- </p>
- </info>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" white-space-collapse="true" widows="0" orphans="0">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="4.5 * 14.4pt">
- <fo:region-body/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal">
- <fo:flow flow-name="xsl-region-body">
- <fo:block>block1</fo:block>
- <fo:table table-layout="fixed">
- <fo:table-column/>
- <fo:table-column/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell id="cell1">
- <fo:block keep-with-previous.within-page="always">line1</fo:block>
- <fo:block>line2</fo:block>
- </fo:table-cell>
- <fo:table-cell id="cell2">
- <fo:block>line1</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell id="cell3">
- <fo:block>line1</fo:block>
- </fo:table-cell>
- <fo:table-cell id="cell4">
- <fo:block keep-with-previous.within-page="always">line1</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- <fo:block>block2</fo:block>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <element-list category="table-cell" id="cell1">
- <box w="14400"/>
- <penalty w="0" p="0"/>
- <box w="14400"/>
- </element-list>
- <element-list category="table-cell" id="cell2">
- <box w="14400"/>
- </element-list>
- <element-list category="breaker" index="0">
- <box w="14400"/>
- <penalty w="0" p="INF"/>
- <box w="14400"/>
- <penalty w="0" p="INF"/>
- <box w="14400"/>
- <penalty w="0" p="INF"/>
- <box w="14400"/>
- <penalty w="0" p="0"/>
- <box w="14400"/>
- <skip>3</skip>
- </element-list>
- </checks>
-</testcase>
diff --git a/test/layoutengine/standard-testcases/table-cell_conditional-spaces_2.xml b/test/layoutengine/standard-testcases/table-cell_conditional-spaces_2.xml
index 1a9940e38..9a0920cf1 100644
--- a/test/layoutengine/standard-testcases/table-cell_conditional-spaces_2.xml
+++ b/test/layoutengine/standard-testcases/table-cell_conditional-spaces_2.xml
@@ -168,94 +168,108 @@
<!-- 1. table not broken -->
<eval expected="92200" xpath="//pageViewport[1]//flow/block[2]/@bpd"/>
+ <!-- Cell 1.2 -->
<!-- Block for yellow background -->
<eval expected="48600" xpath="//pageViewport[1]//flow/block[2]/block[1]/@bpd"/>
- <!-- Cell 1.2 -->
<eval expected="48600" xpath="//pageViewport[1]//flow/block[2]/block[2]/@bpd"/>
<eval expected="15000" xpath="//pageViewport[1]//flow/block[2]/block[2]/block[1]/@space-after"/>
<eval expected="0" xpath="count(//pageViewport[1]//flow/block[2]/block[2]/block[2]/@space-before)"/>
- <!-- Block for grey background -->
- <eval expected="43600" xpath="//pageViewport[1]//flow/block[2]/block[3]/@bpd"/>
<!-- Cell 1.1 -->
+ <!-- Block for yellow background -->
+ <eval expected="92200" xpath="//pageViewport[1]//flow/block[2]/block[3]/@bpd"/>
<eval expected="20000" xpath="//pageViewport[1]//flow/block[2]/block[4]/block[1]/@space-after"/>
<eval expected="0" xpath="count(//pageViewport[1]//flow/block[2]/block[4]/block[2]/@space-before)"/>
<!-- Cell 2.2 -->
+ <!-- Block for grey background -->
<eval expected="43600" xpath="//pageViewport[1]//flow/block[2]/block[5]/@bpd"/>
- <eval expected="0" xpath="count(//pageViewport[1]//flow/block[2]/block[5]/block[1]/@space-after)"/>
- <eval expected="10000" xpath="//pageViewport[1]//flow/block[2]/block[5]/block[2]/@space-before"/>
+ <eval expected="43600" xpath="//pageViewport[1]//flow/block[2]/block[6]/@bpd"/>
+ <eval expected="0" xpath="count(//pageViewport[1]//flow/block[2]/block[6]/block[1]/@space-after)"/>
+ <eval expected="10000" xpath="//pageViewport[1]//flow/block[2]/block[6]/block[2]/@space-before"/>
<!-- 2. Cells 1.1 and 1.2 split -->
<!-- First page -->
<eval expected="31800" xpath="//pageViewport[2]//flow/block[2]/@bpd"/>
+ <!-- Cell 1.1 Line 1 -->
<!-- Block for yellow background -->
<eval expected="31800" xpath="//pageViewport[2]//flow/block[2]/block[1]/@bpd"/>
- <!-- Cell 1.1 Line 1 -->
<eval expected="0" xpath="count(//pageViewport[2]//flow/block[2]/block[2]/block[1]/@space-after)"/>
<!-- Cell 1.2 Line 1 -->
- <eval expected="15000" xpath="//pageViewport[2]//flow/block[2]/block[3]/block[1]/@space-after"/>
+ <!-- Block for yellow background -->
+ <eval expected="31800" xpath="//pageViewport[2]//flow/block[2]/block[3]/@bpd"/>
+ <eval expected="15000" xpath="//pageViewport[2]//flow/block[2]/block[4]/block[1]/@space-after"/>
<!-- Second page -->
<eval expected="60400" xpath="//pageViewport[3]//flow/block[1]/@bpd"/>
+ <!-- Cell 1.2 Line 2 -->
<!-- Block for yellow background -->
<eval expected="16800" xpath="//pageViewport[3]//flow/block[1]/block[1]/@bpd"/>
- <!-- Cell 1.2 Line 2 -->
<eval expected="16800" xpath="//pageViewport[3]//flow/block[1]/block[2]/@bpd"/>
<eval expected="0" xpath="count(//pageViewport[3]//flow/block[1]/block[2]/@space-before)"/>
- <!-- Block for grey background -->
- <eval expected="43600" xpath="//pageViewport[3]//flow/block[1]/block[3]/@bpd"/>
<!-- Cell 1.1 Line 2 -->
+ <!-- Block for yellow background -->
+ <eval expected="60400" xpath="//pageViewport[3]//flow/block[1]/block[3]/@bpd"/>
<eval expected="16800" xpath="//pageViewport[3]//flow/block[1]/block[4]/block[1]/@bpd"/>
<eval expected="10000" xpath="//pageViewport[3]//flow/block[1]/block[4]/block[1]/@space-before"/>
<!-- Cell 2.2 -->
+ <!-- Block for grey background -->
<eval expected="43600" xpath="//pageViewport[3]//flow/block[1]/block[5]/@bpd"/>
- <eval expected="0" xpath="count(//pageViewport[3]//flow/block[1]/block[5]/block[1]/@space-after)"/>
- <eval expected="10000" xpath="//pageViewport[3]//flow/block[1]/block[5]/block[2]/@space-before"/>
+ <eval expected="43600" xpath="//pageViewport[3]//flow/block[1]/block[6]/@bpd"/>
+ <eval expected="0" xpath="count(//pageViewport[3]//flow/block[1]/block[6]/block[1]/@space-after)"/>
+ <eval expected="10000" xpath="//pageViewport[3]//flow/block[1]/block[6]/block[2]/@space-before"/>
<!-- 3. Cell 1.1 split, cell 1.2 not -->
<!-- First page -->
<eval expected="48600" xpath="//pageViewport[4]//flow/block[2]/@bpd"/>
+ <!-- Cell 1.1 Line 1 -->
<!-- Block for yellow background -->
<eval expected="48600" xpath="//pageViewport[4]//flow/block[2]/block[1]/@bpd"/>
- <!-- Cell 1.1 Line 1 -->
<eval expected="0" xpath="count(//pageViewport[4]//flow/block[2]/block[2]/block[1]/@space-after)"/>
<!-- Cell 1.2 Line 1 -->
- <eval expected="15000" xpath="//pageViewport[4]//flow/block[2]/block[3]/block[1]/@space-after"/>
- <eval expected="0" xpath="count(//pageViewport[4]//flow/block[2]/block[3]/block[2]/@space-before)"/>
+ <!-- Block for yellow background -->
+ <eval expected="48600" xpath="//pageViewport[4]//flow/block[2]/block[3]/@bpd"/>
+ <eval expected="15000" xpath="//pageViewport[4]//flow/block[2]/block[4]/block[1]/@space-after"/>
+ <eval expected="0" xpath="count(//pageViewport[4]//flow/block[2]/block[4]/block[2]/@space-before)"/>
<!-- Second page -->
<eval expected="43600" xpath="//pageViewport[5]//flow/block[1]/@bpd"/>
- <!-- Block for grey background -->
- <eval expected="43600" xpath="//pageViewport[5]//flow/block[1]/block[1]/@bpd"/>
<!-- Cell 1.1 Line 2 -->
+ <!-- Block for yellow background -->
+ <eval expected="43600" xpath="//pageViewport[5]//flow/block[1]/block[1]/@bpd"/>
<eval expected="16800" xpath="//pageViewport[5]//flow/block[1]/block[2]/block[1]/@bpd"/>
<eval expected="10000" xpath="//pageViewport[5]//flow/block[1]/block[2]/block[1]/@space-before"/>
<!-- Cell 2.2 -->
+ <!-- Block for grey background -->
<eval expected="43600" xpath="//pageViewport[5]//flow/block[1]/block[3]/@bpd"/>
- <eval expected="0" xpath="count(//pageViewport[5]//flow/block[1]/block[3]/block[1]/@space-after)"/>
- <eval expected="10000" xpath="//pageViewport[5]//flow/block[1]/block[3]/block[2]/@space-before"/>
+ <eval expected="43600" xpath="//pageViewport[5]//flow/block[1]/block[4]/@bpd"/>
+ <eval expected="0" xpath="count(//pageViewport[5]//flow/block[1]/block[4]/block[1]/@space-after)"/>
+ <eval expected="10000" xpath="//pageViewport[5]//flow/block[1]/block[4]/block[2]/@space-before"/>
<!-- 4. Cell 2.2 split -->
<!-- First page -->
<eval expected="65400" xpath="//pageViewport[6]//flow/block[2]/@bpd"/>
+ <!-- Cell 1.2 -->
<!-- Block for yellow background -->
<eval expected="48600" xpath="//pageViewport[6]//flow/block[2]/block[1]/@bpd"/>
- <!-- Cell 1.2 -->
<eval expected="48600" xpath="//pageViewport[6]//flow/block[2]/block[2]/@bpd"/>
<eval expected="15000" xpath="//pageViewport[6]//flow/block[2]/block[2]/block[1]/@space-after"/>
<eval expected="0" xpath="count(//pageViewport[6]//flow/block[2]/block[2]/block[2]/@space-before)"/>
- <!-- Block for grey background -->
- <eval expected="16800" xpath="//pageViewport[6]//flow/block[2]/block[3]/@bpd"/>
<!-- Cell 1.1 -->
+ <!-- Block for yellow background -->
+ <eval expected="65400" xpath="//pageViewport[6]//flow/block[2]/block[3]/@bpd"/>
<eval expected="20000" xpath="//pageViewport[6]//flow/block[2]/block[4]/block[1]/@space-after"/>
<eval expected="0" xpath="count(//pageViewport[6]//flow/block[2]/block[4]/block[2]/@space-before)"/>
<!-- Cell 2.2 Line 1 -->
+ <!-- Block for grey background -->
<eval expected="16800" xpath="//pageViewport[6]//flow/block[2]/block[5]/@bpd"/>
- <eval expected="0" xpath="count(//pageViewport[6]//flow/block[2]/block[5]/block[1]/@space-after)"/>
+ <eval expected="16800" xpath="//pageViewport[6]//flow/block[2]/block[6]/@bpd"/>
+ <eval expected="0" xpath="count(//pageViewport[6]//flow/block[2]/block[6]/block[1]/@space-after)"/>
<!-- Second page -->
<eval expected="26800" xpath="//pageViewport[7]//flow/block[1]/@bpd"/>
- <!-- Block for grey background -->
+ <!-- Block for yellow background -->
<eval expected="26800" xpath="//pageViewport[7]//flow/block[1]/block[1]/@bpd"/>
<!-- Cell 2.2 Line 2 -->
+ <!-- Block for grey background -->
<eval expected="26800" xpath="//pageViewport[7]//flow/block[1]/block[3]/@bpd"/>
- <eval expected="10000" xpath="//pageViewport[7]//flow/block[1]/block[3]/block[1]/@space-before"/>
+ <eval expected="26800" xpath="//pageViewport[7]//flow/block[1]/block[4]/@bpd"/>
+ <eval expected="10000" xpath="//pageViewport[7]//flow/block[1]/block[4]/block[1]/@space-before"/>
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-footer_omit-footer-at-break.xml b/test/layoutengine/standard-testcases/table-footer_omit-footer-at-break.xml
index 7b2cc6904..59c60f72e 100644
--- a/test/layoutengine/standard-testcases/table-footer_omit-footer-at-break.xml
+++ b/test/layoutengine/standard-testcases/table-footer_omit-footer-at-break.xml
@@ -97,35 +97,35 @@
<eval expected="header" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@bpda"/-->
- <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/block[1]/lineArea, '1')"/>
- <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@bpda"/-->
+ <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea, '1')"/>
+ <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@bpda"/-->
- <eval expected="cell1" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea"/>
- <eval expected="cell2" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
- <eval expected="cell3" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
- <eval expected="cell4" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
- <eval expected="cell5" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
- <eval expected="cell6" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="cell1" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell2" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
+ <eval expected="cell3" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
+ <eval expected="cell4" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
+ <eval expected="cell5" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="cell6" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/block[1]/lineArea"/>
- <true xpath="not(boolean(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]))"/>
+ <true xpath="not(boolean(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]))"/>
<!-- page 2 -->
<eval expected="header" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@bpda"/-->
- <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/block[1]/lineArea, '2')"/>
- <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@bpda"/-->
+ <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea, '2')"/>
+ <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@bpda"/-->
- <eval expected="cell7" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea"/>
- <eval expected="cell8" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell7" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell8" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
- <eval expected="footer" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
- <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/@bpda"/-->
- <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea, '2')"/>
+ <eval expected="footer" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/@bpda"/-->
+ <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/block[1]/lineArea, '2')"/>
+ <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/@bpda"/-->
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-header_background-image.xml b/test/layoutengine/standard-testcases/table-header_background-image.xml
deleted file mode 100644
index f74c13b0d..000000000
--- a/test/layoutengine/standard-testcases/table-header_background-image.xml
+++ /dev/null
@@ -1,101 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks background image on a fo:table-header and footer.
- </p>
- </info>
- <variables>
- <img>../../resources/images/bgimg300dpi.jpg</img>
- </variables>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
- <fo:region-body/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal" white-space-collapse="true">
- <fo:flow flow-name="xsl-region-body">
- <fo:table>
- <fo:table-column column-number="1" />
- <fo:table-column column-number="2" />
- <fo:table-column column-number="3" />
- <fo:table-header background-color="yellow" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center" background-image="##img">
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Header Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Header Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Header Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-header>
- <fo:table-footer background-color="yellow" background-repeat="no-repeat" background-position-horizontal="center" background-position-vertical="center" background-image="##img">
- <fo:table-row>
- <fo:table-cell>
- <fo:block>Footer Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Footer Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Footer Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-footer>
- <fo:table-body background-color="blue">
- <fo:table-row height="4in" background-color="blue">
- <fo:table-cell>
- <fo:block>Row 1 Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 1 Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 1 Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row height="4in" background-color="blue">
- <fo:table-cell>
- <fo:block>Row 2 Col 1</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 2 Col 2</fo:block>
- </fo:table-cell>
- <fo:table-cell>
- <fo:block>Row 2 Col 3</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- <fo:block>Table with centered background image in header and footer</fo:block>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <!-- backgrounds on table-header/footer are not supported at the time this test
- was written. Therefore no checks! -->
- </checks>
-</testcase>
diff --git a/test/layoutengine/standard-testcases/table-header_omit-header-at-break.xml b/test/layoutengine/standard-testcases/table-header_omit-header-at-break.xml
index 6834deeac..5ec211645 100644
--- a/test/layoutengine/standard-testcases/table-header_omit-header-at-break.xml
+++ b/test/layoutengine/standard-testcases/table-header_omit-header-at-break.xml
@@ -32,7 +32,7 @@
<fo:page-sequence master-reference="normal" white-space-collapse="true">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="100%" table-omit-header-at-break="true">
- <fo:table-column number-columns-repeated="2"/>
+ <fo:table-column number-columns-repeated="2" column-width="proportional-column-width(1)"/>
<fo:table-header>
<fo:table-row background-color="yellow">
<fo:table-cell>
@@ -97,23 +97,23 @@
<eval expected="header" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@bpda"/-->
- <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/block[1]/lineArea, '1')"/>
- <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@bpda"/-->
+ <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea, '1')"/>
+ <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@bpda"/-->
- <eval expected="cell1" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea"/>
- <eval expected="cell2" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
- <eval expected="cell3" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
- <eval expected="cell4" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
- <eval expected="cell5" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
- <eval expected="cell6" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="cell1" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell2" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
+ <eval expected="cell3" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
+ <eval expected="cell4" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
+ <eval expected="cell5" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="cell6" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/block[1]/lineArea"/>
- <eval expected="footer" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]/block[1]/lineArea"/>
- <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]/@bpda"/-->
- <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/block[1]/lineArea, '1')"/>
+ <eval expected="footer" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/@bpda"/-->
+ <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[14]/block[1]/lineArea, '1')"/>
+ <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[14]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[14]/@bpda"/-->
<!-- page 2 -->
<eval expected="cell7" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[1]/block[1]/lineArea"/>
@@ -122,8 +122,8 @@
<eval expected="footer" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@bpda"/-->
- <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea, '2')"/>
- <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/@bpda"/-->
+ <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea, '2')"/>
+ <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/@bpda"/-->
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-header_table-footer_1.xml b/test/layoutengine/standard-testcases/table-header_table-footer_1.xml
index df45e328b..00cbcde54 100644
--- a/test/layoutengine/standard-testcases/table-header_table-footer_1.xml
+++ b/test/layoutengine/standard-testcases/table-header_table-footer_1.xml
@@ -32,7 +32,7 @@
<fo:page-sequence master-reference="normal" white-space-collapse="true">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="100%">
- <fo:table-column number-columns-repeated="2"/>
+ <fo:table-column number-columns-repeated="2" column-width="proportional-column-width(1)"/>
<fo:table-header>
<fo:table-row background-color="yellow">
<fo:table-cell>
@@ -82,31 +82,41 @@
<!-- header row background -->
<eval expected="color=#ffff00" xpath="//flow/block[1]/block[1]/@background"/>
- <eval expected="360000" xpath="//flow/block[1]/block[1]/@ipda"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[1]/@ipda"/>
<eval expected="14400" xpath="//flow/block[1]/block[1]/@bpda"/>
+ <eval expected="" xpath="//flow/block[1]/block[1]/@left-offset"/>
+ <eval expected="color=#ffff00" xpath="//flow/block[1]/block[3]/@background"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[3]/@ipda"/>
+ <eval expected="14400" xpath="//flow/block[1]/block[3]/@bpda"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[3]/@left-offset"/>
<eval expected="header1" xpath="//flow/block[1]/block[2]/block[1]/lineArea"/>
<eval expected="180000" xpath="//flow/block[1]/block[2]/@ipda"/>
<eval expected="14400" xpath="//flow/block[1]/block[2]/@bpda"/>
- <eval expected="header2" xpath="//flow/block[1]/block[3]/block[1]/lineArea"/>
- <eval expected="180000" xpath="//flow/block[1]/block[3]/@ipda"/>
- <eval expected="14400" xpath="//flow/block[1]/block[3]/@bpda"/>
+ <eval expected="header2" xpath="//flow/block[1]/block[4]/block[1]/lineArea"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[4]/@ipda"/>
+ <eval expected="14400" xpath="//flow/block[1]/block[4]/@bpda"/>
- <eval expected="cell1" xpath="//flow/block[1]/block[4]/block[1]/lineArea"/>
- <eval expected="cell2" xpath="//flow/block[1]/block[5]/block[1]/lineArea"/>
- <eval expected="cell3" xpath="//flow/block[1]/block[6]/block[1]/lineArea"/>
- <eval expected="cell4" xpath="//flow/block[1]/block[7]/block[1]/lineArea"/>
+ <eval expected="cell1" xpath="//flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell2" xpath="//flow/block[1]/block[6]/block[1]/lineArea"/>
+ <eval expected="cell3" xpath="//flow/block[1]/block[7]/block[1]/lineArea"/>
+ <eval expected="cell4" xpath="//flow/block[1]/block[8]/block[1]/lineArea"/>
<!-- footer row background -->
- <eval expected="color=#ffa500" xpath="//flow/block[1]/block[8]/@background"/>
- <eval expected="360000" xpath="//flow/block[1]/block[8]/@ipda"/>
- <eval expected="14400" xpath="//flow/block[1]/block[8]/@bpda"/>
-
- <eval expected="footer1" xpath="//flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="color=#ffa500" xpath="//flow/block[1]/block[9]/@background"/>
<eval expected="180000" xpath="//flow/block[1]/block[9]/@ipda"/>
<eval expected="14400" xpath="//flow/block[1]/block[9]/@bpda"/>
- <eval expected="footer2" xpath="//flow/block[1]/block[10]/block[1]/lineArea"/>
+ <eval expected="" xpath="//flow/block[1]/block[9]/@left-offset"/>
+ <eval expected="color=#ffa500" xpath="//flow/block[1]/block[11]/@background"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[11]/@ipda"/>
+ <eval expected="14400" xpath="//flow/block[1]/block[11]/@bpda"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[11]/@left-offset"/>
+
+ <eval expected="footer1" xpath="//flow/block[1]/block[10]/block[1]/lineArea"/>
<eval expected="180000" xpath="//flow/block[1]/block[10]/@ipda"/>
<eval expected="14400" xpath="//flow/block[1]/block[10]/@bpda"/>
+ <eval expected="footer2" xpath="//flow/block[1]/block[12]/block[1]/lineArea"/>
+ <eval expected="180000" xpath="//flow/block[1]/block[12]/@ipda"/>
+ <eval expected="14400" xpath="//flow/block[1]/block[12]/@bpda"/>
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-header_table-footer_2.xml b/test/layoutengine/standard-testcases/table-header_table-footer_2.xml
index 9cf3db4c0..7716dfe58 100644
--- a/test/layoutengine/standard-testcases/table-header_table-footer_2.xml
+++ b/test/layoutengine/standard-testcases/table-header_table-footer_2.xml
@@ -32,7 +32,7 @@
<fo:page-sequence master-reference="normal" white-space-collapse="true">
<fo:flow flow-name="xsl-region-body">
<fo:table table-layout="fixed" width="100%">
- <fo:table-column number-columns-repeated="2"/>
+ <fo:table-column number-columns-repeated="2" column-width="proportional-column-width(1)"/>
<fo:table-header>
<fo:table-row background-color="yellow">
<fo:table-cell>
@@ -97,40 +97,40 @@
<eval expected="header" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@bpda"/-->
- <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/block[1]/lineArea, '1')"/>
- <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@bpda"/-->
+ <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea, '1')"/>
+ <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@bpda"/-->
- <eval expected="cell1" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea"/>
- <eval expected="cell2" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
- <eval expected="cell3" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
- <eval expected="cell4" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
- <eval expected="cell5" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
- <eval expected="cell6" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="cell1" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell2" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
+ <eval expected="cell3" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
+ <eval expected="cell4" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
+ <eval expected="cell5" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[9]/block[1]/lineArea"/>
+ <eval expected="cell6" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/block[1]/lineArea"/>
- <eval expected="footer" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]/block[1]/lineArea"/>
- <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[11]/@bpda"/-->
- <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/block[1]/lineArea, '1')"/>
+ <eval expected="footer" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[12]/@bpda"/-->
+ <true xpath="contains(//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[14]/block[1]/lineArea, '1')"/>
+ <eval expected="180000" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[14]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[1]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[14]/@bpda"/-->
<!-- page 2 -->
<eval expected="header" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[2]/@bpda"/-->
- <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/block[1]/lineArea, '2')"/>
- <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[3]/@bpda"/-->
+ <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea, '2')"/>
+ <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/@bpda"/-->
- <eval expected="cell7" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[4]/block[1]/lineArea"/>
- <eval expected="cell8" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell7" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[5]/block[1]/lineArea"/>
+ <eval expected="cell8" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[6]/block[1]/lineArea"/>
- <eval expected="footer" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/block[1]/lineArea"/>
- <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/@ipda"/>
- <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[7]/@bpda"/-->
- <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea, '2')"/>
+ <eval expected="footer" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/block[1]/lineArea"/>
<eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/@ipda"/>
<!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[8]/@bpda"/-->
+ <true xpath="contains(//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/block[1]/lineArea, '2')"/>
+ <eval expected="180000" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/@ipda"/>
+ <!--eval expected="14400" xpath="//pageViewport[2]/page/regionViewport/regionBody/mainReference/span/flow/block[1]/block[10]/@bpda"/-->
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-row_background-image.xml b/test/layoutengine/standard-testcases/table-row_background-image.xml
index fa29f1b8e..f4dc65ae7 100644
--- a/test/layoutengine/standard-testcases/table-row_background-image.xml
+++ b/test/layoutengine/standard-testcases/table-row_background-image.xml
@@ -34,10 +34,8 @@
</fo:layout-master-set>
<fo:page-sequence master-reference="normal" white-space-collapse="true">
<fo:flow flow-name="xsl-region-body">
- <fo:table table-layout="fixed">
- <fo:table-column column-number="1" />
- <fo:table-column column-number="2" />
- <fo:table-column column-number="3" />
+ <fo:table table-layout="fixed" width="100%">
+ <fo:table-column number-columns-repeated="3" column-width="proportional-column-width(1)"/>
<fo:table-header>
<fo:table-row>
<fo:table-cell>
@@ -82,8 +80,20 @@
</fo:root>
</fo>
<checks>
- <eval expected="360000" xpath="//flow/block/block[4]/@ipd"/>
+ <eval expected="120000" xpath="//flow/block/block[4]/@ipd"/>
<eval expected="72000" xpath="//flow/block/block[4]/@bpd"/>
<eval expected="color=#ffff00,url=../../resources/images/bgimg300dpi.jpg,repeat=no-repeat,horiz=156960,vertical=12960" xpath="//flow/block/block[4]/@background"/>
+ <eval expected="" xpath="//flow/block/block[4]/@left-offset"/>
+
+ <eval expected="120000" xpath="//flow/block/block[6]/@ipd"/>
+ <eval expected="72000" xpath="//flow/block/block[6]/@bpd"/>
+ <eval expected="color=#ffff00,url=../../resources/images/bgimg300dpi.jpg,repeat=no-repeat,horiz=36960,vertical=12960" xpath="//flow/block/block[6]/@background"/>
+ <eval expected="120000" xpath="//flow/block/block[6]/@left-offset"/>
+
+ <eval expected="120000" xpath="//flow/block/block[8]/@ipd"/>
+ <eval expected="72000" xpath="//flow/block/block[8]/@bpd"/>
+ <eval expected="color=#ffff00,url=../../resources/images/bgimg300dpi.jpg,repeat=no-repeat,horiz=-83040,vertical=12960" xpath="//flow/block/block[8]/@background"/>
+ <eval expected="240000" xpath="//flow/block/block[8]/@left-offset"/>
+
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-row_height.xml b/test/layoutengine/standard-testcases/table-row_height.xml
index b158113f6..934afa69f 100644
--- a/test/layoutengine/standard-testcases/table-row_height.xml
+++ b/test/layoutengine/standard-testcases/table-row_height.xml
@@ -81,27 +81,37 @@
<eval expected="14400" xpath="//flow/block[1]/block[2]/@bpd"/>
<!-- row 2 -->
- <eval expected="360000" xpath="//flow/block[1]/block[3]/@ipd"/>
- <eval expected="20000" xpath="//flow/block[1]/block[3]/@bpd"/> <!-- background-area generated for the row -->
+ <eval expected="144000" xpath="//flow/block[1]/block[3]/@ipd"/> <!-- background-area generated for the row -->
+ <eval expected="20000" xpath="//flow/block[1]/block[3]/@bpd"/>
<eval expected="color=#ffff00" xpath="//flow/block[1]/block[3]/@background"/>
+ <eval expected="" xpath="//flow/block[1]/block[3]/@left-offset"/>
<eval expected="144000" xpath="//flow/block[1]/block[4]/@ipd"/>
<eval expected="20000" xpath="//flow/block[1]/block[4]/@bpd"/>
- <eval expected="216000" xpath="//flow/block[1]/block[5]/@ipd"/>
+ <eval expected="216000" xpath="//flow/block[1]/block[5]/@ipd"/> <!-- background-area generated for the row -->
<eval expected="20000" xpath="//flow/block[1]/block[5]/@bpd"/>
+ <eval expected="color=#ffff00" xpath="//flow/block[1]/block[5]/@background"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[5]/@left-offset"/>
+ <eval expected="216000" xpath="//flow/block[1]/block[6]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[1]/block[6]/@bpd"/>
<!-- row 3 -->
- <eval expected="360000" xpath="//flow/block[1]/block[6]/@ipd"/>
- <eval expected="20000" xpath="//flow/block[1]/block[6]/@bpd"/> <!-- background-area generated for the row -->
- <eval expected="color=#ffa500" xpath="//flow/block[1]/block[6]/@background"/>
- <eval expected="144000" xpath="//flow/block[1]/block[7]/@ipd"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[7]/@ipd"/> <!-- background-area generated for the row -->
<eval expected="20000" xpath="//flow/block[1]/block[7]/@bpd"/>
- <eval expected="216000" xpath="//flow/block[1]/block[8]/@ipd"/>
+ <eval expected="color=#ffa500" xpath="//flow/block[1]/block[7]/@background"/>
+ <eval expected="" xpath="//flow/block[1]/block[7]/@left-offset"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[8]/@ipd"/>
<eval expected="20000" xpath="//flow/block[1]/block[8]/@bpd"/>
+ <eval expected="216000" xpath="//flow/block[1]/block[9]/@ipd"/> <!-- background-area generated for the row -->
+ <eval expected="20000" xpath="//flow/block[1]/block[9]/@bpd"/>
+ <eval expected="color=#ffa500" xpath="//flow/block[1]/block[9]/@background"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[9]/@left-offset"/>
+ <eval expected="216000" xpath="//flow/block[1]/block[10]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[1]/block[10]/@bpd"/>
<!-- row 4 -->
- <eval expected="144000" xpath="//flow/block[1]/block[9]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[1]/block[9]/@bpd"/>
- <eval expected="216000" xpath="//flow/block[1]/block[10]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[1]/block[10]/@bpd"/>
+ <eval expected="144000" xpath="//flow/block[1]/block[11]/@ipd"/>
+ <eval expected="14400" xpath="//flow/block[1]/block[11]/@bpd"/>
+ <eval expected="216000" xpath="//flow/block[1]/block[12]/@ipd"/>
+ <eval expected="14400" xpath="//flow/block[1]/block[12]/@bpd"/>
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table-row_keep-with-previous.xml b/test/layoutengine/standard-testcases/table-row_keep-with-previous.xml
index 34a8be4c1..e6131308a 100644
--- a/test/layoutengine/standard-testcases/table-row_keep-with-previous.xml
+++ b/test/layoutengine/standard-testcases/table-row_keep-with-previous.xml
@@ -19,66 +19,236 @@
<testcase>
<info>
<p>
- This test checks keep-with-previous on table-rows.
+ This test checks that keep-with-previous works on table-row.
</p>
</info>
<fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg" white-space-collapse="true" widows="0" orphans="0">
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="4.5 * 14.4pt">
- <fo:region-body/>
+ <fo:simple-page-master master-name="page" page-height="3in" page-width="5in"
+ margin="0.5in">
+ <fo:region-body background-color="#F0F0F0"/>
</fo:simple-page-master>
</fo:layout-master-set>
- <fo:page-sequence master-reference="normal">
+
+ <!-- table 1 -->
+ <fo:page-sequence master-reference="page" font-size="8pt" line-height="10pt">
<fo:flow flow-name="xsl-region-body">
- <fo:block space-after="1.5*14.4pt">block1</fo:block>
- <fo:table table-layout="fixed" width="100%">
- <fo:table-column number-columns-repeated="2" column-width="proportional-column-width(1)"/>
+ <fo:block space-after="106pt">1. Before the table</fo:block>
+ <fo:table width="100%" table-layout="fixed"
+ border-collapse="separate" border="4pt solid black">
+ <fo:table-column number-columns-repeated="2"
+ column-width="proportional-column-width(1)"/>
<fo:table-body>
- <fo:table-row keep-with-previous.within-page="always">
- <fo:table-cell id="cell1">
- <fo:block>line1</fo:block>
- <fo:block>line2</fo:block>
+ <fo:table-row>
+ <fo:table-cell border="2pt solid blue">
+ <fo:block>Cell 1.1 Line 1</fo:block>
+ <fo:block>Cell 1.1 Line 2</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid teal">
+ <fo:block>Cell 1.2 Line 1</fo:block>
+ <fo:block>Cell 1.2 Line 2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row keep-with-previous="always">
+ <fo:table-cell border="2pt solid green">
+ <fo:block>Cell 2.1 Line 1</fo:block>
+ <fo:block>Cell 2.1 Line 2</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid olive">
+ <fo:block>Cell 3.1 Line 1</fo:block>
+ <fo:block>Cell 3.1 Line 2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ <fo:block>After the table</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+
+ <!-- table 2 -->
+ <fo:page-sequence master-reference="page" font-size="8pt" line-height="10pt">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block space-after="106pt">2. Before the table</fo:block>
+ <fo:table width="100%" table-layout="fixed"
+ border-collapse="separate" border="4pt solid black">
+ <fo:table-column number-columns-repeated="2"
+ column-width="proportional-column-width(1)"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell border="2pt solid blue">
+ <fo:block>Cell 1.1 Line 1</fo:block>
+ <fo:block>Cell 1.1 Line 2</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid teal" number-rows-spanned="2">
+ <fo:block>Cell 1.2 Line 1</fo:block>
+ <fo:block>Cell 1.2 Line 2</fo:block>
</fo:table-cell>
- <fo:table-cell id="cell2">
- <fo:block>line1</fo:block>
+ </fo:table-row>
+ <fo:table-row keep-with-previous="always">
+ <fo:table-cell border="2pt solid green">
+ <fo:block>Cell 2.1 Line 1</fo:block>
+ <fo:block>Cell 2.1 Line 2</fo:block>
</fo:table-cell>
</fo:table-row>
- <fo:table-row keep-with-previous.within-page="always">
- <fo:table-cell id="cell3">
- <fo:block>line1</fo:block>
+ </fo:table-body>
+ </fo:table>
+ <fo:block>After the table</fo:block>
+ </fo:flow>
+ </fo:page-sequence>
+
+ <!-- table 3 -->
+ <fo:page-sequence master-reference="page" font-size="8pt" line-height="10pt">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block space-after="124">3. Before the table</fo:block>
+ <fo:block>Before the table</fo:block>
+ <fo:table width="100%" table-layout="fixed"
+ border-collapse="collapse" border="4pt solid black">
+ <fo:table-column number-columns-repeated="2"
+ column-width="proportional-column-width(1)"/>
+ <fo:table-body>
+ <fo:table-row keep-with-previous="always">
+ <fo:table-cell border="2pt solid blue" number-rows-spanned="2">
+ <fo:block>Cell 1.1 Line 1</fo:block>
+ <fo:block>Cell 1.1 Line 2</fo:block>
</fo:table-cell>
- <fo:table-cell id="cell4">
- <fo:block>line1</fo:block>
+ <fo:table-cell border="2pt solid teal">
+ <fo:block>Cell 1.2 Line 1</fo:block>
+ <fo:block>Cell 1.2 Line 2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row>
+ <fo:table-cell border="2pt solid olive">
+ <fo:block>Cell 2.1 Line 1</fo:block>
+ <fo:block>Cell 2.1 Line 2</fo:block>
</fo:table-cell>
</fo:table-row>
</fo:table-body>
</fo:table>
- <fo:block>block2</fo:block>
+ <fo:block>After the table</fo:block>
</fo:flow>
</fo:page-sequence>
+
</fo:root>
</fo>
<checks>
- <element-list category="table-cell" id="cell1">
- <box w="14400"/>
- <penalty w="0" p="0"/>
- <box w="14400"/>
- </element-list>
- <element-list category="table-cell" id="cell2">
- <box w="14400"/>
- </element-list>
- <element-list category="breaker" index="0">
- <box w="14400"/>
- <penalty w="0" p="INF"/>
- <box w="14400"/>
- <penalty w="0" p="INF"/>
- <box w="14400"/>
- <penalty w="0" p="INF"/>
- <box w="14400"/>
- <penalty w="0" p="0"/>
- <box w="14400"/>
- <skip>3</skip>
- </element-list>
+
+ <!-- table 1 -->
+ <eval expected="2" xpath="count(//pageSequence[1]/pageViewport)"/>
+ <!-- page 1 -->
+ <eval expected="2" xpath="count(//pageViewport[@nr=1]//flow/block)"/>
+ <eval expected="1. Before the table" xpath="//pageViewport[@nr=1]//flow/block[1]/lineArea"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=1]//flow/block[2]/@bpd"/>
+ <eval expected="16000" xpath="//pageViewport[@nr=1]//flow/block[2]/@bpda"/>
+ <eval expected="(solid,#000000,4000)" xpath="//pageViewport[@nr=1]//flow/block[2]/@border-before"/>
+ <eval expected="" xpath="//pageViewport[@nr=1]//flow/block[2]/@border-after"/>
+ <!-- cell 1.1 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=1]//flow/block[2]/block[1]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=1]//flow/block[2]/block[1]/@bpda"/>
+ <eval expected="(solid,#0000ff,2000)" xpath="//pageViewport[@nr=1]//flow/block[2]/block[1]/@border-before"/>
+ <eval expected="" xpath="//pageViewport[@nr=1]//flow/block[2]/block[1]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=1]//flow/block[2]/block[1]/block)"/>
+ <eval expected="Cell 1.1 Line 1" xpath="//pageViewport[@nr=1]//flow/block[2]/block[1]/block/lineArea"/>
+ <!-- cell 1.2 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=1]//flow/block[2]/block[2]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=1]//flow/block[2]/block[2]/@bpda"/>
+ <eval expected="(solid,#008080,2000)" xpath="//pageViewport[@nr=1]//flow/block[2]/block[2]/@border-before"/>
+ <eval expected="" xpath="//pageViewport[@nr=1]//flow/block[2]/block[2]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=1]//flow/block[2]/block[2]/block)"/>
+ <eval expected="Cell 1.2 Line 1" xpath="//pageViewport[@nr=1]//flow/block[2]/block[2]/block/lineArea"/>
+ <!-- page 2 -->
+ <eval expected="2" xpath="count(//pageViewport[@nr=2]//flow/block)"/>
+ <eval expected="After the table" xpath="//pageViewport[@nr=2]//flow/block[2]/lineArea"/>
+ <eval expected="36000" xpath="//pageViewport[@nr=2]//flow/block[1]/@bpd"/>
+ <eval expected="40000" xpath="//pageViewport[@nr=2]//flow/block[1]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[@nr=2]//flow/block[1]/@border-before"/>
+ <eval expected="(solid,#000000,4000)" xpath="//pageViewport[@nr=2]//flow/block[1]/@border-after"/>
+ <!-- cell 1.1 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[1]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[1]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[@nr=2]//flow/block[1]/block[1]/@border-before"/>
+ <eval expected="(solid,#0000ff,2000)" xpath="//pageViewport[@nr=2]//flow/block[1]/block[1]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=2]//flow/block[1]/block[1]/block)"/>
+ <eval expected="Cell 1.1 Line 2" xpath="//pageViewport[@nr=2]//flow/block[1]/block[1]/block/lineArea"/>
+ <!-- cell 1.2 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[2]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[2]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[@nr=2]//flow/block[1]/block[2]/@border-before"/>
+ <eval expected="(solid,#008080,2000)" xpath="//pageViewport[@nr=2]//flow/block[1]/block[2]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=2]//flow/block[1]/block[2]/block)"/>
+ <eval expected="Cell 1.2 Line 2" xpath="//pageViewport[@nr=2]//flow/block[1]/block[2]/block/lineArea"/>
+ <!-- cell 2.1 -->
+ <eval expected="20000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[3]/@bpd"/>
+ <eval expected="24000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[3]/@bpda"/>
+ <eval expected="(solid,#008000,2000)" xpath="//pageViewport[@nr=2]//flow/block[1]/block[3]/@border-before"/>
+ <eval expected="(solid,#008000,2000)" xpath="//pageViewport[@nr=2]//flow/block[1]/block[3]/@border-after"/>
+ <!-- cell 2.2 -->
+ <eval expected="20000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[4]/@bpd"/>
+ <eval expected="24000" xpath="//pageViewport[@nr=2]//flow/block[1]/block[4]/@bpda"/>
+ <eval expected="(solid,#808000,2000)" xpath="//pageViewport[@nr=2]//flow/block[1]/block[4]/@border-before"/>
+ <eval expected="(solid,#808000,2000)" xpath="//pageViewport[@nr=2]//flow/block[1]/block[4]/@border-after"/>
+
+ <!-- table 2 -->
+ <eval expected="2" xpath="count(//pageSequence[2]/pageViewport)"/>
+ <!-- page 1 -->
+ <eval expected="2" xpath="count(//pageViewport[@nr=3]//flow/block)"/>
+ <eval expected="2. Before the table" xpath="//pageViewport[@nr=3]//flow/block[1]/lineArea"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=3]//flow/block[2]/@bpd"/>
+ <eval expected="16000" xpath="//pageViewport[@nr=3]//flow/block[2]/@bpda"/>
+ <eval expected="(solid,#000000,4000)" xpath="//pageViewport[@nr=3]//flow/block[2]/@border-before"/>
+ <eval expected="" xpath="//pageViewport[@nr=3]//flow/block[2]/@border-after"/>
+ <!-- cell 1.1 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=3]//flow/block[2]/block[1]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=3]//flow/block[2]/block[1]/@bpda"/>
+ <eval expected="(solid,#0000ff,2000)" xpath="//pageViewport[@nr=3]//flow/block[2]/block[1]/@border-before"/>
+ <eval expected="" xpath="//pageViewport[@nr=3]//flow/block[2]/block[1]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=3]//flow/block[2]/block[1]/block)"/>
+ <eval expected="Cell 1.1 Line 1" xpath="//pageViewport[@nr=3]//flow/block[2]/block[1]/block/lineArea"/>
+ <!-- cell 1.2 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=3]//flow/block[2]/block[2]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=3]//flow/block[2]/block[2]/@bpda"/>
+ <eval expected="(solid,#008080,2000)" xpath="//pageViewport[@nr=3]//flow/block[2]/block[2]/@border-before"/>
+ <eval expected="" xpath="//pageViewport[@nr=3]//flow/block[2]/block[2]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=3]//flow/block[2]/block[2]/block)"/>
+ <eval expected="Cell 1.2 Line 1" xpath="//pageViewport[@nr=3]//flow/block[2]/block[2]/block/lineArea"/>
+ <!-- page 2 -->
+ <eval expected="2" xpath="count(//pageViewport[@nr=4]//flow/block)"/>
+ <eval expected="After the table" xpath="//pageViewport[@nr=4]//flow/block[2]/lineArea"/>
+ <eval expected="36000" xpath="//pageViewport[@nr=4]//flow/block[1]/@bpd"/>
+ <eval expected="40000" xpath="//pageViewport[@nr=4]//flow/block[1]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[@nr=4]//flow/block[1]/@border-before"/>
+ <eval expected="(solid,#000000,4000)" xpath="//pageViewport[@nr=4]//flow/block[1]/@border-after"/>
+ <!-- cell 1.1 -->
+ <eval expected="10000" xpath="//pageViewport[@nr=4]//flow/block[1]/block[1]/@bpd"/>
+ <eval expected="12000" xpath="//pageViewport[@nr=4]//flow/block[1]/block[1]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[@nr=4]//flow/block[1]/block[1]/@border-before"/>
+ <eval expected="(solid,#0000ff,2000)" xpath="//pageViewport[@nr=4]//flow/block[1]/block[1]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=4]//flow/block[1]/block[1]/block)"/>
+ <eval expected="Cell 1.1 Line 2" xpath="//pageViewport[@nr=4]//flow/block[1]/block[1]/block/lineArea"/>
+ <!-- cell 2.1 -->
+ <eval expected="20000" xpath="//pageViewport[@nr=4]//flow/block[1]/block[2]/@bpd"/>
+ <eval expected="24000" xpath="//pageViewport[@nr=4]//flow/block[1]/block[2]/@bpda"/>
+ <eval expected="(solid,#008000,2000)" xpath="//pageViewport[@nr=4]//flow/block[1]/block[2]/@border-before"/>
+ <eval expected="(solid,#008000,2000)" xpath="//pageViewport[@nr=4]//flow/block[1]/block[2]/@border-after"/>
+ <!-- cell 1.2 -->
+ <eval expected="34000" xpath="//pageViewport[@nr=4]//flow/block[1]/block[3]/@bpd"/>
+ <eval expected="36000" xpath="//pageViewport[@nr=4]//flow/block[1]/block[3]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[@nr=4]//flow/block[1]/block[3]/@border-before"/>
+ <eval expected="(solid,#008080,2000)" xpath="//pageViewport[@nr=4]//flow/block[1]/block[3]/@border-after"/>
+ <eval expected="1" xpath="count(//pageViewport[@nr=4]//flow/block[1]/block[3]/block)"/>
+ <eval expected="Cell 1.2 Line 2" xpath="//pageViewport[@nr=4]//flow/block[1]/block[3]/block/lineArea"/>
+
+ <!-- table 3 -->
+ <eval expected="2" xpath="count(//pageSequence[3]/pageViewport)"/>
+ <!-- page 1 -->
+ <eval expected="1" xpath="count(//pageViewport[@nr=5]//flow/block)"/>
+ <eval expected="3. Before the table" xpath="//pageViewport[@nr=5]//flow/block[1]/lineArea"/>
+ <!-- page 2 -->
+ <eval expected="3" xpath="count(//pageViewport[@nr=6]//flow/block)"/>
+ <eval expected="Before the table" xpath="//pageViewport[@nr=6]//flow/block[1]/lineArea"/>
+ <eval expected="46000" xpath="//pageViewport[@nr=6]//flow/block[2]/@bpd"/>
+ <eval expected="46000" xpath="//pageViewport[@nr=6]//flow/block[2]/@bpda"/>
+ <eval expected="After the table" xpath="//pageViewport[@nr=6]//flow/block[3]/lineArea"/>
+
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table_backgrounds.xml b/test/layoutengine/standard-testcases/table_backgrounds.xml
new file mode 100644
index 000000000..30564ecf7
--- /dev/null
+++ b/test/layoutengine/standard-testcases/table_backgrounds.xml
@@ -0,0 +1,392 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks backgrounds on table elements.
+ </p>
+ </info>
+ <variables>
+ <table>../../resources/images/fop-logo-gray-8bit.png</table>
+ <col>../../resources/images/bgimg72dpi.jpg</col>
+ <body>../../resources/images/fop-logo-color-24bit.png</body>
+ <row>../../../examples/fo/graphics/asf-logo.png</row>
+ <headFoot>../../../examples/fo/graphics/asf-logo.png</headFoot>
+ <header>../../resources/images/box1.png</header>
+ </variables>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page" page-height="10in" page-width="5in" margin="0.5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+
+ <fo:page-sequence master-reference="page" font-size="8pt" line-height="10pt">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block space-after="10pt">Before the table.</fo:block>
+ <fo:table width="100%" table-layout="fixed"
+ border-collapse="separate" border-separation="4pt" padding="2pt"
+ background-color="#F0F0F0" background-image="##table" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center"
+ border="4pt solid black">
+ <fo:table-column column-width="proportional-column-width(1)"
+ background-color="yellow" background-image="##col" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center"/>
+ <fo:table-column column-width="proportional-column-width(1)"
+ background-image="##col" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center"/>
+ <fo:table-header background-image="##headFoot" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-cell border="2pt solid blue">
+ <fo:block>Header 1.1</fo:block>
+ <fo:block>Header 1.1</fo:block>
+ <fo:block>Header 1.1</fo:block>
+ <fo:block>Header 1.1</fo:block>
+ <fo:block>Header 1.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid blue" background-color="yellow"
+ background-image="##header" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:block>Header 1.2</fo:block>
+ <fo:block>Header 1.2</fo:block>
+ <fo:block>Header 1.2</fo:block>
+ <fo:block>Header 1.2</fo:block>
+ <fo:block>Header 1.2</fo:block>
+ </fo:table-cell>
+ </fo:table-header>
+ <fo:table-footer background-image="##headFoot" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-cell border="2pt solid blue">
+ <fo:block>Footer 1.1</fo:block>
+ <fo:block>Footer 1.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid blue">
+ <fo:block>Footer 1.2</fo:block>
+ <fo:block>Footer 1.2</fo:block>
+ </fo:table-cell>
+ </fo:table-footer>
+ <fo:table-body>
+ <fo:table-row background-image="##row" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-cell border="2pt solid red" number-rows-spanned="2">
+ <fo:block>Cell 1.1</fo:block>
+ <fo:block>Cell 1.1</fo:block>
+ <fo:block>Cell 1.1</fo:block>
+ <fo:block>Cell 1.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell color="orange">
+ <fo:block>Cell 1.2</fo:block>
+ <fo:block>Cell 1.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row background-image="##row" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-cell border="2pt solid red" color="orange">
+ <fo:block>Cell 2.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row background-image="##row" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-cell border="2pt solid red" number-columns-spanned="2">
+ <fo:block>Cell 3.1</fo:block>
+ <fo:block>Cell 3.1</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row background-image="##row" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-cell border="2pt solid red">
+ <fo:block>Cell 4.1</fo:block>
+ <fo:block>Cell 4.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell color="orange">
+ <fo:block>Cell 4.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ <fo:table-body background-image="##body" background-repeat="no-repeat"
+ background-position-horizontal="center" background-position-vertical="center">
+ <fo:table-row>
+ <fo:table-cell border="2pt solid red" number-rows-spanned="2">
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1 Line 5</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ <fo:block>Cell 5.1 Line 10</fo:block>
+ <fo:block>Cell 5.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell color="orange">
+ <fo:block>Cell 5.2</fo:block>
+ <fo:block>Cell 5.2</fo:block>
+ <fo:block>Cell 5.2</fo:block>
+ <fo:block>Cell 5.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row>
+ <fo:table-cell border="2pt solid red" color="orange">
+ <fo:block>Cell 6.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+
+ </fo>
+ <checks>
+ <!-- table background -->
+ <eval expected="color=#f0f0f0,url=../../resources/images/fop-logo-gray-8bit.png,repeat=no-repeat,horiz=53480,vertical=108960"
+ xpath="//flow/block[2]/@background"/>
+
+ <!-- column background, header 1.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[1]/@ipd"/>
+ <eval expected="50000" xpath="//flow/block[2]/block[1]/@bpd"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[1]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[1]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[1]/@background"
+ expected="color=#ffff00,url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=54000"/>
+
+ <!-- table-header background, header 1.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[2]/@ipd"/>
+ <eval expected="50000" xpath="//flow/block[2]/block[2]/@bpd"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[2]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[2]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[2]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=76633,vertical=5877"/>
+
+
+ <!-- column background, header 1.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[4]/@ipd"/>
+ <eval expected="50000" xpath="//flow/block[2]/block[4]/@bpd"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[4]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[4]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[4]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=54000"/>
+
+ <!-- table-header background, header 1.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[5]/@ipd"/>
+ <eval expected="50000" xpath="//flow/block[2]/block[5]/@bpd"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[5]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[5]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[5]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=-67367,vertical=5877"/>
+
+ <!-- header 1.2 background -->
+ <eval expected="136000" xpath="//flow/block[2]/block[6]/@ipd"/>
+ <eval expected="50000" xpath="//flow/block[2]/block[6]/@bpd"/>
+ <eval expected="2000" xpath="//flow/block[2]/block[6]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[6]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[6]/@background"
+ expected="color=#ffff00,url=../../resources/images/box1.png,repeat=no-repeat,horiz=47995,vertical=4995"/>
+
+
+ <!-- column background, cell 1.2 -->
+ <eval expected="140000" xpath="//flow/block[2]/block[7]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[7]/@bpd"/>
+ <eval expected="60000" xpath="//flow/block[2]/block[7]/@top-offset"/>
+ <eval expected="146000" xpath="//flow/block[2]/block[7]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[7]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-26000,vertical=-2000"/>
+
+ <!-- table-row background, cell 1.2 -->
+ <eval expected="140000" xpath="//flow/block[2]/block[8]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[8]/@bpd"/>
+ <eval expected="60000" xpath="//flow/block[2]/block[8]/@top-offset"/>
+ <eval expected="146000" xpath="//flow/block[2]/block[8]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[8]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=-65367,vertical=-9122"/>
+
+
+ <!-- column background, cell 1.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[10]/@ipd"/>
+ <eval expected="40000" xpath="//flow/block[2]/block[10]/@bpd"/>
+ <eval expected="62000" xpath="//flow/block[2]/block[10]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[10]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[10]/@background"
+ expected="color=#ffff00,url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-4000"/>
+
+ <!-- table-row background, cell 1.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[11]/@ipd"/>
+ <eval expected="40000" xpath="//flow/block[2]/block[11]/@bpd"/>
+ <eval expected="62000" xpath="//flow/block[2]/block[11]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[11]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[11]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=76633,vertical=-11122"/>
+
+
+ <!-- column background, cell 2.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[13]/@ipd"/>
+ <eval expected="16000" xpath="//flow/block[2]/block[13]/@bpd"/>
+ <eval expected="86000" xpath="//flow/block[2]/block[13]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[13]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[13]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-28000"/>
+
+ <!-- table-row background, cell 2.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[14]/@ipd"/>
+ <eval expected="16000" xpath="//flow/block[2]/block[14]/@bpd"/>
+ <eval expected="86000" xpath="//flow/block[2]/block[14]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[14]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[14]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=-67367,vertical=-11122"/>
+
+
+ <!-- column background, cell 3.1 -->
+ <eval expected="280000" xpath="//flow/block[2]/block[16]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[16]/@bpd"/>
+ <eval expected="110000" xpath="//flow/block[2]/block[16]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[16]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[16]/@background"
+ expected="color=#ffff00,url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-52000"/>
+
+ <!-- table-row background, cell 3.1 -->
+ <eval expected="280000" xpath="//flow/block[2]/block[17]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[17]/@bpd"/>
+ <eval expected="110000" xpath="//flow/block[2]/block[17]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[17]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[17]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=76633,vertical=-9122"/>
+
+
+ <!-- column background, cell 4.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[19]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[19]/@bpd"/>
+ <eval expected="138000" xpath="//flow/block[2]/block[19]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[19]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[19]/@background"
+ expected="color=#ffff00,url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-80000"/>
+
+ <!-- table-row background, cell 4.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[20]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[20]/@bpd"/>
+ <eval expected="138000" xpath="//flow/block[2]/block[20]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[20]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[20]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=76633,vertical=-9122"/>
+
+
+ <!-- column background, cell 4.2 -->
+ <eval expected="140000" xpath="//flow/block[2]/block[22]/@ipd"/>
+ <eval expected="24000" xpath="//flow/block[2]/block[22]/@bpd"/>
+ <eval expected="136000" xpath="//flow/block[2]/block[22]/@top-offset"/>
+ <eval expected="146000" xpath="//flow/block[2]/block[22]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[22]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-26000,vertical=-78000"/>
+
+ <!-- table-row background, cell 4.2 -->
+ <eval expected="140000" xpath="//flow/block[2]/block[23]/@ipd"/>
+ <eval expected="24000" xpath="//flow/block[2]/block[23]/@bpd"/>
+ <eval expected="136000" xpath="//flow/block[2]/block[23]/@top-offset"/>
+ <eval expected="146000" xpath="//flow/block[2]/block[23]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[23]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=-65367,vertical=-7122"/>
+
+
+ <!-- column background, cell 5.2 -->
+ <eval expected="140000" xpath="//flow/block[2]/block[25]/@ipd"/>
+ <eval expected="40000" xpath="//flow/block[2]/block[25]/@bpd"/>
+ <eval expected="164000" xpath="//flow/block[2]/block[25]/@top-offset"/>
+ <eval expected="146000" xpath="//flow/block[2]/block[25]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[25]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-26000,vertical=-106000"/>
+
+ <!-- table-body background, cell 5.2 -->
+ <eval expected="140000" xpath="//flow/block[2]/block[26]/@ipd"/>
+ <eval expected="40000" xpath="//flow/block[2]/block[26]/@bpd"/>
+ <eval expected="164000" xpath="//flow/block[2]/block[26]/@top-offset"/>
+ <eval expected="146000" xpath="//flow/block[2]/block[26]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[26]/@background"
+ expected="url=../../resources/images/fop-logo-color-24bit.png,repeat=no-repeat,horiz=-94513,vertical=9964"/>
+
+
+ <!-- column background, cell 5.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[28]/@ipd"/>
+ <eval expected="110000" xpath="//flow/block[2]/block[28]/@bpd"/>
+ <eval expected="166000" xpath="//flow/block[2]/block[28]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[28]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[28]/@background"
+ expected="color=#ffff00,url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-108000"/>
+
+ <!-- table-body background, cell 5.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[29]/@ipd"/>
+ <eval expected="110000" xpath="//flow/block[2]/block[29]/@bpd"/>
+ <eval expected="166000" xpath="//flow/block[2]/block[29]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[29]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[29]/@background"
+ expected="url=../../resources/images/fop-logo-color-24bit.png,repeat=no-repeat,horiz=47487,vertical=7964"/>
+
+
+ <!-- column background, cell 6.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[31]/@ipd"/>
+ <eval expected="66000" xpath="//flow/block[2]/block[31]/@bpd"/>
+ <eval expected="210000" xpath="//flow/block[2]/block[31]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[31]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[31]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-152000"/>
+
+ <!-- table-body background, cell 6.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[32]/@ipd"/>
+ <eval expected="66000" xpath="//flow/block[2]/block[32]/@bpd"/>
+ <eval expected="210000" xpath="//flow/block[2]/block[32]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[32]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[32]/@background"
+ expected="url=../../resources/images/fop-logo-color-24bit.png,repeat=no-repeat,horiz=-96513,vertical=-36036"/>
+
+
+ <!-- column background, footer 1.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[34]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[34]/@bpd"/>
+ <eval expected="284000" xpath="//flow/block[2]/block[34]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[34]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[34]/@background"
+ expected="color=#ffff00,url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-226000"/>
+
+ <!-- table-footer background, footer 1.1 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[35]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[35]/@bpd"/>
+ <eval expected="284000" xpath="//flow/block[2]/block[35]/@top-offset"/>
+ <eval expected="4000" xpath="//flow/block[2]/block[35]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[35]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=76633,vertical=-9122"/>
+
+
+ <!-- column background, footer 1.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[37]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[37]/@bpd"/>
+ <eval expected="284000" xpath="//flow/block[2]/block[37]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[37]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[37]/@background"
+ expected="url=../../resources/images/bgimg72dpi.jpg,repeat=no-repeat,horiz=-28000,vertical=-226000"/>
+
+ <!-- table-footer background, footer 1.2 -->
+ <eval expected="136000" xpath="//flow/block[2]/block[38]/@ipd"/>
+ <eval expected="20000" xpath="//flow/block[2]/block[38]/@bpd"/>
+ <eval expected="284000" xpath="//flow/block[2]/block[38]/@top-offset"/>
+ <eval expected="148000" xpath="//flow/block[2]/block[38]/@left-offset"/>
+ <eval xpath="//flow/block[2]/block[38]/@background"
+ expected="url=../../../examples/fo/graphics/asf-logo.png,repeat=no-repeat,horiz=-67367,vertical=-9122"/>
+
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/table_backgrounds_2.xml b/test/layoutengine/standard-testcases/table_backgrounds_2.xml
new file mode 100644
index 000000000..300d54234
--- /dev/null
+++ b/test/layoutengine/standard-testcases/table_backgrounds_2.xml
@@ -0,0 +1,113 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks background painting for fo:table-row, fo:table-body and fo:table-column
+ when the cells use padding.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="normal">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:table table-layout="fixed" width="100%">
+ <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell id="bg-cell" padding="2pt 3pt 4pt 5pt" border="solid 2pt" background-color="lightgray">
+ <fo:block>background on cell</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt 3pt 4pt 5pt" border="solid 2pt" background-color="lightgray">
+ <fo:block>background on cell</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row background-color="yellow">
+ <fo:table-cell id="bg-row" padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on row</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on row</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ <fo:table-body background-color="orange">
+ <fo:table-row>
+ <fo:table-cell id="bg-body" padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on body</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on body</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ <fo:table table-layout="fixed" width="100%">
+ <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"
+ background-color="violet"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell id="bg-col" padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on column</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on column</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ <fo:table table-layout="fixed" width="100%" background-color="red">
+ <fo:table-column column-width="proportional-column-width(1)" number-columns-repeated="2"/>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell id="bg-table" padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on table</fo:block>
+ </fo:table-cell>
+ <fo:table-cell padding="2pt 3pt 4pt 5pt" border="solid 2pt">
+ <fo:block>background on table</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <eval expected="20400" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@bpd"/>
+ <eval expected="178000" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@ipd"/>
+ <eval expected="23400" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@top-offset"/>
+ <eval expected="1000" xpath="//block[@prod-id='bg-row']/preceding-sibling::block[1]/@left-offset"/>
+
+ <eval expected="20400" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@bpd"/>
+ <eval expected="178000" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@ipd"/>
+ <eval expected="45800" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@top-offset"/>
+ <eval expected="1000" xpath="//block[@prod-id='bg-body']/preceding-sibling::block[1]/@left-offset"/>
+
+ <eval expected="20400" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@bpd"/>
+ <eval expected="178000" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@ipd"/>
+ <eval expected="1000" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@top-offset"/>
+ <eval expected="1000" xpath="//block[@prod-id='bg-col']/preceding-sibling::block[1]/@left-offset"/>
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/table_border-collapse_collapse_1.xml b/test/layoutengine/standard-testcases/table_border-collapse_collapse_1.xml
deleted file mode 100644
index 052eaa1c9..000000000
--- a/test/layoutengine/standard-testcases/table_border-collapse_collapse_1.xml
+++ /dev/null
@@ -1,130 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks tables with collapse border model. Simple cell borders to start with.
- </p>
- </info>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="20pt">
- <fo:region-body margin="0pt"/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal" white-space-collapse="true">
- <fo:flow flow-name="xsl-region-body">
- <fo:block-container height="20pt" background-color="lightgray">
- <fo:block>block before table</fo:block>
- </fo:block-container>
- <fo:block margin="0pt" border="groove 5pt green" border-right="15pt" height="20pt">normal border here</fo:block>
- <fo:block-container margin-left="150pt" width="150pt + 7.5pt" height="5pt" background-color="gray">
- <fo:block/>
- </fo:block-container>
- <fo:block-container margin-left="150pt + 7.5pt" width="150pt - 7.5pt - 7.5pt" height="5pt" background-color="gray">
- <fo:block/>
- </fo:block-container>
- <fo:table table-layout="fixed" width="100%" border-collapse="collapse" background-color="rgb(90%, 90%, 100%)">
- <fo:table-column column-width="150pt"/>
- <fo:table-column column-width="150pt"/>
- <fo:table-body>
- <fo:table-row height="50pt">
- <fo:table-cell border="solid 15pt blue">
- <fo:block text-align="justify">cell1 cell1 cell1 cell1 cell1 cell1 cell1</fo:block>
- </fo:table-cell>
- <fo:table-cell background-color="yellow" border="solid 5pt black" border-right="groove 15pt red" border-top="dotted 5pt black" border-bottom="dotted 5pt green">
- <fo:block text-align="justify">cell2 cell2 cell2 cell2 cell2 cell2 cell2</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell background-color="orange">
- <fo:block>cell3</fo:block>
- </fo:table-cell>
- <fo:table-cell border="solid 10pt red" border-top="dotted 5pt red">
- <fo:block>cell4</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- <fo:block background-color="lightgray">block after table</fo:block>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <!-- table dimensions -->
- <eval expected="320000" xpath="//flow/block[5]/@ipd"/>
- <eval expected="71900" xpath="//flow/block[5]/@bpd"/>
-
- <!-- cell 1 -->
- <true xpath="//flow/block[5]/block[1]/@is-reference-area"/>
- <eval expected="7500" xpath="//flow/block[5]/block[1]/@left-offset"/>
- <eval expected="7500" xpath="//flow/block[5]/block[1]/@top-offset"/>
- <eval expected="135000" xpath="//flow/block[5]/block[1]/@ipd"/>
- <eval expected="35000" xpath="//flow/block[5]/block[1]/@bpd"/>
- <eval expected="(solid,#0000ff,15000,collapse-outer)" xpath="//flow/block[5]/block[1]/@border-before"/>
- <eval expected="(solid,#0000ff,15000,collapse-inner)" xpath="//flow/block[5]/block[1]/@border-after"/>
- <eval expected="(solid,#0000ff,15000,collapse-outer)" xpath="//flow/block[5]/block[1]/@border-start"/>
- <eval expected="(solid,#0000ff,15000,collapse-inner)" xpath="//flow/block[5]/block[1]/@border-end"/>
- <eval expected="135000" xpath="//flow/block[5]/block[1]/block[1]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[5]/block[1]/block[1]/@bpd"/>
-
- <!-- cell 2 -->
- <true xpath="//flow/block[5]/block[2]/@is-reference-area"/>
- <eval expected="157500" xpath="//flow/block[5]/block[2]/@left-offset"/>
- <eval expected="2500" xpath="//flow/block[5]/block[2]/@top-offset"/>
- <eval expected="135000" xpath="//flow/block[5]/block[2]/@ipd"/>
- <eval expected="40000" xpath="//flow/block[5]/block[2]/@bpd"/>
- <eval expected="(dotted,#000000,5000,collapse-outer)" xpath="//flow/block[5]/block[2]/@border-before"/>
- <eval expected="(dotted,#00ff00,5000,collapse-inner)" xpath="//flow/block[5]/block[2]/@border-after"/>
- <eval expected="(solid,#0000ff,15000,collapse-inner)" xpath="//flow/block[5]/block[2]/@border-start"/>
- <eval expected="(groove,#ff0000,15000,collapse-outer)" xpath="//flow/block[5]/block[2]/@border-end"/>
- <eval expected="color=#ffff00,repeat=0,horiz=0,vertical=0" xpath="//flow/block[5]/block[2]/@background"/>
- <eval expected="135000" xpath="//flow/block[5]/block[2]/block[1]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[5]/block[2]/block[1]/@bpd"/>
-
- <!-- cell 3 -->
- <true xpath="//flow/block[5]/block[3]/@is-reference-area"/>
- <true xpath="not(boolean(//flow/block[5]/block[3]/@left-offset)) or (//flow/block[5]/block[3]/@left-offset = 0)"/>
- <eval expected="57500" xpath="//flow/block[5]/block[3]/@top-offset"/>
- <eval expected="145000" xpath="//flow/block[5]/block[3]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[5]/block[3]/@bpd"/>
- <eval expected="(solid,#0000ff,15000,collapse-inner)" xpath="//flow/block[5]/block[3]/@border-before"/>
- <true xpath="not(boolean(//flow/block[5]/block[3]/@border-after))"/>
- <true xpath="not(boolean(//flow/block[5]/block[3]/@border-start))"/>
- <eval expected="(solid,#ff0000,10000,collapse-inner)" xpath="//flow/block[5]/block[3]/@border-end"/>
- <eval expected="color=#ffa500,repeat=0,horiz=0,vertical=0" xpath="//flow/block[5]/block[3]/@background"/>
- <eval expected="145000" xpath="//flow/block[5]/block[3]/block[1]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[5]/block[3]/block[1]/@bpd"/>
-
- <!-- cell 4 -->
- <true xpath="//flow/block[5]/block[4]/@is-reference-area"/>
- <eval expected="155000" xpath="//flow/block[5]/block[4]/@left-offset"/>
- <eval expected="52500" xpath="//flow/block[5]/block[4]/@top-offset"/>
- <eval expected="140000" xpath="//flow/block[5]/block[4]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[5]/block[4]/@bpd"/>
- <eval expected="(dotted,#ff0000,5000,collapse-inner)" xpath="//flow/block[5]/block[3]/@border-before"/>
- <eval expected="(solid,#ff0000,10000,collapse-outer)" xpath="//flow/block[5]/block[3]/@border-after"/>
- <eval expected="(solid,#ff0000,10000,collapse-inner)" xpath="//flow/block[5]/block[3]/@border-start"/>
- <eval expected="(solid,#ff0000,10000,collapse-outer)" xpath="//flow/block[5]/block[3]/@border-end"/>
- <eval expected="140000" xpath="//flow/block[5]/block[4]/block[1]/@ipd"/>
- <eval expected="14400" xpath="//flow/block[5]/block[4]/block[1]/@bpd"/>
- </checks>
-</testcase>
diff --git a/test/layoutengine/standard-testcases/table_border-collapse_collapse_2.xml b/test/layoutengine/standard-testcases/table_border-collapse_collapse_2.xml
deleted file mode 100644
index cd2575822..000000000
--- a/test/layoutengine/standard-testcases/table_border-collapse_collapse_2.xml
+++ /dev/null
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<!-- $Id$ -->
-<testcase>
- <info>
- <p>
- This test checks tables with collapse border model. Simple cell borders to start with.
- </p>
- </info>
- <fo>
- <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format" xmlns:svg="http://www.w3.org/2000/svg">
- <fo:layout-master-set>
- <fo:simple-page-master master-name="normal" page-width="5in" page-height="5in" margin="20pt">
- <fo:region-body margin="0pt"/>
- </fo:simple-page-master>
- </fo:layout-master-set>
- <fo:page-sequence master-reference="normal" white-space-collapse="true">
- <fo:flow flow-name="xsl-region-body">
- <fo:block background-color="lightgray">block before table</fo:block>
- <fo:table table-layout="fixed" width="100%" border-collapse="collapse" padding="5pt">
- <fo:table-column column-width="2in"/>
- <fo:table-column column-width="2in"/>
- <fo:table-body>
- <fo:table-row>
- <fo:table-cell border="solid 10pt blue">
- <fo:block>cell1</fo:block>
- </fo:table-cell>
- <fo:table-cell background-color="yellow" border="solid 5pt black">
- <fo:block>cell2</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row>
- <fo:table-cell background-color="orange" border="dotted 15pt black" number-columns-spanned="2">
- <fo:block>spanned</fo:block>
- </fo:table-cell>
- </fo:table-row>
- <fo:table-row border="solid 15pt green">
- <fo:table-cell>
- <fo:block>cell4</fo:block>
- </fo:table-cell>
- <fo:table-cell background-color="yellow">
- <fo:block>cell5</fo:block>
- </fo:table-cell>
- </fo:table-row>
- </fo:table-body>
- </fo:table>
- <fo:block background-color="lightgray">block after table</fo:block>
- </fo:flow>
- </fo:page-sequence>
- </fo:root>
- </fo>
- <checks>
- <eval expected="add checks here" xpath="false"/>
- </checks>
-</testcase>
diff --git a/test/layoutengine/standard-testcases/table_border-collapse_separate_1.xml b/test/layoutengine/standard-testcases/table_border-collapse_separate_1.xml
index d0b11c1b0..8a9370a5c 100644
--- a/test/layoutengine/standard-testcases/table_border-collapse_separate_1.xml
+++ b/test/layoutengine/standard-testcases/table_border-collapse_separate_1.xml
@@ -31,7 +31,7 @@
</fo:layout-master-set>
<fo:page-sequence master-reference="normal" white-space-collapse="true">
<fo:flow flow-name="xsl-region-body">
- <fo:table table-layout="fixed" border-collapse="separate">
+ <fo:table table-layout="fixed" width="100%" border-collapse="separate">
<fo:table-column column-width="160pt"/>
<fo:table-column column-width="200pt"/>
<fo:table-body>
diff --git a/test/layoutengine/standard-testcases/table_border_padding.xml b/test/layoutengine/standard-testcases/table_border_padding.xml
index 7099d5dd1..385242903 100644
--- a/test/layoutengine/standard-testcases/table_border_padding.xml
+++ b/test/layoutengine/standard-testcases/table_border_padding.xml
@@ -66,8 +66,8 @@
</fo>
<checks>
<!-- table dimensions -->
- <eval expected="308000" xpath="//flow/block[2]/@ipda"/>
- <eval expected="288000" xpath="//flow/block[2]/@ipd"/>
+ <eval expected="328000" xpath="//flow/block[2]/@ipda"/>
+ <eval expected="308000" xpath="//flow/block[2]/@ipd"/>
<eval expected="48800" xpath="//flow/block[2]/@bpda"/>
<eval expected="28800" xpath="//flow/block[2]/@bpd"/>
<eval expected="10000 10000 10000 10000" xpath="//flow/block[2]/@bap"/>
@@ -95,7 +95,7 @@
<eval expected="144000" xpath="//flow/block[2]/block[2]/block[1]/@ipd"/>
<eval expected="14400" xpath="//flow/block[2]/block[2]/block[1]/@bpd"/>
<eval expected="cell2" xpath="//flow/block[2]/block[2]/block[1]/lineArea"/>
- <eval expected="color=#ffff00,repeat=0,horiz=0,vertical=0" xpath="//flow/block[2]/block[2]/@background"/>
+ <eval expected="color=#ffff00" xpath="//flow/block[2]/block[2]/@background"/>
<!-- cell 3 -->
<true xpath="//flow/block[2]/block[3]/@is-reference-area"/>
@@ -106,7 +106,7 @@
<eval expected="144000" xpath="//flow/block[2]/block[3]/block[1]/@ipd"/>
<eval expected="14400" xpath="//flow/block[2]/block[3]/block[1]/@bpd"/>
<eval expected="cell3" xpath="//flow/block[2]/block[3]/block[1]/lineArea"/>
- <eval expected="color=#ffa500,repeat=0,horiz=0,vertical=0" xpath="//flow/block[2]/block[3]/@background"/>
+ <eval expected="color=#ffa500" xpath="//flow/block[2]/block[3]/@background"/>
<!-- cell 4 -->
<true xpath="//flow/block[2]/block[4]/@is-reference-area"/>
@@ -121,19 +121,27 @@
<element-list category="breaker">
<box w="14400"/>
<penalty w="0" p="0"/>
- <box w="10000" aux="true"/>
+ <box w="0" aux="true"/>
+ <penalty w="0" p="INF" aux="true"/>
+ <glue w="10000" y="0" z="0" aux="true"/>
<box w="14400"/>
- <penalty w="20000" p="0"/>
+ <penalty w="0" p="0"/>
<box w="14400"/>
- <box w="10000" aux="true"/>
+ <penalty w="0" p="INF" aux="true"/>
+ <glue w="10000" y="0" z="0" aux="true"/>
<penalty w="0" p="0"/>
<box w="14400"/>
<penalty w="0" p="0"/>
- <box w="10000" aux="true"/>
+ <box w="0" aux="true"/>
+ <penalty w="0" p="INF" aux="true"/>
+ <glue w="10000" y="0" z="0" aux="true"/>
<box w="14400"/>
- <box w="10000" aux="true"/>
+ <box w="0" aux="true"/>
+ <penalty w="0" p="INF" aux="true"/>
+ <glue w="10000" y="0" z="0" aux="true"/>
+ <box w="0" aux="true"/>
<skip>3</skip>
</element-list>
-
+
</checks>
</testcase>
diff --git a/test/layoutengine/standard-testcases/table_bug44621.xml b/test/layoutengine/standard-testcases/table_bug44621.xml
new file mode 100644
index 000000000..b4b9edbd0
--- /dev/null
+++ b/test/layoutengine/standard-testcases/table_bug44621.xml
@@ -0,0 +1,105 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This is a testcase for bug #44621: when the width of the after border of a cell, in the
+ trailing case, is bigger than in the normal case, a wrong sequence of Knuth elements was
+ generated, leading to some content being swallowed.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page" page-height="4in" page-width="5in" margin="0.5in">
+ <fo:region-body background-color="#F0F0F0"/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="page" font-size="12pt">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block space-after="10pt">The after borders of the body’s cells, in the trailing case,
+ are thicker than in the normal case.</fo:block>
+ <fo:table width="100%" table-layout="fixed"
+ font-size="8pt" line-height="10pt">
+ <fo:table-column column-width="proportional-column-width(1)"
+ number-columns-repeated="2"/>
+ <fo:table-footer>
+ <fo:table-cell border="4pt solid blue">
+ <fo:block>Footer 1.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="4pt solid blue">
+ <fo:block>Footer 1.2</fo:block>
+ </fo:table-cell>
+ </fo:table-footer>
+ <fo:table-body>
+ <fo:table-row>
+ <fo:table-cell border="2pt solid black">
+ <fo:block>Cell 1.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid black">
+ <fo:block>Cell 1.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row>
+ <fo:table-cell border="2pt solid black">
+ <fo:block>Cell 2.1</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="2pt solid black">
+ <fo:block>Cell 2.2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+
+ <eval expected="39000" xpath="//pageViewport//flow/block[2]/@bpd"/>
+ <eval expected="39000" xpath="//pageViewport//flow/block[2]/@bpda"/>
+ <!-- cell 1.1 -->
+ <eval expected="10000" xpath="//pageViewport//flow/block[2]/block[1]/@bpd"/>
+ <eval expected="14000" xpath="//pageViewport//flow/block[2]/block[1]/@bpda"/>
+ <!-- cell 1.2 -->
+ <eval expected="10000" xpath="//pageViewport//flow/block[2]/block[2]/@bpd"/>
+ <eval expected="14000" xpath="//pageViewport//flow/block[2]/block[2]/@bpda"/>
+ <!-- cell 2.1 -->
+ <eval expected="10000" xpath="//pageViewport//flow/block[2]/block[3]/@bpd"/>
+ <eval expected="16000" xpath="//pageViewport//flow/block[2]/block[3]/@bpda"/>
+ <!-- cell 2.2 -->
+ <eval expected="10000" xpath="//pageViewport//flow/block[2]/block[4]/@bpd"/>
+ <eval expected="16000" xpath="//pageViewport//flow/block[2]/block[4]/@bpda"/>
+ <!-- footer 1.1 -->
+ <eval expected="10000" xpath="//pageViewport//flow/block[2]/block[5]/@bpd"/>
+ <eval expected="18000" xpath="//pageViewport//flow/block[2]/block[5]/@bpda"/>
+ <!-- footer 1.2 -->
+ <eval expected="10000" xpath="//pageViewport//flow/block[2]/block[6]/@bpd"/>
+ <eval expected="18000" xpath="//pageViewport//flow/block[2]/block[6]/@bpda"/>
+
+ <element-list category="breaker">
+ <skip>4</skip>
+ <box w="12000"/>
+ <penalty w="14000" p="0"/><!-- should be 15000 -->
+ <box w="13000"/>
+ <box w="14000"/>
+ <skip>3</skip>
+ </element-list>
+ </checks>
+</testcase>
diff --git a/test/layoutengine/standard-testcases/table_row-delay_fixed-row-height.xml b/test/layoutengine/standard-testcases/table_row-delay_fixed-row-height.xml
index 70990de62..0c6ed10eb 100644
--- a/test/layoutengine/standard-testcases/table_row-delay_fixed-row-height.xml
+++ b/test/layoutengine/standard-testcases/table_row-delay_fixed-row-height.xml
@@ -144,9 +144,9 @@
<element-list category="breaker">
<skip>3</skip>
- <box w="200"/>
- <penalty w="34800" p="INF"/>
- <box w="33600"/>
+ <box w="17000"/>
+ <penalty w="15000" p="0"/>
+ <box w="16800"/>
<penalty w="1800" p="0"/>
<box w="31200"/>
<penalty w="8000" p="0"/>
diff --git a/test/layoutengine/standard-testcases/table_row-height_break.xml b/test/layoutengine/standard-testcases/table_row-height_break.xml
new file mode 100644
index 000000000..b6c7d8d37
--- /dev/null
+++ b/test/layoutengine/standard-testcases/table_row-height_break.xml
@@ -0,0 +1,87 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<!-- $Id$ -->
+<testcase>
+ <info>
+ <p>
+ This test checks that a forced break is still taken into account when the minimal height of a
+ row is not reached yet.
+ </p>
+ </info>
+ <fo>
+ <fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+ <fo:layout-master-set>
+ <fo:simple-page-master master-name="page" page-height="4in" page-width="5in" margin="0.5in">
+ <fo:region-body/>
+ </fo:simple-page-master>
+ </fo:layout-master-set>
+ <fo:page-sequence master-reference="page">
+ <fo:flow flow-name="xsl-region-body">
+ <fo:block>The first row of the following table has a fixed height, and a forced break
+ occurs before this height is reached.</fo:block>
+ <fo:table width="100%" table-layout="fixed"
+ border-collapse="separate" border="4pt solid black">
+ <fo:table-body>
+ <fo:table-row block-progression-dimension.minimum="40pt">
+ <fo:table-cell border="4pt solid red">
+ <fo:block>Cell 1</fo:block>
+ <fo:block break-before="page">Should be on a new page</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="4pt solid blue">
+ <fo:block>Cell 2</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ <fo:table-row block-progression-dimension.minimum="50pt">
+ <fo:table-cell border="4pt solid blue">
+ <fo:block>Cell 3</fo:block>
+ </fo:table-cell>
+ <fo:table-cell border="4pt solid blue">
+ <fo:block>Cell 4</fo:block>
+ </fo:table-cell>
+ </fo:table-row>
+ </fo:table-body>
+ </fo:table>
+ </fo:flow>
+ </fo:page-sequence>
+ </fo:root>
+ </fo>
+ <checks>
+ <!-- page 1 -->
+ <eval expected="44000" xpath="//pageViewport[1]//flow/block[2]/@bpd"/>
+ <eval expected="48000" xpath="//pageViewport[1]//flow/block[2]/@bpda"/>
+ <eval expected="40000" xpath="//pageViewport[1]//flow/block[2]/block[1]/@bpd"/>
+ <eval expected="44000" xpath="//pageViewport[1]//flow/block[2]/block[1]/@bpda"/>
+ <eval expected="Cell 1" xpath="//pageViewport[1]//flow/block[2]/block[1]//text"/>
+ <eval expected="40000" xpath="//pageViewport[1]//flow/block[2]/block[2]/@bpd"/>
+ <eval expected="44000" xpath="//pageViewport[1]//flow/block[2]/block[2]/@bpda"/>
+ <eval expected="Cell 2" xpath="//pageViewport[1]//flow/block[2]/block[2]//text"/>
+ <!-- page 2 -->
+ <eval expected="90800" xpath="//pageViewport[2]//flow/block[1]/@bpd"/>
+ <eval expected="94800" xpath="//pageViewport[2]//flow/block[1]/@bpda"/>
+ <eval expected="28800" xpath="//pageViewport[2]//flow/block[1]/block[1]/@bpd"/>
+ <eval expected="32800" xpath="//pageViewport[2]//flow/block[1]/block[1]/@bpda"/>
+ <eval expected="Should be on a new" xpath="//pageViewport[2]//flow/block[1]/block[1]//text"/>
+ <eval expected="28800" xpath="//pageViewport[2]//flow/block[1]/block[2]/@bpd"/>
+ <eval expected="32800" xpath="//pageViewport[2]//flow/block[1]/block[2]/@bpda"/>
+ <eval expected="" xpath="//pageViewport[2]//flow/block[1]/block[2]//text"/>
+ <eval expected="50000" xpath="//pageViewport[2]//flow/block[1]/block[3]/@bpd"/>
+ <eval expected="58000" xpath="//pageViewport[2]//flow/block[1]/block[3]/@bpda"/>
+ <eval expected="50000" xpath="//pageViewport[2]//flow/block[1]/block[4]/@bpd"/>
+ <eval expected="58000" xpath="//pageViewport[2]//flow/block[1]/block[4]/@bpda"/>
+ </checks>
+</testcase>