From 667e7040b73af096b23795ba15b69d17a585450c Mon Sep 17 00:00:00 2001 From: Vincent Hennebert Date: Thu, 18 Jun 2009 15:55:00 +0000 Subject: [PATCH] Obsolete branch moved to archive git-svn-id: https://svn.apache.org/repos/asf/xmlgraphics/fop/branches/archive@786135 13f79535-47bb-0310-9956-ffa450edef68 --- fop-0_14_0_regions/LICENSE | 48 + fop-0_14_0_regions/README | 22 + fop-0_14_0_regions/STATUS | 168 + fop-0_14_0_regions/build.bat | 29 + fop-0_14_0_regions/build.sh | 25 + fop-0_14_0_regions/build.xml | 403 ++ .../docs/bugtests/list-mountjoy.fo | 244 + .../docs/bugtests/list-nested-breaks.fo | 196 + .../docs/bugtests/list-nested.fo | 172 + .../docs/bugtests/svg-apachexml.fo | 446 ++ .../docs/bugtests/svg-lingrad.fo | 28 + fop-0_14_0_regions/docs/design/apps.gif | Bin 0 -> 27730 bytes fop-0_14_0_regions/docs/design/datatypes.gif | Bin 0 -> 22014 bytes fop-0_14_0_regions/docs/design/flow.gif | Bin 0 -> 77894 bytes fop-0_14_0_regions/docs/design/fo.gif | Bin 0 -> 67063 bytes fop-0_14_0_regions/docs/design/fop.gif | Bin 0 -> 27458 bytes fop-0_14_0_regions/docs/design/image.gif | Bin 0 -> 24718 bytes fop-0_14_0_regions/docs/design/layout.gif | Bin 0 -> 68250 bytes fop-0_14_0_regions/docs/design/messaging.gif | Bin 0 -> 9965 bytes fop-0_14_0_regions/docs/design/pagination.gif | Bin 0 -> 52924 bytes fop-0_14_0_regions/docs/design/pdf.gif | Bin 0 -> 81474 bytes fop-0_14_0_regions/docs/design/render_pdf.gif | Bin 0 -> 19806 bytes fop-0_14_0_regions/docs/examples/build.xml | 107 + fop-0_14_0_regions/docs/examples/fo/border.fo | 173 + .../docs/examples/fo/extensive.fo | 147 + fop-0_14_0_regions/docs/examples/fo/fonts.fo | 65 + fop-0_14_0_regions/docs/examples/fo/images.fo | 83 + .../docs/examples/fo/instream.fo | 132 + fop-0_14_0_regions/docs/examples/fo/leader.fo | 84 + fop-0_14_0_regions/docs/examples/fo/link.fo | 124 + fop-0_14_0_regions/docs/examples/fo/list.fo | 131 + fop-0_14_0_regions/docs/examples/fo/normal.fo | 148 + fop-0_14_0_regions/docs/examples/fo/readme.fo | 1349 +++++ fop-0_14_0_regions/docs/examples/fo/table.fo | 134 + .../docs/examples/pagination/basic1.fo | 112 + .../docs/examples/pagination/basic2.fo | 115 + .../examples/pagination/common_regnames.fo | 305 ++ .../pagination/errors/bad_region_name.fo | 313 ++ .../pagination/errors/duplicate_flownames.fo | 313 ++ .../pagination/errors/errors_readme.txt | 52 + .../errors/missing_flow_flowname.fo | 313 ++ .../pagination/errors/missing_sc_flowname.fo | 312 ++ .../errors/regnames_not_same_class.fo | 306 ++ .../errors/unique_region_names_in_pm.fo | 313 ++ .../pagination/errors/unmapped_flow_name.fo | 312 ++ .../examples/pagination/franklin_2pageseqs.fo | 1078 ++++ .../docs/examples/pagination/franklin_alt.fo | 1053 ++++ .../docs/examples/pagination/franklin_bnb.fo | 1055 ++++ .../docs/examples/pagination/franklin_rep.fo | 1022 ++++ .../pagination/franklin_rep_max_repeats.fo | 1024 ++++ .../franklin_rep_max_repeats_expl.fo | 1024 ++++ .../pagination/franklin_rep_max_repeats_nl.fo | 1024 ++++ .../examples/pagination/franklin_sc001.fo | 1072 ++++ .../examples/pagination/franklin_sc002.fo | 1152 ++++ .../docs/examples/pagination/multflows.fo | 1896 +++++++ .../docs/examples/pagination/threepageseqs.fo | 2006 +++++++ fop-0_14_0_regions/docs/examples/results.html | 6 + fop-0_14_0_regions/docs/examples/runtests.bat | 27 + fop-0_14_0_regions/docs/examples/runtests.sh | 25 + fop-0_14_0_regions/docs/examples/svg/All.xml | 12 + .../docs/examples/svg/BasicExamples.xml | 193 + .../docs/examples/svg/Design.xml | 366 ++ .../docs/examples/svg/Document.dtd | 39 + .../docs/examples/svg/Document.xsl | 294 ++ .../docs/examples/svg/Examples.xml | 10 + .../docs/examples/svg/LargeExamples.xml | 67 + fop-0_14_0_regions/docs/examples/svg/Misc.xml | 34 + .../docs/examples/svg/MoreTests.xml | 78 + .../docs/examples/svg/Tests.xml | 10 + fop-0_14_0_regions/docs/examples/svg/Todo.xml | 337 ++ .../docs/examples/svg/UnitTests.xml | 111 + .../docs/examples/svg/apache-diagrams.xml | 540 ++ .../docs/examples/svg/arch-diagrams.xml | 70 + .../docs/examples/svg/build.xml | 156 + .../docs/examples/svg/diagrams.dtd | 9 + .../docs/examples/svg/ex-diagrams.xml | 203 + .../docs/examples/svg/image.jpg | Bin 0 -> 7234 bytes .../docs/examples/svg/makedoc.bat | 25 + .../docs/examples/svg/makedoc.sh | 25 + .../docs/examples/svg/misc-diagrams.xml | 4639 +++++++++++++++++ .../docs/examples/svg/mozilla-diagrams.xml | 122 + .../docs/examples/svg/test/arcs.svg | 18 + .../docs/examples/svg/test/initialCoords.svg | 19 + .../docs/examples/svg/test/junk.svg | 11 + .../docs/examples/svg/test/molecule.svg | 72 + .../docs/examples/svg/test/nested.svg | 45 + .../docs/examples/svg/test/newCSSUnits.svg | 41 + .../docs/examples/svg/test/newCoordSys.svg | 32 + .../docs/examples/svg/test/newViewport.svg | 16 + .../docs/examples/svg/test/origCoordSys.svg | 16 + .../examples/svg/test/preserveAspectRatio.svg | 156 + .../docs/examples/svg/test/rotateScale.svg | 40 + .../docs/examples/svg/test/shapes.svg | 50 + .../docs/examples/svg/test/skew.svg | 37 + .../docs/examples/svg/test/transformTest.svg | 31 + .../docs/examples/svg/test/units.svg | 22 + .../docs/examples/svg/test/use01.svg | 10 + .../docs/examples/svg/test/use02.svg | 17 + .../docs/examples/svg/test/use03.svg | 9 + .../docs/examples/svg/test/viewBox1.svg | 21 + .../docs/examples/svg/test/viewBox2.svg | 24 + fop-0_14_0_regions/docs/graphics/fop.jpg | Bin 0 -> 1220 bytes fop-0_14_0_regions/docs/graphics/linux.bmp | Bin 0 -> 13198 bytes .../docs/graphics/xml_feather.gif | Bin 0 -> 4207 bytes .../docs/graphics/xml_feather_transparent.gif | Bin 0 -> 4208 bytes .../docs/html-docs/architecture.html | 276 + fop-0_14_0_regions/docs/html-docs/bugs.html | 44 + .../docs/html-docs/compiling.html | 86 + .../docs/html-docs/download.html | 33 + .../docs/html-docs/embedding.html | 57 + .../docs/html-docs/examples.html | 60 + .../docs/html-docs/faq-running.html | 59 + fop-0_14_0_regions/docs/html-docs/faqs.html | 27 + .../graphics/architecture-header.jpg | Bin 0 -> 10732 bytes .../graphics/architecture-label-1.jpg | Bin 0 -> 2401 bytes .../graphics/architecture-label-2.jpg | Bin 0 -> 2444 bytes .../graphics/architecture-label-3.jpg | Bin 0 -> 2009 bytes .../docs/html-docs/graphics/bugs-header.jpg | Bin 0 -> 4659 bytes .../docs/html-docs/graphics/bugs-label-1.jpg | Bin 0 -> 1699 bytes .../docs/html-docs/graphics/bugs-label-2.jpg | Bin 0 -> 1615 bytes .../docs/html-docs/graphics/bugs-label-3.jpg | Bin 0 -> 1387 bytes .../html-docs/graphics/compiling-header.jpg | Bin 0 -> 10609 bytes .../html-docs/graphics/compiling-label-1.jpg | Bin 0 -> 2127 bytes .../html-docs/graphics/compiling-label-2.jpg | Bin 0 -> 2144 bytes .../html-docs/graphics/compiling-label-3.jpg | Bin 0 -> 1768 bytes .../html-docs/graphics/download-header.jpg | Bin 0 -> 12137 bytes .../html-docs/graphics/download-label-1.jpg | Bin 0 -> 2158 bytes .../html-docs/graphics/download-label-2.jpg | Bin 0 -> 2177 bytes .../html-docs/graphics/download-label-3.jpg | Bin 0 -> 1790 bytes .../html-docs/graphics/embedding-header.jpg | Bin 0 -> 11250 bytes .../html-docs/graphics/embedding-label-1.jpg | Bin 0 -> 2308 bytes .../html-docs/graphics/embedding-label-2.jpg | Bin 0 -> 2300 bytes .../html-docs/graphics/embedding-label-3.jpg | Bin 0 -> 1937 bytes .../html-docs/graphics/examples-header.jpg | Bin 0 -> 7130 bytes .../html-docs/graphics/examples-label-1.jpg | Bin 0 -> 2142 bytes .../html-docs/graphics/examples-label-2.jpg | Bin 0 -> 2160 bytes .../html-docs/graphics/examples-label-3.jpg | Bin 0 -> 1770 bytes .../docs/html-docs/graphics/ext-2-label-1.jpg | Bin 0 -> 1702 bytes .../docs/html-docs/graphics/ext-2-label-2.jpg | Bin 0 -> 1620 bytes .../docs/html-docs/graphics/ext-2-label-3.jpg | Bin 0 -> 1385 bytes .../html-docs/graphics/faq-running-header.jpg | Bin 0 -> 12304 bytes .../docs/html-docs/graphics/faqs-header.jpg | Bin 0 -> 980 bytes .../docs/html-docs/graphics/faqs-label-1.jpg | Bin 0 -> 1711 bytes .../docs/html-docs/graphics/faqs-label-2.jpg | Bin 0 -> 1635 bytes .../docs/html-docs/graphics/faqs-label-3.jpg | Bin 0 -> 1393 bytes .../html-docs/graphics/implemented-header.jpg | Bin 0 -> 6315 bytes .../graphics/implemented-label-1.jpg | Bin 0 -> 1954 bytes .../graphics/implemented-label-2.jpg | Bin 0 -> 1913 bytes .../graphics/implemented-label-3.jpg | Bin 0 -> 1611 bytes .../docs/html-docs/graphics/index-header.jpg | Bin 0 -> 3744 bytes .../docs/html-docs/graphics/index-label-1.jpg | Bin 0 -> 2002 bytes .../docs/html-docs/graphics/index-label-2.jpg | Bin 0 -> 1958 bytes .../docs/html-docs/graphics/index-label-3.jpg | Bin 0 -> 1653 bytes .../html-docs/graphics/involved-header.jpg | Bin 0 -> 11121 bytes .../html-docs/graphics/involved-label-1.jpg | Bin 0 -> 2767 bytes .../html-docs/graphics/involved-label-2.jpg | Bin 0 -> 2869 bytes .../html-docs/graphics/involved-label-3.jpg | Bin 0 -> 2324 bytes .../html-docs/graphics/license-header.jpg | Bin 0 -> 5822 bytes .../html-docs/graphics/license-label-1.jpg | Bin 0 -> 1923 bytes .../html-docs/graphics/license-label-2.jpg | Bin 0 -> 1898 bytes .../html-docs/graphics/license-label-3.jpg | Bin 0 -> 1582 bytes .../html-docs/graphics/limitations-header.jpg | Bin 0 -> 7665 bytes .../graphics/limitations-label-1.jpg | Bin 0 -> 2284 bytes .../graphics/limitations-label-2.jpg | Bin 0 -> 2285 bytes .../graphics/limitations-label-3.jpg | Bin 0 -> 1917 bytes .../html-docs/graphics/running-header.jpg | Bin 0 -> 9145 bytes .../html-docs/graphics/running-label-1.jpg | Bin 0 -> 2534 bytes .../html-docs/graphics/running-label-2.jpg | Bin 0 -> 2583 bytes .../html-docs/graphics/running-label-3.jpg | Bin 0 -> 2129 bytes .../docs/html-docs/graphics/specs-header.jpg | Bin 0 -> 18837 bytes .../docs/html-docs/graphics/specs-label-1.jpg | Bin 0 -> 2556 bytes .../docs/html-docs/graphics/specs-label-2.jpg | Bin 0 -> 2613 bytes .../docs/html-docs/graphics/specs-label-3.jpg | Bin 0 -> 2159 bytes .../docs/html-docs/implemented.html | 232 + fop-0_14_0_regions/docs/html-docs/index.html | 70 + .../docs/html-docs/involved.html | 70 + .../docs/html-docs/license.html | 74 + .../docs/html-docs/limitations.html | 102 + .../docs/html-docs/resources/bottom.gif | Bin 0 -> 1075 bytes .../html-docs/resources/button-asf-hi.gif | Bin 0 -> 1535 bytes .../html-docs/resources/button-asf-lo.gif | Bin 0 -> 1519 bytes .../html-docs/resources/button-w3c-hi.gif | Bin 0 -> 1503 bytes .../html-docs/resources/button-w3c-lo.gif | Bin 0 -> 1495 bytes .../html-docs/resources/button-xml-hi.gif | Bin 0 -> 1464 bytes .../html-docs/resources/button-xml-lo.gif | Bin 0 -> 1458 bytes .../docs/html-docs/resources/close.gif | Bin 0 -> 498 bytes .../docs/html-docs/resources/dot.gif | Bin 0 -> 49 bytes .../docs/html-docs/resources/green-bar-1.gif | Bin 0 -> 80 bytes .../docs/html-docs/resources/green-bar-2.gif | Bin 0 -> 62 bytes .../docs/html-docs/resources/green-bar.gif | Bin 0 -> 44 bytes .../docs/html-docs/resources/green-hi.gif | Bin 0 -> 41 bytes .../docs/html-docs/resources/green-lo.gif | Bin 0 -> 41 bytes .../docs/html-docs/resources/join.gif | Bin 0 -> 1268 bytes .../docs/html-docs/resources/line.gif | Bin 0 -> 924 bytes .../docs/html-docs/resources/logo-1.gif | Bin 0 -> 3038 bytes .../docs/html-docs/resources/logo-2.gif | Bin 0 -> 1089 bytes .../docs/html-docs/resources/logo-3.gif | Bin 0 -> 1289 bytes .../docs/html-docs/resources/logo.gif | Bin 0 -> 3223 bytes .../docs/html-docs/resources/note.gif | Bin 0 -> 295 bytes .../docs/html-docs/resources/red-hi.gif | Bin 0 -> 41 bytes .../docs/html-docs/resources/red-lo.gif | Bin 0 -> 41 bytes .../docs/html-docs/resources/right.gif | Bin 0 -> 1202 bytes .../docs/html-docs/resources/script.js | 21 + .../docs/html-docs/resources/separator.gif | Bin 0 -> 110 bytes .../docs/html-docs/resources/void.gif | Bin 0 -> 49 bytes .../html-docs/resources/www.apache.org.gif | Bin 0 -> 566 bytes .../docs/html-docs/resources/www.w3.org.gif | Bin 0 -> 487 bytes .../docs/html-docs/resources/www.xml.org.gif | Bin 0 -> 511 bytes .../html-docs/resources/xml.apache.org.gif | Bin 0 -> 528 bytes .../docs/html-docs/running.html | 119 + fop-0_14_0_regions/docs/html-docs/specs.html | 39 + fop-0_14_0_regions/docs/readme | 16 + fop-0_14_0_regions/docs/xml-docs/build.xml | 73 + fop-0_14_0_regions/docs/xml-docs/fop.xml | 26 + .../docs/xml-docs/fop/architecture.xml | 284 + fop-0_14_0_regions/docs/xml-docs/fop/bugs.xml | 29 + .../docs/xml-docs/fop/compiling.xml | 68 + .../docs/xml-docs/fop/download.xml | 17 + .../docs/xml-docs/fop/embedding.xml | 44 + .../docs/xml-docs/fop/examples.xml | 43 + fop-0_14_0_regions/docs/xml-docs/fop/faq.xml | 77 + .../docs/xml-docs/fop/implemented.xml | 225 + .../docs/xml-docs/fop/involved.xml | 55 + .../docs/xml-docs/fop/license.xml | 57 + .../docs/xml-docs/fop/limitations.xml | 87 + .../docs/xml-docs/fop/readme.xml | 62 + .../docs/xml-docs/fop/running.xml | 106 + .../docs/xml-docs/fop/specs.xml | 23 + fop-0_14_0_regions/docs/xml-docs/makedoc.bat | 25 + fop-0_14_0_regions/docs/xml-docs/makedoc.sh | 25 + fop-0_14_0_regions/docs/xml-docs/readme | 10 + fop-0_14_0_regions/docs/xml-docs/xml2pdf.xsl | 322 ++ fop-0_14_0_regions/docs/xml-docs/xml2xml.xsl | 26 + fop-0_14_0_regions/lib/Compare.class | Bin 0 -> 5086 bytes fop-0_14_0_regions/lib/Compare.java | 198 + fop-0_14_0_regions/lib/CompileXMLFiles.class | Bin 0 -> 7056 bytes fop-0_14_0_regions/lib/CompileXMLFiles.java | 294 ++ fop-0_14_0_regions/lib/Fop.class | Bin 0 -> 4216 bytes fop-0_14_0_regions/lib/Fop.java | 210 + fop-0_14_0_regions/lib/Xslt.class | Bin 0 -> 3929 bytes fop-0_14_0_regions/lib/Xslt.java | 289 + fop-0_14_0_regions/lib/ant.jar | Bin 0 -> 179136 bytes fop-0_14_0_regions/lib/bin/antRun | 13 + fop-0_14_0_regions/lib/readme | 11 + fop-0_14_0_regions/lib/w3c.jar | Bin 0 -> 128148 bytes fop-0_14_0_regions/lib/xml.jar | Bin 0 -> 132473 bytes .../src/codegen/Courier-Bold.xml | 274 + .../src/codegen/Courier-BoldOblique.xml | 274 + .../src/codegen/Courier-Oblique.xml | 274 + fop-0_14_0_regions/src/codegen/Courier.xml | 274 + .../src/codegen/Helvetica-Bold.xml | 242 + .../src/codegen/Helvetica-BoldOblique.xml | 242 + .../src/codegen/Helvetica-Oblique.xml | 242 + fop-0_14_0_regions/src/codegen/Helvetica.xml | 242 + fop-0_14_0_regions/src/codegen/Symbol.xml | 200 + fop-0_14_0_regions/src/codegen/Times-Bold.xml | 242 + .../src/codegen/Times-BoldItalic.xml | 242 + .../src/codegen/Times-Italic.xml | 242 + .../src/codegen/Times-Roman.xml | 242 + .../src/codegen/ZapfDingbats.xml | 213 + fop-0_14_0_regions/src/codegen/charlist.xml | 658 +++ .../src/codegen/code-point-mapping.xsl | 24 + fop-0_14_0_regions/src/codegen/font-file.xsl | 70 + fop-0_14_0_regions/src/codegen/properties.xml | 1028 ++++ fop-0_14_0_regions/src/codegen/properties.xsl | 145 + .../org/apache/fop/apps/AWTCommandLine.java | 233 + .../src/org/apache/fop/apps/CommandLine.java | 191 + .../src/org/apache/fop/apps/Driver.java | 392 ++ .../src/org/apache/fop/apps/ErrorHandler.java | 54 + .../src/org/apache/fop/apps/FOPException.java | 66 + .../org/apache/fop/apps/PDFOutputHandler.java | 184 + .../org/apache/fop/apps/PrintCommandLine.java | 197 + .../src/org/apache/fop/apps/Version.java | 67 + .../org/apache/fop/apps/XTCommandLine.java | 189 + .../src/org/apache/fop/apps/XTDriver.java | 390 ++ .../org/apache/fop/apps/XalanCommandLine.java | 253 + .../src/org/apache/fop/apps/package.html | 7 + .../org/apache/fop/datatypes/ColorSpace.java | 106 + .../org/apache/fop/datatypes/ColorType.java | 715 +++ .../src/org/apache/fop/datatypes/IDNode.java | 220 + .../apache/fop/datatypes/IDReferences.java | 341 ++ .../src/org/apache/fop/datatypes/Length.java | 148 + .../org/apache/fop/datatypes/PathData.java | 302 ++ .../org/apache/fop/datatypes/PointsData.java | 99 + .../org/apache/fop/datatypes/StyleData.java | 81 + .../apache/fop/datatypes/TransformData.java | 267 + .../src/org/apache/fop/datatypes/package.html | 6 + .../org/apache/fop/dom/CharacterDataImpl.java | 114 + .../src/org/apache/fop/dom/ElementImpl.java | 173 + .../src/org/apache/fop/dom/NodeImpl.java | 256 + .../fop/dom/css/CSSPrimitiveValueImpl.java | 116 + .../fop/dom/css/CSSStyleDeclarationImpl.java | 381 ++ .../apache/fop/dom/css/CSSStyleRuleImpl.java | 323 ++ .../apache/fop/dom/css/CSSStyleSheetImpl.java | 194 + .../org/apache/fop/dom/css/CSSValueImpl.java | 82 + .../org/apache/fop/dom/css/RGBColorImpl.java | 89 + .../dom/stylesheets/StyleSheetListImpl.java | 79 + .../apache/fop/dom/svg/GraphicElement.java | 232 + .../org/apache/fop/dom/svg/GraphicImpl.java | 76 + .../apache/fop/dom/svg/SVGAElementImpl.java | 81 + .../fop/dom/svg/SVGAltGlyphElementImpl.java | 62 + .../org/apache/fop/dom/svg/SVGAngleImpl.java | 188 + .../dom/svg/SVGAnimateColorElementImpl.java | 63 + .../fop/dom/svg/SVGAnimateElementImpl.java | 63 + .../dom/svg/SVGAnimateMotionElementImpl.java | 62 + .../svg/SVGAnimateTransformElementImpl.java | 62 + .../dom/svg/SVGAnimatedEnumerationImpl.java | 80 + .../fop/dom/svg/SVGAnimatedLengthImpl.java | 78 + .../dom/svg/SVGAnimatedLengthListImpl.java | 79 + .../fop/dom/svg/SVGAnimatedNumberImpl.java | 84 + .../fop/dom/svg/SVGAnimatedRectImpl.java | 78 + .../fop/dom/svg/SVGAnimatedStringImpl.java | 78 + .../dom/svg/SVGAnimatedTransformListImpl.java | 82 + .../src/org/apache/fop/dom/svg/SVGArea.java | 108 + .../fop/dom/svg/SVGCircleElementImpl.java | 114 + .../fop/dom/svg/SVGClipPathElementImpl.java | 83 + .../fop/dom/svg/SVGCursorElementImpl.java | 86 + .../fop/dom/svg/SVGDefsElementImpl.java | 64 + .../fop/dom/svg/SVGDescElementImpl.java | 64 + .../apache/fop/dom/svg/SVGDocumentImpl.java | 211 + .../apache/fop/dom/svg/SVGElementImpl.java | 199 + .../fop/dom/svg/SVGEllipseElementImpl.java | 115 + .../apache/fop/dom/svg/SVGExceptionImpl.java | 68 + .../fop/dom/svg/SVGFilterElementImpl.java | 140 + .../fop/dom/svg/SVGFontElementImpl.java | 64 + .../apache/fop/dom/svg/SVGGElementImpl.java | 75 + .../fop/dom/svg/SVGGlyphElementImpl.java | 62 + .../fop/dom/svg/SVGGradientElementImpl.java | 111 + .../fop/dom/svg/SVGHKernElementImpl.java | 62 + .../fop/dom/svg/SVGImageElementImpl.java | 72 + .../org/apache/fop/dom/svg/SVGLengthImpl.java | 204 + .../apache/fop/dom/svg/SVGLengthListImpl.java | 154 + .../fop/dom/svg/SVGLineElementImpl.java | 135 + .../dom/svg/SVGLinearGradientElementImpl.java | 110 + .../org/apache/fop/dom/svg/SVGListImpl.java | 123 + .../fop/dom/svg/SVGMarkerElementImpl.java | 148 + .../fop/dom/svg/SVGMaskElementImpl.java | 97 + .../org/apache/fop/dom/svg/SVGMatrixImpl.java | 291 ++ .../dom/svg/SVGMissingGlyphElementImpl.java | 61 + .../fop/dom/svg/SVGPathElementImpl.java | 279 + .../apache/fop/dom/svg/SVGPathSegImpl.java | 185 + .../fop/dom/svg/SVGPatternElementImpl.java | 135 + .../fop/dom/svg/SVGPolygonElementImpl.java | 101 + .../fop/dom/svg/SVGPolylineElementImpl.java | 88 + .../dom/svg/SVGRadialGradientElementImpl.java | 119 + .../fop/dom/svg/SVGRectElementImpl.java | 161 + .../org/apache/fop/dom/svg/SVGRectImpl.java | 111 + .../apache/fop/dom/svg/SVGSVGElementImpl.java | 412 ++ .../apache/fop/dom/svg/SVGSetElementImpl.java | 64 + .../fop/dom/svg/SVGStopElementImpl.java | 75 + .../fop/dom/svg/SVGStyleElementImpl.java | 109 + .../fop/dom/svg/SVGSwitchElementImpl.java | 69 + .../fop/dom/svg/SVGSymbolElementImpl.java | 86 + .../fop/dom/svg/SVGTRefElementImpl.java | 154 + .../fop/dom/svg/SVGTSpanElementImpl.java | 101 + .../dom/svg/SVGTextContentElementImpl.java | 120 + .../fop/dom/svg/SVGTextElementImpl.java | 78 + .../fop/dom/svg/SVGTextPathElementImpl.java | 66 + .../fop/dom/svg/SVGTitleElementImpl.java | 63 + .../apache/fop/dom/svg/SVGTransformImpl.java | 121 + .../fop/dom/svg/SVGTransformListImpl.java | 86 + .../fop/dom/svg/SVGURIReferenceImpl.java | 143 + .../apache/fop/dom/svg/SVGUseElementImpl.java | 194 + .../fop/dom/svg/SVGVKernElementImpl.java | 65 + .../src/org/apache/fop/fo/ElementMapping.java | 56 + .../src/org/apache/fop/fo/FONode.java | 220 + .../src/org/apache/fop/fo/FOText.java | 133 + .../src/org/apache/fop/fo/FOTreeBuilder.java | 298 ++ .../src/org/apache/fop/fo/FObj.java | 166 + .../src/org/apache/fop/fo/FObjMixed.java | 114 + .../src/org/apache/fop/fo/Property.java | 91 + .../src/org/apache/fop/fo/PropertyList.java | 101 + .../apache/fop/fo/PropertyListBuilder.java | 171 + .../apache/fop/fo/PropertyListMapping.java | 56 + .../src/org/apache/fop/fo/SVGTreeBuilder.java | 305 ++ .../apache/fop/fo/StandardElementMapping.java | 109 + .../fop/fo/StandardPropertyListMapping.java | 172 + .../src/org/apache/fop/fo/Status.java | 84 + .../src/org/apache/fop/fo/TreeBuilder.java | 102 + .../org/apache/fop/fo/XTElementMapping.java | 56 + .../org/apache/fop/fo/XTFOTreeBuilder.java | 172 + .../src/org/apache/fop/fo/flow/Block.java | 304 ++ .../apache/fop/fo/flow/BlockContainer.java | 224 + .../apache/fop/fo/flow/DisplaySequence.java | 99 + .../apache/fop/fo/flow/ExternalGraphic.java | 230 + .../src/org/apache/fop/fo/flow/Flow.java | 156 + .../src/org/apache/fop/fo/flow/Inline.java | 85 + .../org/apache/fop/fo/flow/InlineGraphic.java | 230 + .../fop/fo/flow/InstreamForeignObject.java | 295 ++ .../src/org/apache/fop/fo/flow/Leader.java | 183 + .../src/org/apache/fop/fo/flow/ListBlock.java | 208 + .../src/org/apache/fop/fo/flow/ListItem.java | 208 + .../org/apache/fop/fo/flow/ListItemBody.java | 109 + .../org/apache/fop/fo/flow/ListItemLabel.java | 105 + .../org/apache/fop/fo/flow/PageNumber.java | 128 + .../fop/fo/flow/PageNumberCitation.java | 214 + .../org/apache/fop/fo/flow/SimpleLink.java | 149 + .../org/apache/fop/fo/flow/StaticContent.java | 141 + .../src/org/apache/fop/fo/flow/Table.java | 275 + .../src/org/apache/fop/fo/flow/TableBody.java | 197 + .../src/org/apache/fop/fo/flow/TableCell.java | 223 + .../org/apache/fop/fo/flow/TableColumn.java | 153 + .../src/org/apache/fop/fo/flow/TableRow.java | 239 + .../ConditionalPageMasterReference.java | 195 + .../fop/fo/pagination/LayoutMasterSet.java | 243 + .../fop/fo/pagination/PageSequence.java | 422 ++ .../fop/fo/pagination/PageSequenceMaster.java | 183 + .../apache/fop/fo/pagination/RegionAfter.java | 129 + .../fop/fo/pagination/RegionBefore.java | 128 + .../apache/fop/fo/pagination/RegionBody.java | 126 + .../RepeatablePageMasterAlternatives.java | 171 + .../RepeatablePageMasterReference.java | 163 + .../org/apache/fop/fo/pagination/Root.java | 132 + .../fop/fo/pagination/SimplePageMaster.java | 198 + .../pagination/SinglePageMasterReference.java | 130 + .../fo/pagination/SubSequenceSpecifier.java | 63 + .../apache/fop/image/AbstractFopImage.java | 296 ++ .../src/org/apache/fop/image/BmpImage.java | 248 + .../src/org/apache/fop/image/FopImage.java | 105 + .../apache/fop/image/FopImageConsumer.java | 184 + .../apache/fop/image/FopImageException.java | 66 + .../org/apache/fop/image/FopImageFactory.java | 177 + .../org/apache/fop/image/GifJpegImage.java | 173 + .../src/org/apache/fop/image/ImageArea.java | 107 + .../src/org/apache/fop/image/JimiImage.java | 179 + .../src/org/apache/fop/image/SVGImage.java | 121 + .../image/analyser/AbstractImageReader.java | 83 + .../apache/fop/image/analyser/BMPReader.java | 107 + .../apache/fop/image/analyser/GIFReader.java | 100 + .../fop/image/analyser/ImageReader.java | 86 + .../image/analyser/ImageReaderFactory.java | 96 + .../apache/fop/image/analyser/JPEGReader.java | 161 + .../apache/fop/image/analyser/PNGReader.java | 112 + .../apache/fop/image/analyser/SVGReader.java | 100 + .../src/org/apache/fop/layout/Area.java | 301 ++ .../org/apache/fop/layout/AreaContainer.java | 94 + .../src/org/apache/fop/layout/AreaTree.java | 98 + .../src/org/apache/fop/layout/BlockArea.java | 228 + .../src/org/apache/fop/layout/Box.java | 59 + .../org/apache/fop/layout/DisplaySpace.java | 68 + .../src/org/apache/fop/layout/FontInfo.java | 128 + .../src/org/apache/fop/layout/FontMetric.java | 67 + .../src/org/apache/fop/layout/FontState.java | 119 + .../apache/fop/layout/ForeignObjectArea.java | 253 + .../src/org/apache/fop/layout/InlineArea.java | 93 + .../org/apache/fop/layout/InlineSpace.java | 73 + .../src/org/apache/fop/layout/LineArea.java | 523 ++ .../src/org/apache/fop/layout/LinkSet.java | 202 + .../apache/fop/layout/LinkedRectangle.java | 130 + .../src/org/apache/fop/layout/Page.java | 166 + .../src/org/apache/fop/layout/PageMaster.java | 117 + .../fop/layout/PageNumberInlineArea.java | 64 + .../src/org/apache/fop/layout/Region.java | 71 + .../src/org/apache/fop/layout/RuleArea.java | 109 + .../src/org/apache/fop/layout/Space.java | 54 + .../fop/messaging/DefaultMessageListener.java | 79 + .../apache/fop/messaging/MessageEvent.java | 102 + .../apache/fop/messaging/MessageHandler.java | 302 ++ .../apache/fop/messaging/MessageListener.java | 68 + .../src/org/apache/fop/pdf/PDFAction.java | 101 + .../src/org/apache/fop/pdf/PDFAnnotList.java | 125 + .../org/apache/fop/pdf/PDFBinaryStream.java | 214 + .../src/org/apache/fop/pdf/PDFColor.java | 383 ++ .../src/org/apache/fop/pdf/PDFDocument.java | 985 ++++ .../src/org/apache/fop/pdf/PDFFileSpec.java | 98 + .../src/org/apache/fop/pdf/PDFFilter.java | 236 + .../apache/fop/pdf/PDFFilterException.java | 66 + .../src/org/apache/fop/pdf/PDFFont.java | 117 + .../src/org/apache/fop/pdf/PDFFunction.java | 758 +++ .../src/org/apache/fop/pdf/PDFGoTo.java | 138 + .../src/org/apache/fop/pdf/PDFGoToRemote.java | 111 + .../src/org/apache/fop/pdf/PDFInfo.java | 94 + .../org/apache/fop/pdf/PDFInternalLink.java | 91 + .../src/org/apache/fop/pdf/PDFLink.java | 122 + .../src/org/apache/fop/pdf/PDFNumber.java | 141 + .../src/org/apache/fop/pdf/PDFObject.java | 117 + .../src/org/apache/fop/pdf/PDFPage.java | 160 + .../src/org/apache/fop/pdf/PDFPages.java | 130 + .../src/org/apache/fop/pdf/PDFPathPaint.java | 86 + .../src/org/apache/fop/pdf/PDFPattern.java | 360 ++ .../src/org/apache/fop/pdf/PDFResources.java | 192 + .../src/org/apache/fop/pdf/PDFRoot.java | 103 + .../src/org/apache/fop/pdf/PDFShading.java | 596 +++ .../src/org/apache/fop/pdf/PDFStream.java | 127 + .../src/org/apache/fop/pdf/PDFUri.java | 91 + .../src/org/apache/fop/pdf/PDFXObject.java | 167 + .../src/org/apache/fop/pdf/package.html | 8 + .../src/org/apache/fop/render/Renderer.java | 112 + .../apache/fop/render/awt/AWTRenderer.java | 1204 +++++ .../src/org/apache/fop/render/package.html | 6 + .../src/org/apache/fop/render/pdf/Font.java | 70 + .../org/apache/fop/render/pdf/FontSetup.java | 224 + .../apache/fop/render/pdf/PDFRenderer.java | 2352 +++++++++ .../apache/fop/render/pdf/fonts/package.html | 7 + .../org/apache/fop/render/pdf/package.html | 6 + .../apache/fop/render/xml/XMLRenderer.java | 336 ++ .../org/apache/fop/render/xml/package.html | 6 + .../src/org/apache/fop/svg/A.java | 128 + .../src/org/apache/fop/svg/AltGlyph.java | 106 + .../src/org/apache/fop/svg/Animate.java | 106 + .../src/org/apache/fop/svg/AnimateColor.java | 106 + .../src/org/apache/fop/svg/AnimateMotion.java | 106 + .../org/apache/fop/svg/AnimateTransform.java | 106 + .../src/org/apache/fop/svg/Circle.java | 128 + .../src/org/apache/fop/svg/ClipPath.java | 130 + .../src/org/apache/fop/svg/Cursor.java | 105 + .../src/org/apache/fop/svg/Defs.java | 135 + .../src/org/apache/fop/svg/Desc.java | 120 + .../src/org/apache/fop/svg/Ellipse.java | 128 + .../src/org/apache/fop/svg/Filter.java | 106 + .../src/org/apache/fop/svg/Font.java | 106 + .../src/org/apache/fop/svg/G.java | 135 + .../src/org/apache/fop/svg/Glyph.java | 106 + .../org/apache/fop/svg/GraphicsCreator.java | 63 + .../src/org/apache/fop/svg/HKern.java | 105 + .../src/org/apache/fop/svg/Image.java | 122 + .../src/org/apache/fop/svg/Line.java | 130 + .../org/apache/fop/svg/LinearGradient.java | 133 + .../src/org/apache/fop/svg/Marker.java | 106 + .../src/org/apache/fop/svg/Mask.java | 131 + .../src/org/apache/fop/svg/MissingGlyph.java | 105 + .../src/org/apache/fop/svg/Path.java | 121 + .../src/org/apache/fop/svg/PathPoint.java | 61 + .../src/org/apache/fop/svg/Pattern.java | 106 + .../src/org/apache/fop/svg/Polygon.java | 120 + .../src/org/apache/fop/svg/Polyline.java | 121 + .../org/apache/fop/svg/RadialGradient.java | 133 + .../src/org/apache/fop/svg/Rect.java | 135 + .../src/org/apache/fop/svg/SVG.java | 213 + .../src/org/apache/fop/svg/SVGD.java | 129 + .../src/org/apache/fop/svg/SVGDriver.java | 336 ++ .../org/apache/fop/svg/SVGElementMapping.java | 111 + .../apache/fop/svg/SVGLengthListProperty.java | 137 + .../org/apache/fop/svg/SVGLengthProperty.java | 130 + .../src/org/apache/fop/svg/SVGObj.java | 102 + .../src/org/apache/fop/svg/SVGPoints.java | 129 + .../fop/svg/SVGPropertyListMapping.java | 119 + .../src/org/apache/fop/svg/SVGStringList.java | 81 + .../org/apache/fop/svg/SVGStringProperty.java | 130 + .../src/org/apache/fop/svg/SVGStyle.java | 131 + .../src/org/apache/fop/svg/SVGTransform.java | 128 + .../src/org/apache/fop/svg/Set.java | 106 + .../src/org/apache/fop/svg/Stop.java | 120 + .../src/org/apache/fop/svg/Style.java | 125 + .../src/org/apache/fop/svg/Switch.java | 167 + .../src/org/apache/fop/svg/Symbol.java | 156 + .../src/org/apache/fop/svg/TRef.java | 130 + .../src/org/apache/fop/svg/TSpan.java | 148 + .../src/org/apache/fop/svg/Text.java | 184 + .../src/org/apache/fop/svg/TextElement.java | 63 + .../src/org/apache/fop/svg/TextPath.java | 124 + .../src/org/apache/fop/svg/TextProperty.java | 131 + .../src/org/apache/fop/svg/Title.java | 119 + .../src/org/apache/fop/svg/Use.java | 122 + .../src/org/apache/fop/svg/VKern.java | 105 + .../src/org/apache/fop/svg/package.html | 7 + .../src/org/apache/fop/viewer/Command.java | 61 + .../org/apache/fop/viewer/GoToPageDialog.java | 88 + .../org/apache/fop/viewer/IconToolBar.java | 35 + .../org/apache/fop/viewer/Images/Print.gif | Bin 0 -> 992 bytes .../org/apache/fop/viewer/Images/firstpg.gif | Bin 0 -> 885 bytes .../org/apache/fop/viewer/Images/lastpg.gif | Bin 0 -> 889 bytes .../org/apache/fop/viewer/Images/nextpg.gif | Bin 0 -> 869 bytes .../org/apache/fop/viewer/Images/prevpg.gif | Bin 0 -> 867 bytes .../apache/fop/viewer/LoadableProperties.java | 80 + .../apache/fop/viewer/MessageException.java | 68 + .../org/apache/fop/viewer/MessagesDialog.java | 230 + .../org/apache/fop/viewer/PreviewDialog.java | 388 ++ .../fop/viewer/PreviewDialogAboutBox.java | 98 + .../apache/fop/viewer/ProgressListener.java | 16 + .../fop/viewer/SecureResourceBundle.java | 98 + .../src/org/apache/fop/viewer/Translator.java | 29 + .../org/apache/fop/viewer/UserMessage.java | 346 ++ .../apache/fop/viewer/resources/messages.de | 78 + .../apache/fop/viewer/resources/messages.en | 80 + .../apache/fop/viewer/resources/resources.de | 45 + .../apache/fop/viewer/resources/resources.en | 4 + .../apache/fop/viewer/resources/resources.fi | 16 + .../apache/fop/viewer/resources/resources.fr | 13 + .../apache/fop/viewer/resources/resources.it | 14 + .../apache/fop/viewer/resources/resources.pl | 17 + .../apache/fop/viewer/resources/resources.ru | 38 + fop-0_14_0_regions/src/overview.html | 9 + 583 files changed, 86374 insertions(+) create mode 100644 fop-0_14_0_regions/LICENSE create mode 100644 fop-0_14_0_regions/README create mode 100644 fop-0_14_0_regions/STATUS create mode 100755 fop-0_14_0_regions/build.bat create mode 100755 fop-0_14_0_regions/build.sh create mode 100644 fop-0_14_0_regions/build.xml create mode 100644 fop-0_14_0_regions/docs/bugtests/list-mountjoy.fo create mode 100644 fop-0_14_0_regions/docs/bugtests/list-nested-breaks.fo create mode 100644 fop-0_14_0_regions/docs/bugtests/list-nested.fo create mode 100644 fop-0_14_0_regions/docs/bugtests/svg-apachexml.fo create mode 100644 fop-0_14_0_regions/docs/bugtests/svg-lingrad.fo create mode 100644 fop-0_14_0_regions/docs/design/apps.gif create mode 100644 fop-0_14_0_regions/docs/design/datatypes.gif create mode 100644 fop-0_14_0_regions/docs/design/flow.gif create mode 100644 fop-0_14_0_regions/docs/design/fo.gif create mode 100644 fop-0_14_0_regions/docs/design/fop.gif create mode 100644 fop-0_14_0_regions/docs/design/image.gif create mode 100644 fop-0_14_0_regions/docs/design/layout.gif create mode 100644 fop-0_14_0_regions/docs/design/messaging.gif create mode 100644 fop-0_14_0_regions/docs/design/pagination.gif create mode 100644 fop-0_14_0_regions/docs/design/pdf.gif create mode 100644 fop-0_14_0_regions/docs/design/render_pdf.gif create mode 100644 fop-0_14_0_regions/docs/examples/build.xml create mode 100644 fop-0_14_0_regions/docs/examples/fo/border.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/extensive.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/fonts.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/images.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/instream.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/leader.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/link.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/list.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/normal.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/readme.fo create mode 100644 fop-0_14_0_regions/docs/examples/fo/table.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/basic1.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/basic2.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/common_regnames.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/bad_region_name.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/duplicate_flownames.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/errors_readme.txt create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/missing_flow_flowname.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/missing_sc_flowname.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/regnames_not_same_class.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/unique_region_names_in_pm.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/errors/unmapped_flow_name.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_2pageseqs.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_alt.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_bnb.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_rep.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_expl.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_nl.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_sc001.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/franklin_sc002.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/multflows.fo create mode 100644 fop-0_14_0_regions/docs/examples/pagination/threepageseqs.fo create mode 100644 fop-0_14_0_regions/docs/examples/results.html create mode 100755 fop-0_14_0_regions/docs/examples/runtests.bat create mode 100755 fop-0_14_0_regions/docs/examples/runtests.sh create mode 100644 fop-0_14_0_regions/docs/examples/svg/All.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/BasicExamples.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/Design.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/Document.dtd create mode 100644 fop-0_14_0_regions/docs/examples/svg/Document.xsl create mode 100644 fop-0_14_0_regions/docs/examples/svg/Examples.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/LargeExamples.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/Misc.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/MoreTests.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/Tests.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/Todo.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/UnitTests.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/apache-diagrams.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/arch-diagrams.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/build.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/diagrams.dtd create mode 100644 fop-0_14_0_regions/docs/examples/svg/ex-diagrams.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/image.jpg create mode 100755 fop-0_14_0_regions/docs/examples/svg/makedoc.bat create mode 100755 fop-0_14_0_regions/docs/examples/svg/makedoc.sh create mode 100644 fop-0_14_0_regions/docs/examples/svg/misc-diagrams.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/mozilla-diagrams.xml create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/arcs.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/initialCoords.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/junk.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/molecule.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/nested.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/newCSSUnits.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/newCoordSys.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/newViewport.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/origCoordSys.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/preserveAspectRatio.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/rotateScale.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/shapes.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/skew.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/transformTest.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/units.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/use01.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/use02.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/use03.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/viewBox1.svg create mode 100644 fop-0_14_0_regions/docs/examples/svg/test/viewBox2.svg create mode 100644 fop-0_14_0_regions/docs/graphics/fop.jpg create mode 100644 fop-0_14_0_regions/docs/graphics/linux.bmp create mode 100644 fop-0_14_0_regions/docs/graphics/xml_feather.gif create mode 100644 fop-0_14_0_regions/docs/graphics/xml_feather_transparent.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/architecture.html create mode 100644 fop-0_14_0_regions/docs/html-docs/bugs.html create mode 100644 fop-0_14_0_regions/docs/html-docs/compiling.html create mode 100644 fop-0_14_0_regions/docs/html-docs/download.html create mode 100644 fop-0_14_0_regions/docs/html-docs/embedding.html create mode 100644 fop-0_14_0_regions/docs/html-docs/examples.html create mode 100644 fop-0_14_0_regions/docs/html-docs/faq-running.html create mode 100644 fop-0_14_0_regions/docs/html-docs/faqs.html create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/architecture-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/architecture-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/architecture-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/architecture-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/bugs-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/bugs-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/bugs-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/bugs-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/compiling-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/download-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/download-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/download-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/download-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/embedding-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/examples-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/examples-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/examples-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/examples-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/ext-2-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/ext-2-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/ext-2-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/faq-running-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/faqs-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/implemented-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/index-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/index-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/index-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/index-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/involved-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/involved-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/involved-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/involved-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/license-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/license-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/license-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/license-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/limitations-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/running-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/running-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/running-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/running-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/specs-header.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/specs-label-1.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/specs-label-2.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/graphics/specs-label-3.jpg create mode 100644 fop-0_14_0_regions/docs/html-docs/implemented.html create mode 100644 fop-0_14_0_regions/docs/html-docs/index.html create mode 100644 fop-0_14_0_regions/docs/html-docs/involved.html create mode 100644 fop-0_14_0_regions/docs/html-docs/license.html create mode 100644 fop-0_14_0_regions/docs/html-docs/limitations.html create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/bottom.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/button-asf-hi.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/button-asf-lo.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/button-w3c-hi.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/button-w3c-lo.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/button-xml-hi.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/button-xml-lo.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/close.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/dot.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/green-bar-1.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/green-bar-2.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/green-bar.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/green-hi.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/green-lo.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/join.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/line.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/logo-1.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/logo-2.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/logo-3.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/logo.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/note.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/red-hi.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/red-lo.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/right.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/script.js create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/separator.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/void.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/www.apache.org.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/www.w3.org.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/www.xml.org.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/resources/xml.apache.org.gif create mode 100644 fop-0_14_0_regions/docs/html-docs/running.html create mode 100644 fop-0_14_0_regions/docs/html-docs/specs.html create mode 100644 fop-0_14_0_regions/docs/readme create mode 100644 fop-0_14_0_regions/docs/xml-docs/build.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/architecture.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/bugs.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/compiling.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/download.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/embedding.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/examples.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/faq.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/implemented.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/involved.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/license.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/limitations.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/readme.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/running.xml create mode 100644 fop-0_14_0_regions/docs/xml-docs/fop/specs.xml create mode 100755 fop-0_14_0_regions/docs/xml-docs/makedoc.bat create mode 100755 fop-0_14_0_regions/docs/xml-docs/makedoc.sh create mode 100644 fop-0_14_0_regions/docs/xml-docs/readme create mode 100644 fop-0_14_0_regions/docs/xml-docs/xml2pdf.xsl create mode 100644 fop-0_14_0_regions/docs/xml-docs/xml2xml.xsl create mode 100644 fop-0_14_0_regions/lib/Compare.class create mode 100644 fop-0_14_0_regions/lib/Compare.java create mode 100644 fop-0_14_0_regions/lib/CompileXMLFiles.class create mode 100644 fop-0_14_0_regions/lib/CompileXMLFiles.java create mode 100644 fop-0_14_0_regions/lib/Fop.class create mode 100644 fop-0_14_0_regions/lib/Fop.java create mode 100644 fop-0_14_0_regions/lib/Xslt.class create mode 100644 fop-0_14_0_regions/lib/Xslt.java create mode 100644 fop-0_14_0_regions/lib/ant.jar create mode 100755 fop-0_14_0_regions/lib/bin/antRun create mode 100644 fop-0_14_0_regions/lib/readme create mode 100644 fop-0_14_0_regions/lib/w3c.jar create mode 100644 fop-0_14_0_regions/lib/xml.jar create mode 100644 fop-0_14_0_regions/src/codegen/Courier-Bold.xml create mode 100644 fop-0_14_0_regions/src/codegen/Courier-BoldOblique.xml create mode 100644 fop-0_14_0_regions/src/codegen/Courier-Oblique.xml create mode 100644 fop-0_14_0_regions/src/codegen/Courier.xml create mode 100644 fop-0_14_0_regions/src/codegen/Helvetica-Bold.xml create mode 100644 fop-0_14_0_regions/src/codegen/Helvetica-BoldOblique.xml create mode 100644 fop-0_14_0_regions/src/codegen/Helvetica-Oblique.xml create mode 100644 fop-0_14_0_regions/src/codegen/Helvetica.xml create mode 100644 fop-0_14_0_regions/src/codegen/Symbol.xml create mode 100644 fop-0_14_0_regions/src/codegen/Times-Bold.xml create mode 100644 fop-0_14_0_regions/src/codegen/Times-BoldItalic.xml create mode 100644 fop-0_14_0_regions/src/codegen/Times-Italic.xml create mode 100644 fop-0_14_0_regions/src/codegen/Times-Roman.xml create mode 100644 fop-0_14_0_regions/src/codegen/ZapfDingbats.xml create mode 100644 fop-0_14_0_regions/src/codegen/charlist.xml create mode 100644 fop-0_14_0_regions/src/codegen/code-point-mapping.xsl create mode 100644 fop-0_14_0_regions/src/codegen/font-file.xsl create mode 100644 fop-0_14_0_regions/src/codegen/properties.xml create mode 100644 fop-0_14_0_regions/src/codegen/properties.xsl create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/AWTCommandLine.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/CommandLine.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/Driver.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/ErrorHandler.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/FOPException.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/PDFOutputHandler.java create mode 100755 fop-0_14_0_regions/src/org/apache/fop/apps/PrintCommandLine.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/Version.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/XTCommandLine.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/XTDriver.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/XalanCommandLine.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/apps/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorSpace.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorType.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/IDNode.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/IDReferences.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/Length.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/PathData.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/PointsData.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/StyleData.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/TransformData.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/datatypes/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/CharacterDataImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/ElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/NodeImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSPrimitiveValueImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleDeclarationImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleRuleImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleSheetImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSValueImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/css/RGBColorImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/stylesheets/StyleSheetListImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicElement.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAltGlyphElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAngleImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateColorElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateMotionElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateTransformElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedEnumerationImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthListImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedNumberImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedRectImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedStringImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedTransformListImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCircleElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGClipPathElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCursorElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDefsElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDescElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDocumentImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGEllipseElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGExceptionImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFilterElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFontElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGlyphElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGradientElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGHKernElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGImageElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthListImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLineElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLinearGradientElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGListImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMarkerElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMaskElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMatrixImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMissingGlyphElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathSegImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPatternElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolygonElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolylineElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRadialGradientElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSVGElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSetElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStopElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStyleElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSwitchElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSymbolElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTRefElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTSpanElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextContentElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextPathElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTitleElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformListImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGURIReferenceImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGUseElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGVKernElementImpl.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/ElementMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/FONode.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/FOText.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/FOTreeBuilder.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/FObj.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/FObjMixed.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/Property.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/PropertyList.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListBuilder.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/SVGTreeBuilder.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/StandardElementMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/StandardPropertyListMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/Status.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/TreeBuilder.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/XTElementMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/XTFOTreeBuilder.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/Block.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/BlockContainer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/DisplaySequence.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/ExternalGraphic.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/Flow.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/Inline.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/InlineGraphic.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/InstreamForeignObject.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/Leader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListBlock.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItem.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemBody.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemLabel.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumber.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumberCitation.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/SimpleLink.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/StaticContent.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/Table.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableBody.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableCell.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableColumn.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableRow.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/LayoutMasterSet.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequence.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequenceMaster.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionAfter.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBefore.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBody.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/Root.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SimplePageMaster.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SinglePageMasterReference.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SubSequenceSpecifier.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/AbstractFopImage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/BmpImage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/FopImage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/FopImageConsumer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/FopImageException.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/FopImageFactory.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/GifJpegImage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/ImageArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/JimiImage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/SVGImage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/AbstractImageReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/BMPReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/GIFReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReaderFactory.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/JPEGReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/PNGReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/image/analyser/SVGReader.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/Area.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/AreaContainer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/AreaTree.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/BlockArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/Box.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/DisplaySpace.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/FontInfo.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/FontMetric.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/FontState.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/ForeignObjectArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/InlineArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/InlineSpace.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/LineArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/LinkSet.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/LinkedRectangle.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/Page.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/PageMaster.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/PageNumberInlineArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/Region.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/RuleArea.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/layout/Space.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/messaging/DefaultMessageListener.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/messaging/MessageEvent.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/messaging/MessageHandler.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/messaging/MessageListener.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAction.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAnnotList.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFBinaryStream.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFColor.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFDocument.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFileSpec.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilter.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilterException.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFont.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFunction.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoTo.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoToRemote.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInfo.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInternalLink.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFLink.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFNumber.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFObject.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPages.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPathPaint.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPattern.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFResources.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFRoot.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFShading.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFStream.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFUri.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/PDFXObject.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/pdf/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/Renderer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/awt/AWTRenderer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/pdf/Font.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/pdf/FontSetup.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/pdf/PDFRenderer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/pdf/fonts/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/pdf/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/xml/XMLRenderer.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/render/xml/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/A.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/AltGlyph.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Animate.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/AnimateColor.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/AnimateMotion.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/AnimateTransform.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Circle.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/ClipPath.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Cursor.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Defs.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Desc.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Ellipse.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Filter.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Font.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/G.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Glyph.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/GraphicsCreator.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/HKern.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Image.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Line.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/LinearGradient.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Marker.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Mask.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/MissingGlyph.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Path.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/PathPoint.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Pattern.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Polygon.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Polyline.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/RadialGradient.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Rect.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVG.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGD.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGDriver.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGElementMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthListProperty.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthProperty.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGObj.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGPoints.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGPropertyListMapping.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringList.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringProperty.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGStyle.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/SVGTransform.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Set.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Stop.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Style.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Switch.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Symbol.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/TRef.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/TSpan.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Text.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/TextElement.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/TextPath.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/TextProperty.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Title.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/Use.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/VKern.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/svg/package.html create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Command.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/GoToPageDialog.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/IconToolBar.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Images/Print.gif create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Images/firstpg.gif create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Images/lastpg.gif create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Images/nextpg.gif create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Images/prevpg.gif create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/LoadableProperties.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/MessageException.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/MessagesDialog.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialog.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialogAboutBox.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/ProgressListener.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/SecureResourceBundle.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/Translator.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/UserMessage.java create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.de create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.en create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.de create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.en create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fi create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fr create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.it create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.pl create mode 100644 fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.ru create mode 100644 fop-0_14_0_regions/src/overview.html diff --git a/fop-0_14_0_regions/LICENSE b/fop-0_14_0_regions/LICENSE new file mode 100644 index 000000000..d38fbeb9f --- /dev/null +++ b/fop-0_14_0_regions/LICENSE @@ -0,0 +1,48 @@ + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + diff --git a/fop-0_14_0_regions/README b/fop-0_14_0_regions/README new file mode 100644 index 000000000..ab305fdd1 --- /dev/null +++ b/fop-0_14_0_regions/README @@ -0,0 +1,22 @@ +FOP readme + + What is FOP? + FOP is the world's first print formatter driven by XSL formatting + objects. It is a Java 1.1 application that reads a formatting object + tree and then turns it into a PDF document. The formatting object + tree, can be in the form of an XML document (output by an XSLT engine + like XT or Xalan) or can be passed in memory as a DOM Document or (in + the case of XT) SAX events. + + FOP is part of Apache's XML project. The homepage of FOP is + http:/xml.apache.org/fop + + HTML-Documentation can be found in the subdirectory /docs. + + Compilation of Fop is started by executing build. It requires + Xerces-J, Xalan and bsf.jar (comes with Xalan) in your classpath. + Fop builds successfully with Xerces 1.1.2 and Xalan 1.1, earlier versions + may prove problematic, if they don't support the final version of SAX 2. + You can find more details in build.xml or in the documentation under the + heading 'compiling'. + diff --git a/fop-0_14_0_regions/STATUS b/fop-0_14_0_regions/STATUS new file mode 100644 index 000000000..33408d8a8 --- /dev/null +++ b/fop-0_14_0_regions/STATUS @@ -0,0 +1,168 @@ +$Id$ + +STATUS + +**** COMMITTERS **** + +Arved Sandstrom (release coordinator) +James Tauber (started it all and wrote most of the code) + +Steven Coffman +Stanislav Gorkhover +Fotis Jannidis +Keiron Liddle +Jordan Naftolin +Eric Schaeffer +Jon Smirl + +**** THINGS WORKED ON ***** + +rewrite of the org.apache.fop.layout in a new package (implements xsl 2000) [James Tauber] +image support [Eric Schaeffer, Pankaj Narula, Andreas Rueckert] +SVG support [Keiron Liddle][Torsten Friebe] +more borders, padding and absolute positioning [Jon Smirl] +smooth shading in PDF [Steven Coffman] +tables: fo: table-header, table-and-caption, + properties: + column-number, + number-columns-repeated + number-columns-spanned + number-rows-spanned + general properties wrt tables + [Karen Lease] +docs [Fotis Jannidis] + +**** THINGS TO DO **** + +Support XSL Working Draft 27 March 2000 + +1.One category of tasks will be to implement missing formatting objects. + There are 6 such objects: + + fo:character + fo:leader [at the moment only partially] + fo:table-and-caption + fo:table-header + fo:multi-case + fo:wrapper + +2. [Has been done] + +3. [Has been done] + +4.A fourth, and not insignificant, category of tasks is to decide upon and + implement all reasonable properties required by the specification. This + also means that at this point, until further review, no FO can be considered + to be compliant. + + a) CHANGED + 21.space-after.optimum (Incomplete) + 22.space-before.optimum (Incomplete) + 25.white-space-treatment (Dropped/Changed) + + b) NEW + 1.alignment-adjust 26.min-width + 2.baseline-identifier 27.number-columns-repeated + 3.baseline-shift 28.number-columns-spanned + 4.block-progression-dimension 29.number-rows-spanned + 5.character 30.orphans + 6.clip 31.overflow + 7.column-number 32.page-break-after + 8.content-type 33.page-break-before + 9.direction 34.precedence + 10.display-align 35.ref-id + 11.dominant-baseline 36.reference-orientation + 12.font-variant 37.region-name + 13.format 38.relative-align + 14.grouping-separator 39.role + 15.grouping-size 40.rule-style + 16.inline-progression-dimension 41.source-document + 17.keep-with-previous 42.space-after + 18.leader-length 43.space-before + 19.leader-pattern 44.space-end + 20.letter-value 45.space-start + 21.line-stacking-strategy + 22.master-name 47.visibility + 23.max-height 48.widows + 24.max-width 49.writing-mode + 25.min-height 50.z-index + +5.A fifth category of tasks is the ongoing effort to promote maintainability, +write + more and better documentation, and to refine the build process. + a) Add the property files to the source code (how is the vote on this?) + b) add examples so that all the FOs supported are used in some example + +6. Redo or work on the classes/properties which have been fixed only in a superficial way + to conform to the latest working draft + - "white-space-treatment" doesn't work at the moment + - leader is just a renamed display-rule and must be rewritten: + it is now (wd 3.2000) generating inline-areas and not block areas + and has a more complex function + - inline is just a renamed inline-sequence and must be worked on: + it is now (wd 3.2000) generating an inline-area itself + + +**** Bugs **** + +- SVG linearGradients don't appear the same as in other SVG Viewers +- colour not continued onto subsequent pages if coloured block goes over page +- no SVG support in AWTCommandLine +- keep-next doesn't work and doubles the text lines which should be moved to the next page +- lists containing list do not keep their indentation correctly over a page boundary + +with AWT Previewer: + +- currently the layout process uses PDF fonts. This gives sometimes + trouble with java.awt.Font +- we need some progress messages even if the process itself is fast +- more comments/english comments +- first preview is painted twice (flashing screen) +- should "preview" be an option when calling FOP instead of having + it's own main method? + +**** HISTORY **** + +Done since 0.14 release +- added: a new package for image support and analysis [Pankaj Narula] +- added large test suite for svg [Keiron Liddle] +- fixed: inline-sequence renamed to inline for xsl wd 3.2000 conformance [Fotis Jannidis] + + +Done since 0.13 release +- pagination updated to 03/27/2000 XSL WD [Arved Sandstrom] +- added support for fo page-number-citation [Mike Crowe, Jordan Naftolin] +- added support for 06/29/2000 SVG WD + W3C Java DOM bindings [Keiron Liddle] +- added image support using Jimi [Eric Schaeffer] +- added support for external and internal simple-links [Jordan Naftolin] +- added support for the fonts Symbol and ZapfDingbats [Fotis Jannidis] +- added a MessageHandler [Fotis Jannidis] +- fixed table overflow bug [Jordan Naftolin] +- finally fixed postscript printing of generated PDF [Domagoj Cosic] +- removed XTCommandLine from build.xml +- removed PDFOutputHandler from build.xml +- added XalanCommandLine [Fotis Jannidis] +- added: fo:instream-foreign-object [Keiron Liddle] +- added: goto button in AWT viewer [Stanislav Gorkhover] +- updated: AWT viewer now works again and supports - with some restrictions - the new SVG support [Stanislav Gorkhover] + +Done since 0.12.1 release +- using Ant to build Fop instead of make [Giacomo Pati] +- borders, padding and absolute positioning [Jon Smirl] + +0.12.1 release +to make the bug fix on XTCommandLine available to non developers +basic support for padding-{top,left,bottom,right} on blocks. +implemented simple-link (don't think it works, though) +XTCommandLine now works again +background color works on list-block +list-blocks can now be in table-cell + +Done for 0.12.0 release: + +Make sure Makefiles work +Switch to using Status object as return from layout() +Incorporate Eric Schaeffer's fix to tables in static-content +Incorporate Kelly Campell's fixes to GifJpegImage +Incorporate Eric Schaeffer's background colour implementation + (actually used different approach with background colour as trait) diff --git a/fop-0_14_0_regions/build.bat b/fop-0_14_0_regions/build.bat new file mode 100755 index 000000000..24c5ff862 --- /dev/null +++ b/fop-0_14_0_regions/build.bat @@ -0,0 +1,29 @@ +@echo off + +echo Fop Build System +echo ---------------- + +if "%JAVA_HOME%" == "" goto error + + +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;lib\ant.jar;lib\w3c.jar;lib +set ANT_HOME=.\lib + +echo Building with classpath %LOCALCLASSPATH% + +echo Starting Ant... + +%JAVA_HOME%\bin\java.exe -Dant.home=%ANT_HOME% -classpath %LOCALCLASSPATH%;%CLASSPATH% org.apache.tools.ant.Main %1 %2 %3 %4 %5 + +goto end + +:error + +echo ERROR: JAVA_HOME not found in your environment. +echo Please, set the JAVA_HOME variable in your environment to match the +echo location of the Java Virtual Machine you want to use. + +:end + +rem set LOCALCLASSPATH= + diff --git a/fop-0_14_0_regions/build.sh b/fop-0_14_0_regions/build.sh new file mode 100755 index 000000000..dd19d479d --- /dev/null +++ b/fop-0_14_0_regions/build.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# This should be executable. +echo +echo "Fop Build System" +echo "----------------" +echo + +if [ "$JAVA_HOME" = "" ] ; then + echo "ERROR: JAVA_HOME not found in your environment." + echo + echo "Please, set the JAVA_HOME variable in your environment to match the" + echo "location of the Java Virtual Machine you want to use." + exit 1 +fi + +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:./lib/ant.jar:./lib/w3c.jar:./lib +ANT_HOME=./lib + +echo Building with classpath $CLASSPATH:$LOCALCLASSPATH +echo + +echo Starting Ant... +echo + +$JAVA_HOME/bin/java -Dant.home=$ANT_HOME -classpath "$LOCALCLASSPATH:$CLASSPATH" org.apache.tools.ant.Main $* diff --git a/fop-0_14_0_regions/build.xml b/fop-0_14_0_regions/build.xml new file mode 100644 index 000000000..de980bafe --- /dev/null +++ b/fop-0_14_0_regions/build.xml @@ -0,0 +1,403 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/bugtests/list-mountjoy.fo b/fop-0_14_0_regions/docs/bugtests/list-mountjoy.fo new file mode 100644 index 000000000..a050c0e10 --- /dev/null +++ b/fop-0_14_0_regions/docs/bugtests/list-mountjoy.fo @@ -0,0 +1,244 @@ + + + + + + + + + + + + + + + + + + + XSL-FO Example: simple list - p. + + + + + + + + Validity Constraint: Standalone Document Declaration + + + + + The standalone document declaration must have the value "no" if + any external markup declarations contain declarations of: + + + + + + + + + + + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + + + + + + entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or + + + + + + + + + + + + + + attributes with values subject to normalization, where the attribute appears in the document with a value which will + + + + + + + + + + + + + + change as a result of normalization, or + + + + + + + + + + + + + + + element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white spaceadsfadsfsssssssssssssss thin any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white spaceadsfadsfssssssssthin any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white spaceadsfadsfssssssssthin any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white spaceadsfadsfssssssssthin any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white spaceadsfadsfssssssss + element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. elementtance of those types. sfg sfd gdg d d + + + + + + + + + + + + + + + + + + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + + + + + + + + + + element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. elementtance of those types. + + + + + + + + + + + + + element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. elementtance of those types. + + + + + + + + + + + + + element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. element types with element content, if white space occurs directly within any instance of those types. elementtance of those types. + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/bugtests/list-nested-breaks.fo b/fop-0_14_0_regions/docs/bugtests/list-nested-breaks.fo new file mode 100644 index 000000000..92826fecc --- /dev/null +++ b/fop-0_14_0_regions/docs/bugtests/list-nested-breaks.fo @@ -0,0 +1,196 @@ + + + + + + + + + + + + + + + + + + + XSL-FO Example: simple list - p. + + + + + + + + Validity Constraint: Standalone Document Declaration + + + + + The standalone document declaration must have the value "no" if + any external markup declarations contain declarations of: + + + + + + + + + + · + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + · + + + + + entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or + + + + + + + + + · + + + + + attributes with values subject to normalization, where the attribute appears in the document with a value which will + + + + + + + + + · + + + + + change as a result of normalization, or + + + + + + + + + · + + + + + element types with element content, if white space occurs directly within any instance of those types. + + + + · + + + This is the first item of a nested list + + + + + · + + + This is the second item of a nested list + + + + + · + + + This is the third item of a nested list. The next list item's block will have a page break-after + + + + + · + + + This is the fourth item of a nested list + + + + + · + + + This is the fifth item of a nested list + + + + + · + + + This is the sixth item of a nested list. The next list-item-body's block contains a page break-before. + + + + + · + + + This is the seventh item of a nested list + + + + + · + + + This is the eigth item of a nested list + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/bugtests/list-nested.fo b/fop-0_14_0_regions/docs/bugtests/list-nested.fo new file mode 100644 index 000000000..746c50b25 --- /dev/null +++ b/fop-0_14_0_regions/docs/bugtests/list-nested.fo @@ -0,0 +1,172 @@ + + + + + + + + + + + + + + + + + + + XSL-FO Example: simple list - p. + + + + + + + + Validity Constraint: Standalone Document Declaration + + + + + The standalone document declaration must have the value "no" if + any external markup declarations contain declarations of: + + + + + + + + + + · + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + · + + + + + entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or + + + + + + + + + · + + + + + attributes with values subject to normalization, where the attribute appears in the document with a value which will + + + + + + + + + · + + + + + change as a result of normalization, or + + + + + + + + + · + + + + + element types with element content, if white space occurs directly within any instance of those types. + + + + · + + + This is the first item of a nested list + + + + + · + + + This is the second item of a nested list + + + + + · + + + This is the third item of a nested list + + + + + · + + + This is the fourth item of a nested list + + + + + · + + + This is the fifth item of a nested list + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/bugtests/svg-apachexml.fo b/fop-0_14_0_regions/docs/bugtests/svg-apachexml.fo new file mode 100644 index 000000000..264502fc4 --- /dev/null +++ b/fop-0_14_0_regions/docs/bugtests/svg-apachexml.fo @@ -0,0 +1,446 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The XML Publishing Framework + + + The XML Publishing Framework + + + + APACHE XML + + + THE + + + PROJECT + + + + + + + diff --git a/fop-0_14_0_regions/docs/bugtests/svg-lingrad.fo b/fop-0_14_0_regions/docs/bugtests/svg-lingrad.fo new file mode 100644 index 000000000..2f18482b5 --- /dev/null +++ b/fop-0_14_0_regions/docs/bugtests/svg-lingrad.fo @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + SVG + + + + + + The above is an example of an SVG graphic + + + + + diff --git a/fop-0_14_0_regions/docs/design/apps.gif b/fop-0_14_0_regions/docs/design/apps.gif new file mode 100644 index 0000000000000000000000000000000000000000..2484105f47573c5e9db697d26b44116d7b0d68a4 GIT binary patch literal 27730 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/design/datatypes.gif b/fop-0_14_0_regions/docs/design/datatypes.gif new file mode 100644 index 0000000000000000000000000000000000000000..09dc9eb035b79837f3a0fef19fb030c54c5abc08 GIT binary patch literal 22014 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
jtE4Ud|=L9Q-9DnWYdaQU9m#Z09CMY?fB z?pjlC{X*yD#u+&=r>8h$E@?nVSIg6+#0R(T5R~$KZ(x-(Wq=qU3rkjn{Q(>zIQPN* zkvpt7gGZ6G>Z62uCw_I^F0U6(KczvbkJ8)<_Dr$e4F-8g#L%gJSuoiOg*bAd&w#;y}j7va)&l91pz%FM7nBscx1V4T<>n9`A z6Sz_|Dishs-8u>R?e3C2Jeq8le;g*HJ#TnlFICBU$)(+o9 zx()0W2UtYhM2tKcjsdwt>^(^#@tl{vY2r{e8nXLPIUe-L<{=g*>)0u>dq-5TNfy^q zJIOYN85L5GEKQwxNz$&XXy$AJUcO600t0)B7m{m6!9}2?p!( z&f$>&Ly)Om%AZhSLcP5|cz;pyOg1&WjIOGS*H}N3=N=wMBM>K5k`)$4r~;|Dc;pI~ z?zg+_?Rak}s|qn|7=v%G`r5pEcltoP3E=Iw2%c?~4b|m`Wy9|dO5w5Y(;CP~=L-fY zMU!{G24O05;4CwDhm+%g4;(b6hi2by&?=%->M&6S2L*V(2!)l6^g|;~9rm7HvI( z0{oRxd=Wn4^-Rs``PxC5Bd=aY$$YM%)GAwsDz44wdi6;pe}ZmDaDLi08HYe3lwo&P zuCOh8E^+$vs;Z3-k5WAI)y74kzV?{c6*u5a3{5Jop1_a2FVebH&|Vw*w`r3G*WDR) z)O^bKI~lD};|_zQj?s{H(Z&d_cMn5Dv1w&lPLCR* z>Ey5#|9J8~0AWPw!>ot;;isRkC0iBvrzDosS{0569yLgWbeKKa%s--*#d|{UCE~7j zacdL)>{_b~q1KTO*~Hon3BL*Fn(HSuhjJ#mI(FWm|C_k4z{;R%av!R)j!*I!9=*|C zMJQo8o1}N1b&UO5VKyN?wP>i4KpnGTxda_$;V?qu�Xdr>%-xho;~AL>hOJ?RCb} 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�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�fM0ym^oU%=34+eow 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/src/codegen/Courier-Bold.xml b/fop-0_14_0_regions/src/codegen/Courier-Bold.xml new file mode 100644 index 000000000..a2ded8d53 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Courier-Bold.xml @@ -0,0 +1,274 @@ + + + Courier-Bold + CourierBold + WinAnsiEncoding + 562 + 439 + 626 + -142 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Courier-BoldOblique.xml b/fop-0_14_0_regions/src/codegen/Courier-BoldOblique.xml new file mode 100644 index 000000000..58a419ec5 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Courier-BoldOblique.xml @@ -0,0 +1,274 @@ + + + Courier-BoldOblique + CourierBoldOblique + WinAnsiEncoding + 562 + 439 + 626 + -142 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/src/codegen/Courier-Oblique.xml b/fop-0_14_0_regions/src/codegen/Courier-Oblique.xml new file mode 100644 index 000000000..f43986004 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Courier-Oblique.xml @@ -0,0 +1,274 @@ + + + Courier-Oblique + CourierOblique + WinAnsiEncoding + 562 + 426 + 629 + -157 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Courier.xml b/fop-0_14_0_regions/src/codegen/Courier.xml new file mode 100644 index 000000000..80f1bfc6e --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Courier.xml @@ -0,0 +1,274 @@ + + + Courier + Courier + WinAnsiEncoding + 562 + 426 + 629 + -157 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Helvetica-Bold.xml b/fop-0_14_0_regions/src/codegen/Helvetica-Bold.xml new file mode 100644 index 000000000..6c9b6f4b9 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Helvetica-Bold.xml @@ -0,0 +1,242 @@ + + + Helvetica-Bold + HelveticaBold + WinAnsiEncoding + 718 + 532 + 718 + -207 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Helvetica-BoldOblique.xml b/fop-0_14_0_regions/src/codegen/Helvetica-BoldOblique.xml new file mode 100644 index 000000000..d07b5de49 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Helvetica-BoldOblique.xml @@ -0,0 +1,242 @@ + + + Helvetica-BoldOblique + HelveticaBoldOblique + WinAnsiEncoding + 718 + 532 + 718 + -207 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Helvetica-Oblique.xml b/fop-0_14_0_regions/src/codegen/Helvetica-Oblique.xml new file mode 100644 index 000000000..00339df1d --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Helvetica-Oblique.xml @@ -0,0 +1,242 @@ + + + Helvetica-Oblique + HelveticaOblique + WinAnsiEncoding + 718 + 523 + 718 + -207 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Helvetica.xml b/fop-0_14_0_regions/src/codegen/Helvetica.xml new file mode 100644 index 000000000..b5221bfb9 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Helvetica.xml @@ -0,0 +1,242 @@ + + + Helvetica + Helvetica + WinAnsiEncoding + 718 + 523 + 718 + -207 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Symbol.xml b/fop-0_14_0_regions/src/codegen/Symbol.xml new file mode 100644 index 000000000..6e071fe81 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Symbol.xml @@ -0,0 +1,200 @@ + + Symbol + Symbol + StandardEncoding + 1010 + 520 + 1010 + -293 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Times-Bold.xml b/fop-0_14_0_regions/src/codegen/Times-Bold.xml new file mode 100644 index 000000000..f446d298d --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Times-Bold.xml @@ -0,0 +1,242 @@ + + + Times-Bold + TimesBold + WinAnsiEncoding + 676 + 461 + 676 + -205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Times-BoldItalic.xml b/fop-0_14_0_regions/src/codegen/Times-BoldItalic.xml new file mode 100644 index 000000000..b79b83179 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Times-BoldItalic.xml @@ -0,0 +1,242 @@ + + + Times-BoldItalic + TimesBoldItalic + WinAnsiEncoding + 669 + 462 + 699 + -205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Times-Italic.xml b/fop-0_14_0_regions/src/codegen/Times-Italic.xml new file mode 100644 index 000000000..5b0242e5e --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Times-Italic.xml @@ -0,0 +1,242 @@ + + + Times-Italic + TimesItalic + WinAnsiEncoding + 653 + 441 + 683 + -205 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/Times-Roman.xml b/fop-0_14_0_regions/src/codegen/Times-Roman.xml new file mode 100644 index 000000000..ae5c16151 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/Times-Roman.xml @@ -0,0 +1,242 @@ + + + Times-Roman + TimesRoman + WinAnsiEncoding + 662 + 450 + 683 + -217 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/ZapfDingbats.xml b/fop-0_14_0_regions/src/codegen/ZapfDingbats.xml new file mode 100644 index 000000000..7a86c635b --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/ZapfDingbats.xml @@ -0,0 +1,213 @@ + + ZapfDingbats + ZapfDingbats + StandardEncoding + 820 + 426 + 820 + -143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/charlist.xml b/fop-0_14_0_regions/src/codegen/charlist.xml new file mode 100644 index 000000000..15700eb6e --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/charlist.xml @@ -0,0 +1,658 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/codegen/code-point-mapping.xsl b/fop-0_14_0_regions/src/codegen/code-point-mapping.xsl new file mode 100644 index 000000000..a3e235cbc --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/code-point-mapping.xsl @@ -0,0 +1,24 @@ + + + + + +package org.apache.fop.render.pdf; + +public class CodePointMapping { + public static char[] map; + + static { + map = new char[65536]; + map[] = ; + + } +} + + + + diff --git a/fop-0_14_0_regions/src/codegen/font-file.xsl b/fop-0_14_0_regions/src/codegen/font-file.xsl new file mode 100644 index 000000000..1ae887708 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/font-file.xsl @@ -0,0 +1,70 @@ + + + + + + + + +package org.apache.fop.render.pdf.fonts; + +import org.apache.fop.render.pdf.Font; + +public class extends Font { + private final static String fontName = ""; + private final static String encoding = ""; + private final static int capHeight = ; + private final static int xHeight = ; + private final static int ascender = ; + private final static int descender = ; + private final static int[] width; + + static { + width = new int[256]; + width[] = ; + + } + + public String encoding() { + return encoding; + } + + public String fontName() { + return fontName; + } + + public int getAscender() { + return ascender; + } + + public int getCapHeight() { + return capHeight; + } + + public int getDescender() { + return descender; + } + + public int getXHeight() { + return xHeight; + } + + public int width(int i) { + return width[i]; + } +} + + + + diff --git a/fop-0_14_0_regions/src/codegen/properties.xml b/fop-0_14_0_regions/src/codegen/properties.xml new file mode 100644 index 000000000..ca76d6eae --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/properties.xml @@ -0,0 +1,1028 @@ + + + + font-size + FontSize + true + Length + 12pt + + + start-indent + StartIndent + true + Length + 0pt + + + font-style + FontStyle + true + String + normal + + + flow-name + FlowName + false + String + + + + page-master-first + PageMasterFirst + false + String + + + + page-master-odd + PageMasterOdd + false + String + + + + extent + Extent + true + Length + 0pt + + + font-weight + FontWeight + true + String + normal + + + margin-left + MarginLeft + false + Length + 0pt + + + font-family + FontFamily + true + String + sans-serif + + + page-master-even + PageMasterEven + false + String + + + + margin-top + MarginTop + false + Length + 0pt + + + master-name + MasterName + false + String + + + + end-indent + EndIndent + true + Length + 0pt + + + color + Color + true + ColorType + black + + + margin-bottom + MarginBottom + false + Length + 0pt + + + page-height + PageHeight + false + Length + 11in + + + space-before.optimum + SpaceBeforeOptimum + false + Length + 0pt + + + provisional-label-separation + ProvisionalLabelSeparation + true + Length + 6pt + + + margin-right + MarginRight + false + Length + 0pt + + + rule-thickness + RuleThickness + true + Length + 1.0pt + + + page-width + PageWidth + false + Length + 8in + + + content-width + ContentWidth + false + Length + auto + + + content-height + ContentHeight + false + Length + auto + + + page-master-repeating + PageMasterRepeating + false + String + + + + provisional-distance-between-starts + ProvisionalDistanceBetweenStarts + true + Length + 24pt + + + line-height + LineHeight + true + Length + 12pt + + + space-after.optimum + SpaceAfterOptimum + false + Length + 0pt + + + text-align + TextAlign + true + + + center + end + start + justify + + + start + + + white-space-treatment + WhiteSpaceTreatment + true + + + preserve + collapse + ignore + + + collapse + + + break-after + BreakAfter + false + + + auto + column + page + even-page + odd-page + + + auto + + + break-before + BreakBefore + false + + + auto + column + page + even-page + odd-page + + + auto + + + wrap-option + WrapOption + true + + + wrap + no-wrap + + + wrap + + + text-align-last + TextAlignLast + true + + + center + end + start + justify + + + start + + START + END + START + CENTER + + + + line-height + LineHeight + true + Length + normal + + + 1.2,propertyList.get("font-size") + d,propertyList.get("font-size") + value + + + + text-indent + TextIndent + false + Length + 0pt + + + href + HRef + false + String + + + + src + Src + false + String + + + + column-width + ColumnWidth + false + Length + 0pt + + + keep-with-next + KeepWithNext + false + + + true + false + + + false + + + background-color + BackgroundColor + false + ColorType + transparent + + + padding + Padding + false + Length + 0pt + + + padding-before + PaddingBefore + false + Length + 0pt + + + padding-after + PaddingAfter + false + Length + 0pt + + + padding-start + PaddingStart + false + Length + 0pt + + + padding-end + PaddingEnd + false + Length + 0pt + + + padding-top + PaddingTop + false + Length + 0pt + + + padding-left + PaddingLeft + false + Length + 0pt + + + padding-bottom + PaddingBottom + false + Length + 0pt + + + padding-right + PaddingRight + false + Length + 0pt + + + external-destination + ExternalDestination + false + String + + + + internal-destination + InternalDestination + false + String + + + + border-before-color + BorderBeforeColor + false + ColorType + black + + + border-before-style + BorderBeforeStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-before-width + BorderBeforeWidth + false + Length + 0pt + + + border-after-color + BorderAfterColor + false + ColorType + black + + + border-after-style + BorderAfterStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-after-width + BorderAfterWidth + false + Length + 0pt + + + border-start-color + BorderStartColor + false + ColorType + black + + + border-start-style + BorderStartStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-start-width + BorderStartWidth + false + Length + 0pt + + + border-end-color + BorderEndColor + false + ColorType + black + + + border-end-style + BorderEndStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-end-width + BorderEndWidth + false + Length + 0pt + + + border-top-color + BorderTopColor + false + ColorType + black + + + border-top-style + BorderTopStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-top-width + BorderTopWidth + false + Length + 0pt + + + border-bottom-color + BorderBottomColor + false + ColorType + black + + + border-bottom-style + BorderBottomStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-bottom-width + BorderBottomWidth + false + Length + 0pt + + + border-left-color + BorderLeftColor + false + ColorType + black + + + border-left-style + BorderLeftStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-left-width + BorderLeftWidth + false + Length + 0pt + + + border-right-color + BorderRightColor + false + ColorType + black + + + border-right-style + BorderRightStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + + + none + + + border-right-width + BorderRightWidth + false + Length + 0pt + + + border-color + BorderColor + false + ColorType + black + + + border-style + BorderStyle + false + + + none + hidden + dotted + dashed + solid + double + groove + ridge + inset + outset + transparent + + + none + + + border-width + BorderWidth + false + Length + 0pt + + + border-top + BorderTop + false + String + normal + + + border-bottom + BorderBottom + false + String + normal + + + border-left + BorderLeft + false + String + normal + + + border-right + BorderRight + false + String + normal + + + position + Position + false + + + static + relative + absolute + fixed + + + static + + + top + Top + false + Length + auto + + + right + Right + false + Length + auto + + + bottom + Bottom + false + Length + auto + + + left + Left + false + Length + auto + + + width + Width + false + Length + auto + + + height + Height + false + Length + auto + + + initial-page-number + InitialPageNumber + false + String + auto + + + ref-id + RefId + false + String + + + + id + Id + false + String + + + + maximum-repeats + MaximumRepeats + false + String + no-limit + + + page-position + PagePosition + false + + + first + last + rest + any + + + any + + + odd-or-even + OddOrEven + false + + + odd + even + any + + + any + + + blank-or-not-blank + BlankOrNotBlank + false + + + blank + not-blank + any + + + any + + + rule-style + RuleStyle + true + + + none + dotted + dashed + solid + double + groove + ridge + + + solid + + + leader-pattern + LeaderPattern + true + + + space + rule + dots + use-content + + + space + + + + + leader-length.optimum + LeaderLength + true + Length + 12.0pt + + + + scaling + Scaling + true + + + uniform + non-uniform + + + uniform + + + vertical-align + VerticalAlign + false + + + baseline + middle + sub + super + text-top + text-bottom + top + bottom + + + baseline + + + overflow + Overflow + false + + + visible + hidden + scroll + auto + + + auto + + + region-name + RegionName + false + String + + + + + + + requiredFeatures + RequiredFeatures + false + String + notpresent + + + requiredExtensions + RequiredExtensions + false + String + notpresent + + + systemLanguage + SystemLanguage + false + String + notpresent + + + class + ElementClass + false + String + + + + xml:space + XMLSpace + true + + + preserve + default + + + default + + + viewBox + ViewBox + false + String + + + + + diff --git a/fop-0_14_0_regions/src/codegen/properties.xsl b/fop-0_14_0_regions/src/codegen/properties.xsl new file mode 100644 index 000000000..214c9cb23 --- /dev/null +++ b/fop-0_14_0_regions/src/codegen/properties.xsl @@ -0,0 +1,145 @@ + + + + + + +package org.apache.fop.fo.properties; + +import org.apache.fop.datatypes.*; +import org.apache.fop.fo.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +public class extends Property { + + public static class Maker extends Property.Maker { + public boolean isInherited() { return ; } + + public Property make(PropertyList propertyList, String value) throws FOPException { + + + + v; + + double d = toDouble(value); + + + if (value.equals("")) { + v = new (); + } + + + else if (!Double.isNaN(d)) { + v = new ( ); + } + + else { + v = new (); + } + return new (propertyList, v); + + + return new (propertyList, new (value)); + + + } + + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + public static Property.Maker maker() { + return new .Maker(); + } + + private value; + + public (PropertyList propertyList, explicitValue) { + this.propertyList = propertyList; + this.value = explicitValue; + } + + public get() { + return this.value; + } + +} + + + + + + +package org.apache.fop.fo.properties; + +import org.apache.fop.datatypes.*; +import org.apache.fop.fo.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +public class extends Property { + + public final static int = ; + + public static class Maker extends Property.Maker { + public boolean isInherited() { return ; } + + public Property make(PropertyList propertyList, String value) throws FOPException { + int v; + + if (value.equals("")) { v = ; } + else + { + MessageHandler.errorln("WARNING: Unknown value for : " + value); + return make(propertyList, ""); + } + return new (propertyList, v); + } + + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + + public Property compute(PropertyList propertyList) { + Property computedProperty = null; + Property correspondingProperty = propertyList.get(""); + if (correspondingProperty != null) { + int correspondingValue = correspondingProperty.getEnum(); + + if (correspondingValue == ) + computedProperty = new (propertyList, ); + else + ; + } + return computedProperty; + } + + } + + public static Property.Maker maker() { + return new .Maker(); + } + + private int value; + + public (PropertyList propertyList, int explicitValue) { + this.propertyList = propertyList; + this.value = explicitValue; + } + + public int getEnum() { + return this.value; + } + +} + + + + + diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/AWTCommandLine.java b/fop-0_14_0_regions/src/org/apache/fop/apps/AWTCommandLine.java new file mode 100644 index 000000000..7a7236baa --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/AWTCommandLine.java @@ -0,0 +1,233 @@ + +package org.apache.fop.apps; +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.viewer.*; +import org.apache.fop.render.awt.*; + + +import javax.swing.UIManager; +import java.awt.*; + +// SAX +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + + + +// Java +import java.io.FileReader; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.io.FileInputStream; +import java.io.InputStream; +import java.net.URL; +import java.util.*; + + + +/** + * initialize AWT previewer + */ + +public class AWTCommandLine { + + + public static String TRANSLATION_PATH = "/org/apache/fop/viewer/resources/"; + + + private Translator resource; + + + + public AWTCommandLine(String srcFile, String language) { + + if (language == null) + language = System.getProperty("user.language"); + + resource = getResourceBundle(TRANSLATION_PATH + "resources." + language); + + UserMessage.setTranslator(getResourceBundle(TRANSLATION_PATH + "messages." + language)); + + resource.setMissingEmphasized(false); + AWTRenderer renderer = new AWTRenderer(resource); + PreviewDialog frame = createPreviewDialog(renderer, resource); + renderer.setProgressListener(frame); + + +//init parser + frame.progress(resource.getString("Init parser") + " ..."); + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("ERROR: Unable to create SAX parser"); + System.exit(1); + } + + // setting the necessary parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + System.exit(1); + } + + try { + Driver driver = new Driver(); + driver.setRenderer(renderer); + +// init mappings: time + frame.progress(resource.getString("Init mappings") + " ..."); + + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + +// build FO tree: time + frame.progress(resource.getString("Build FO tree") + " ..."); + driver.buildFOTree(parser, fileInputSource(srcFile)); + +// layout FO tree: time + frame.progress(resource.getString("Layout FO tree") + " ..."); + driver.format(); + +// render: time + frame.progress(resource.getString("Render") + " ..."); + driver.render(); + + frame.progress(resource.getString("Show")); + frame.showPage(); + + } catch (Exception e) { + MessageHandler.errorln("FATAL ERROR: " + e.getMessage()); + e.printStackTrace(); + System.exit(1); + } + } + + + static XMLReader createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + MessageHandler.errorln("using SAX parser " + parserClassName); + + try { + return (XMLReader) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } + + + + protected PreviewDialog createPreviewDialog(AWTRenderer renderer, Translator res) { + PreviewDialog frame = new PreviewDialog(renderer, res); + frame.validate(); + + // center window + Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize(); + Dimension frameSize = frame.getSize(); + if (frameSize.height > screenSize.height) + frameSize.height = screenSize.height; + if (frameSize.width > screenSize.width) + frameSize.width = screenSize.width; + frame.setLocation((screenSize.width - frameSize.width) / 2, (screenSize.height - frameSize.height) / 2); + frame.setVisible(true); + return frame; + } + + + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, + path).toString()); + } + catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + + + private SecureResourceBundle getResourceBundle(String path) { + InputStream in = null; + + try { + URL url = getClass().getResource(path); + in = url.openStream(); + } catch(Exception ex) { + MessageHandler.logln("Can't find URL to: <" + path + "> " + ex.getMessage()); + } + return new SecureResourceBundle(in); + } + + + /* main + */ + public static void main(String[] args) { + try { + UIManager.setLookAndFeel(new javax.swing.plaf.metal.MetalLookAndFeel()); + } catch (Exception e) { + e.printStackTrace(); + } + + String srcPath = null; + String language = null; + String imageDir = null; + + MessageHandler.errorln(Version.getVersion()); + if (args.length < 1 || args.length > 3) { + MessageHandler.errorln("usage: java AWTCommandLine " + + "formatting-object-file [language] "); + System.exit(1); + } + + srcPath = args[0]; + if (args.length > 1) { + language = args[1]; + } + + new AWTCommandLine(srcPath, language); + + } // main +} // AWTCommandLine + + diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/CommandLine.java b/fop-0_14_0_regions/src/org/apache/fop/apps/CommandLine.java new file mode 100644 index 000000000..3f3711d14 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/CommandLine.java @@ -0,0 +1,191 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + + +package org.apache.fop.apps; + +// SAX +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +// Java +import java.io.FileReader; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.net.URL; + +// FOP +import org.apache.fop.messaging.MessageHandler; + + +/** + * mainline class. + * + * Gets input and output filenames from the command line. + * Creates a SAX Parser (defaulting to Xerces). + * + */ +public class CommandLine { + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static XMLReader createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + org.apache.fop.messaging.MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (XMLReader) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + org.apache.fop.messaging.MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, + path).toString()); + } + catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + + /** + * mainline method + * + * first command line argument is input file + * second command line argument is output file + * + * @param command line arguments + */ + public static void main(String[] args) { + String version = Version.getVersion(); + MessageHandler.errorln(version); + + + + if (args.length != 2) { + MessageHandler.errorln("usage: java " + + "org.apache.fop.apps.CommandLine " + + "formatting-object-file pdf-file"); + System.exit(1); + } + + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("ERROR: Unable to create SAX parser"); + System.exit(1); + } + + // setting the parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + System.exit(1); + } + + try { + Driver driver = new Driver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + driver.setWriter(new PrintWriter(new FileWriter(args[1]))); + driver.buildFOTree(parser, fileInputSource(args[0])); + driver.format(); + driver.render(); + } catch (Exception e) { + MessageHandler.errorln("FATAL ERROR: " + e.getMessage()); + System.exit(1); + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/Driver.java b/fop-0_14_0_regions/src/org/apache/fop/apps/Driver.java new file mode 100644 index 000000000..c4f61560d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/Driver.java @@ -0,0 +1,392 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.apps; + +// FOP +import org.apache.fop.fo.FOTreeBuilder; +import org.apache.fop.fo.ElementMapping; +import org.apache.fop.fo.PropertyListMapping; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.layout.FontInfo; +import org.apache.fop.render.Renderer; +import org.apache.fop.messaging.MessageHandler; + +// DOM +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Attr; + +// SAX +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +// Java +import java.io.PrintWriter; +import java.io.IOException; + +/** + *

Primary class that drives overall FOP process. + * + *

Once this class is instantiated, methods are called to set the + * Renderer to use, the (possibly multiple) ElementMapping(s) to + * use and the PrintWriter to use to output the results of the + * rendering (where applicable). In the case of the Renderer and + * ElementMapping(s), the Driver may be supplied either with the + * object itself, or the name of the class, in which case Driver will + * instantiate the class itself. The advantage of the latter is it + * enables runtime determination of Renderer and ElementMapping(s). + * + *

Once the Driver is set up, the buildFOTree method + * is called. Depending on whether DOM or SAX is being used, the + * invocation of the method is either buildFOTree(Document) or + * buildFOTree(Parser, InputSource) respectively. + * + *

A third possibility may be used to build the FO Tree, namely + * calling getDocumentHandler() and firing the SAX events yourself. + * + *

Once the FO Tree is built, the format() and render() methods may be + * called in that order. + * + *

Here is an example use of Driver from CommandLine.java: + * + *

+ *   Driver driver = new Driver();
+ *   driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);
+ *   driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+ *   driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ *   driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");
+ *   driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");
+ *   driver.setWriter(new PrintWriter(new FileWriter(args[1])));
+ *   driver.buildFOTree(parser, fileInputSource(args[0]));
+ *   driver.format();
+ *   driver.render();
+ * 
+ */ +public class Driver { + + /** the FO tree builder */ + protected FOTreeBuilder treeBuilder; + + /** the area tree that is the result of formatting the FO tree */ + protected AreaTree areaTree; + + /** the renderer to use to output the area tree */ + protected Renderer renderer; + + /** the PrintWriter to use to output the results of the renderer */ + protected PrintWriter writer; + + /** create a new Driver */ + public Driver() { + this.treeBuilder = new FOTreeBuilder(); + } + + /** set the Renderer to use */ + public void setRenderer(Renderer renderer) { + this.renderer = renderer; + } + + /** + * set the class name of the Renderer to use as well as the + * producer string for those renderers that can make use of it + */ + public void setRenderer(String rendererClassName, String producer) { + this.renderer = createRenderer(rendererClassName); + this.renderer.setProducer(producer); + } + + /** + * protected method used by setRenderer(String, String) to + * instantiate the Renderer class + */ + protected Renderer createRenderer(String rendererClassName) { + MessageHandler.logln("using renderer " + rendererClassName); + + try { + return (Renderer) + Class.forName(rendererClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + rendererClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + rendererClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + rendererClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(rendererClassName + " is not a renderer"); + } + return null; + } + + /** + * add the given element mapping. + * + * an element mapping maps element names to Java classes + */ + public void addElementMapping(ElementMapping mapping) { + mapping.addToBuilder(this.treeBuilder); + } + + /** + * add the element mapping with the given class name + */ + public void addElementMapping(String mappingClassName) { + createElementMapping(mappingClassName).addToBuilder(this.treeBuilder); + } + + /** + * protected method used by addElementMapping(String) to + * instantiate element mapping class + */ + protected ElementMapping createElementMapping(String mappingClassName) { + MessageHandler.logln("using element mapping " + mappingClassName); + + try { + return (ElementMapping) + Class.forName(mappingClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + mappingClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + mappingClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + mappingClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(mappingClassName + " is not an element mapping"); + } + return null; + } + + /** + * add the element mapping with the given class name + */ + public void addPropertyList(String listClassName) { + createPropertyList(listClassName).addToBuilder(this.treeBuilder); + } + + /** + * protected method used by addPropertyList(String) to + * instantiate list mapping class + */ + protected PropertyListMapping createPropertyList(String listClassName) { + MessageHandler.logln("using property list mapping " + listClassName); + + try { + return (PropertyListMapping) + Class.forName(listClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + listClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + listClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + listClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(listClassName + " is not an property list"); + } + return null; + } + + /** + * return the tree builder (a SAX DocumentHandler). + * + * used in situations where SAX is used but not via a FOP-invoked + * SAX parser. A good example is an XSLT engine that fires SAX + * events but isn't a SAX Parser itself. + */ + public ContentHandler getContentHandler() { + return this.treeBuilder; + } + + /** + * build the formatting object tree using the given SAX Parser and + * SAX InputSource + */ + public void buildFOTree(XMLReader parser, InputSource source) + throws FOPException { + + parser.setContentHandler(this.treeBuilder); + try { + parser.parse(source); + } catch (SAXException e) { + if (e.getException() instanceof FOPException) + throw (FOPException) e.getException(); + else + throw new FOPException(e.getMessage()); + } catch (IOException e) { + throw new FOPException(e.getMessage()); + } + } + + /** + * build the formatting object tree using the given DOM Document + */ + public void buildFOTree(Document document) + throws FOPException { + + /* most of this code is modified from John Cowan's */ + + Node currentNode; + AttributesImpl currentAtts; + + /* temporary array for making Strings into character arrays */ + char[] array = null; + + currentAtts = new AttributesImpl(); + + /* start at the document element */ + currentNode = document; + + try { + while (currentNode != null) { + switch (currentNode.getNodeType()) { + case Node.DOCUMENT_NODE: + this.treeBuilder.startDocument(); + break; + case Node.CDATA_SECTION_NODE: + case Node.TEXT_NODE: + String data = currentNode.getNodeValue(); + int datalen = data.length(); + if (array == null || array.length < datalen) { + /* if the array isn't big enough, make a new + one */ + array = new char[datalen]; + } + data.getChars(0, datalen, array, 0); + this.treeBuilder.characters(array, 0, datalen); + break; + case Node.PROCESSING_INSTRUCTION_NODE: + this.treeBuilder.processingInstruction( + currentNode.getNodeName(), + currentNode.getNodeValue()); + break; + case Node.ELEMENT_NODE: + NamedNodeMap map = currentNode.getAttributes(); + currentAtts.clear(); + for (int i = map.getLength() - 1; i >= 0; i--) { + Attr att = (Attr)map.item(i); + currentAtts.addAttribute("", + att.getName(), + "", + "CDATA", + att.getValue()); + } + this.treeBuilder.startElement( + "", currentNode.getNodeName(), "", currentAtts); + break; + } + + Node nextNode = currentNode.getFirstChild(); + if (nextNode != null) { + currentNode = nextNode; + continue; + } + + while (currentNode != null) { + switch (currentNode.getNodeType()) { + case Node.DOCUMENT_NODE: + this.treeBuilder.endDocument(); + break; + case Node.ELEMENT_NODE: + this.treeBuilder.endElement( + "", currentNode.getNodeName(), "" ); + break; + } + + nextNode = currentNode.getNextSibling(); + if (nextNode != null) { + currentNode = nextNode; + break; + } + + currentNode = currentNode.getParentNode(); + } + } + } catch (SAXException e) { + throw new FOPException(e.getMessage()); + } + } + + /** + * set the PrintWriter to use to output the result of the Renderer + * (if applicable) + */ + public void setWriter(PrintWriter writer) { + this.writer = writer; + } + + /** + * format the formatting object tree into an area tree + */ + public void format() + throws FOPException { + FontInfo fontInfo = new FontInfo(); + this.renderer.setupFontInfo(fontInfo); + + this.areaTree = new AreaTree(); + this.areaTree.setFontInfo(fontInfo); + + this.treeBuilder.format(areaTree); + } + + /** + * render the area tree to the output form + */ + public void render() + throws IOException, FOPException { + this.renderer.render(areaTree, this.writer); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/ErrorHandler.java b/fop-0_14_0_regions/src/org/apache/fop/apps/ErrorHandler.java new file mode 100644 index 000000000..79c889897 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/ErrorHandler.java @@ -0,0 +1,54 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.apps; + +/** not implemented yet */ +public interface ErrorHandler {} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/FOPException.java b/fop-0_14_0_regions/src/org/apache/fop/apps/FOPException.java new file mode 100644 index 000000000..6b64166de --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/FOPException.java @@ -0,0 +1,66 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.apps; + +/** + * Exception thrown when FOP has a problem + */ +public class FOPException extends Exception { + + /** + * create a new FOP Exception + * + * @param message descriptive message + */ + public FOPException(String message) { + super(message); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/PDFOutputHandler.java b/fop-0_14_0_regions/src/org/apache/fop/apps/PDFOutputHandler.java new file mode 100644 index 000000000..6d54b418e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/PDFOutputHandler.java @@ -0,0 +1,184 @@ +package org.apache.fop.apps; + +import org.xml.sax.*; +import com.jclark.xsl.sax.*; +import java.io.*; + +// FOP +import org.apache.fop.fo.XTFOTreeBuilder; +import org.apache.fop.fo.XTElementMapping; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.layout.FontInfo; +import org.apache.fop.render.Renderer; +import org.apache.fop.messaging.MessageHandler; + +////////////////////////////////////////////////////////////////////////////////////// +/** + * A DocumentHandler that writes a PDF representation to an OutputStream. + * + * Use with James Clark's XT. Just put FOP on your class path and add + * + * to your stylesheet. Now XT will automatically call FOP. + * + */ +public class PDFOutputHandler extends XTFOTreeBuilder implements OutputDocumentHandler { + + /** the area tree that is the result of formatting the FO tree */ + protected AreaTree areaTree; + + /** the renderer to use to output the area tree */ + protected Renderer renderer; + + /** the PrintWriter to use to output the results of the renderer */ + protected PrintWriter writer; + + private boolean keepOpen; + + ////////////////////////////////////////////////////////////////////////////////////// + /** + */ + public PDFOutputHandler() { + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + */ + public PDFOutputHandler(OutputStream out) { + this(); + this.writer = new PrintWriter(out); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + */ + public DocumentHandler init(Destination dest, AttributeList atts) throws IOException { + this.writer = new PrintWriter(dest.getOutputStream("application/pdf", null)); + this.keepOpen = dest.keepOpen(); + + String version = org.apache.fop.apps.Version.getVersion(); + setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + addElementMapping("org.apache.fop.fo.StandardElementMapping"); + addElementMapping("org.apache.fop.svg.SVGElementMapping"); + return this; + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * set the class name of the Renderer to use as well as the + * producer string for those renderers that can make use of it + */ + public void setRenderer(String rendererClassName, String producer) { + this.renderer = createRenderer(rendererClassName); + this.renderer.setProducer(producer); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * SAX passthrough, finish rendering the document + */ + public void endDocument() throws SAXException { + super.endDocument(); + + try { + doFormat(); + doRender(); + } catch (IOException io) { + throw new SAXException(io); + } catch (FOPException fop) { + throw new SAXException(fop); + } + writer.flush(); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * format the formatting object tree into an area tree + */ + public void doFormat() + throws FOPException { + FontInfo fontInfo = new FontInfo(); + this.renderer.setupFontInfo(fontInfo); + + this.areaTree = new AreaTree(); + this.areaTree.setFontInfo(fontInfo); + + format(areaTree); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * render the area tree to the output form + */ + public void doRender() + throws IOException,FOPException { + this.renderer.render(areaTree, this.writer); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * add the given element mapping. + * + * an element mapping maps element names to Java classes + */ + public void addElementMapping(XTElementMapping mapping) { + mapping.addToBuilder(this); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * add the element mapping with the given class name + */ + public void addElementMapping(String mappingClassName) { + createElementMapping(mappingClassName).addToBuilder(this); + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * protected method used by addElementMapping(String) to + * instantiate element mapping class + */ + protected XTElementMapping createElementMapping(String mappingClassName) { + MessageHandler.logln("using element mapping " + mappingClassName); + + try { + return (XTElementMapping) + Class.forName(mappingClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + mappingClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + mappingClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + mappingClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(mappingClassName + " is not an element mapping"); + } + return null; + } + + ////////////////////////////////////////////////////////////////////////////////////// + /** + * protected method used by setRenderer(String, String) to + * instantiate the Renderer class + */ + protected Renderer createRenderer(String rendererClassName) { + MessageHandler.logln("using renderer " + rendererClassName); + + try { + return (Renderer) + Class.forName(rendererClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + rendererClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + rendererClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + rendererClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(rendererClassName + " is not a renderer"); + } + return null; + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/PrintCommandLine.java b/fop-0_14_0_regions/src/org/apache/fop/apps/PrintCommandLine.java new file mode 100755 index 000000000..6526d1569 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/PrintCommandLine.java @@ -0,0 +1,197 @@ +package org.apache.fop.apps; + +/* + originally contributed by + Stanislav Gorkhover: stanislav.gorkhover@jcatalog.com + jCatalog Software AG + */ + + +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +import java.awt.Graphics; +import java.awt.print.*; +import java.io.PrintWriter; +import java.io.IOException; +import java.util.Vector; + +import org.apache.fop.render.awt.AWTRenderer; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.layout.Page; +import org.apache.fop.messaging.MessageHandler; + + +/** + * This class prints a xsl-fo dokument without interaction. + * At the moment java has not the possibility to configure the printer and it's + * options without interaction (30.03.2000). + * This class allows to print a set of pages (from-to), even/odd pages and many copies. + * - Print from page xxx: property name - start, value int + * - Print to page xxx: property name - end, value int + * - Print even/odd pages: property name - even, value boolean + * - Print xxx copies: property name - copies, value int + * + */ +public class PrintCommandLine extends CommandLine { + + + public static void main(String[] args) { + + String version = Version.getVersion(); + MessageHandler.errorln(version); + + if (args.length != 1) { + MessageHandler.errorln("usage: java [-Dstart=i] [-Dend=i]" + + " [-Dcopies=i] [-Deven=true|false]" + + " org.apache.fop.apps.PrintCommandLine formatting-object-file"); + System.exit(1); + } + + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("ERROR: Unable to create SAX parser"); + System.exit(1); + } + + // setting the necessary parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + } + + PrintRenderer renderer = new PrintRenderer(); + try { + Driver driver = new Driver(); + + driver.setRenderer(renderer); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + driver.buildFOTree(parser, fileInputSource(args[0])); + driver.format(); + driver.render(); + } catch (Exception e) { + MessageHandler.errorln("FATAL ERROR: " + e.getMessage()); + System.exit(1); + } + + int copies = PrintRenderer.getIntProperty("copies", 1); + renderer.setCopies(copies); + + PrinterJob pj = PrinterJob.getPrinterJob(); + pj.setPageable(renderer); + + pj.setCopies(copies); + try { + pj.print(); + } catch(PrinterException pe) { + pe.printStackTrace(); + } + } + + + static class PrintRenderer extends AWTRenderer { + + static int EVEN_AND_ALL = 0; + static int EVEN = 1; + static int ODD = 2; + + int startNumber; + int endNumber; + int mode = EVEN_AND_ALL; + int copies = 1; + + PrintRenderer() { + super(null); + + startNumber = getIntProperty("start", 1) - 1; + endNumber = getIntProperty("end", -1); + + mode = EVEN_AND_ALL; + String str = System.getProperty("even"); + if (str != null) { + try { + mode = Boolean.valueOf(str).booleanValue() ? EVEN : ODD; + } catch (Exception e) { + } + } + + } + + + static int getIntProperty(String name, int def) { + String propValue = System.getProperty(name); + if (propValue != null) { + try { + return Integer.parseInt(propValue); + } catch(Exception e) { + return def; + } + } + else { + return def; + } + } + + public void render(AreaTree areaTree, PrintWriter writer) throws IOException { + tree = areaTree; + if (endNumber == -1) { + endNumber = tree.getPages().size(); + } + + Vector numbers = getInvalidPageNumbers(); + for (int i = numbers.size() - 1; i > -1; i--) + tree.getPages().removeElementAt(Integer.parseInt((String)numbers.elementAt(i))); + + } + + public void renderPage(Page page) { + pageWidth = (int)((float)page.getWidth() / 1000f); + pageHeight = (int)((float)page.getHeight() / 1000f); + super.renderPage(page); + } + + + private Vector getInvalidPageNumbers() { + + Vector vec = new Vector(); + int max = tree.getPages().size(); + boolean isValid; + for (int i = 0; i < max; i++) { + isValid = true; + if (i < startNumber || i > endNumber) { + isValid = false; + } + else if (mode != EVEN_AND_ALL) { + if (mode == EVEN && ((i + 1) % 2 != 0)) + isValid = false; + else if (mode == ODD && ((i + 1) % 2 != 1)) + isValid = false; + } + + if (!isValid) + vec.add(i + ""); + } + + return vec; + } + + void setCopies(int val) { + copies = val; + Vector copie = tree.getPages(); + for (int i = 1; i < copies; i++) { + tree.getPages().addAll(copie); + } + + } + + } // class PrintRenderer +} // class PrintCommandLine + diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/Version.java b/fop-0_14_0_regions/src/org/apache/fop/apps/Version.java new file mode 100644 index 000000000..ac8a0cf7d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/Version.java @@ -0,0 +1,67 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.apps; + +/** + * class representing the version of FOP. + */ +public class Version { + + /** + * get the version of FOP + * + * @return the version string + */ + public static String getVersion() { + return "FOP 1.0 [dev]"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/XTCommandLine.java b/fop-0_14_0_regions/src/org/apache/fop/apps/XTCommandLine.java new file mode 100644 index 000000000..b11aed2d4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/XTCommandLine.java @@ -0,0 +1,189 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.apps; + +import org.apache.fop.render.pdf.PDFRenderer; +import org.apache.fop.fo.StandardElementMapping; +import org.apache.fop.svg.SVGElementMapping; +import org.apache.fop.messaging.MessageHandler; + +// James Clark +import com.jclark.xsl.sax.XSLProcessor; +import com.jclark.xsl.sax.XSLProcessorImpl; + +// SAX +import org.xml.sax.Parser; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +// Java +import java.io.File; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.net.URL; + +/** + * mainline class for full transformation (via XT) + formatting/rendering. + * + * gets input, stylesheet and output filenames from the command line + * creates an implementation of XSLProcessor, passing it the stylesheet + * treats XSLProcessor as SAXParser + * + */ +public class XTCommandLine { + + /** + * mainline method. + * + * first command line argument is XML input file + * second command line argument is XSL stylesheet file + * third command line argument is outputfile + */ + public static void main(String[] args) { + String version = Version.getVersion(); + MessageHandler.errorln(version); + + if (args.length != 3) { + MessageHandler.errorln("usage: java org.apache.fop.apps.XTCommandLine xml-file xsl-stylesheet pdf-file"); + System.exit(1); + } + + Parser parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("ERROR: Unable to create SAX parser"); + System.exit(1); + } + + XSLProcessor xslProcessor = new XSLProcessorImpl(); + xslProcessor.setParser(parser); + + try { + xslProcessor.loadStylesheet(fileInputSource(args[1])); + + XTDriver driver = new XTDriver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", + version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + driver.setWriter(new PrintWriter(new FileWriter(args[2]))); + driver.buildFOTree(xslProcessor, fileInputSource(args[0])); + driver.format(); + driver.render(); + } catch (Exception e) { + MessageHandler.errorln("FATAL ERROR: " + e.getMessage()); + System.exit(1); + } + } + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static Parser createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "com.jclark.xml.sax.Driver"; + } + org.apache.fop.messaging.MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (Parser) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + org.apache.fop.messaging.MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, + path).toString()); + } + catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/XTDriver.java b/fop-0_14_0_regions/src/org/apache/fop/apps/XTDriver.java new file mode 100644 index 000000000..6b16c8ea8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/XTDriver.java @@ -0,0 +1,390 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.apps; + +// FOP +import org.apache.fop.fo.XTFOTreeBuilder; +import org.apache.fop.fo.ElementMapping; +import org.apache.fop.fo.PropertyListMapping; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.layout.FontInfo; +import org.apache.fop.render.Renderer; +import org.apache.fop.messaging.MessageHandler; + +// DOM +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Attr; + +// SAX +import org.xml.sax.DocumentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.Parser; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +// Java +import java.io.PrintWriter; +import java.io.IOException; + +/** + *

Primary class that drives overall FOP process. + * + *

Once this class is instantiated, methods are called to set the + * Renderer to use, the (possibly multiple) ElementMapping(s) to + * use and the PrintWriter to use to output the results of the + * rendering (where applicable). In the case of the Renderer and + * ElementMapping(s), the Driver may be supplied either with the + * object itself, or the name of the class, in which case Driver will + * instantiate the class itself. The advantage of the latter is it + * enables runtime determination of Renderer and ElementMapping(s). + * + *

Once the Driver is set up, the buildFOTree method + * is called. Depending on whether DOM or SAX is being used, the + * invocation of the method is either buildFOTree(Document) or + * buildFOTree(Parser, InputSource) respectively. + * + *

A third possibility may be used to build the FO Tree, namely + * calling getDocumentHandler() and firing the SAX events yourself. + * + *

Once the FO Tree is built, the format() and render() methods may be + * called in that order. + * + *

Here is an example use of Driver from CommandLine.java: + * + *

+ *   Driver driver = new Driver();
+ *   driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);
+ *   driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+ *   driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ *   driver.setWriter(new PrintWriter(new FileWriter(args[1])));
+ *   driver.buildFOTree(parser, fileInputSource(args[0]));
+ *   driver.format();
+ *   driver.render();
+ * 
+ */ +public class XTDriver { + + /** the FO tree builder */ + protected XTFOTreeBuilder treeBuilder; + + /** the area tree that is the result of formatting the FO tree */ + protected AreaTree areaTree; + + /** the renderer to use to output the area tree */ + protected Renderer renderer; + + /** the PrintWriter to use to output the results of the renderer */ + protected PrintWriter writer; + + /** create a new Driver */ + public XTDriver() { + this.treeBuilder = new XTFOTreeBuilder(); + } + + /** set the Renderer to use */ + public void setRenderer(Renderer renderer) { + this.renderer = renderer; + } + + /** + * set the class name of the Renderer to use as well as the + * producer string for those renderers that can make use of it + */ + public void setRenderer(String rendererClassName, String producer) { + this.renderer = createRenderer(rendererClassName); + this.renderer.setProducer(producer); + } + + /** + * protected method used by setRenderer(String, String) to + * instantiate the Renderer class + */ + protected Renderer createRenderer(String rendererClassName) { + MessageHandler.logln("using renderer " + rendererClassName); + + try { + return (Renderer) + Class.forName(rendererClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + rendererClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + rendererClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + rendererClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(rendererClassName + " is not a renderer"); + } + return null; + } + + /** + * add the given element mapping. + * + * an element mapping maps element names to Java classes + */ + public void addElementMapping(ElementMapping mapping) { + mapping.addToBuilder(this.treeBuilder); + } + + /** + * add the element mapping with the given class name + */ + public void addElementMapping(String mappingClassName) { + createElementMapping(mappingClassName).addToBuilder(this.treeBuilder); + } + + /** + * protected method used by addElementMapping(String) to + * instantiate element mapping class + */ + protected ElementMapping createElementMapping(String mappingClassName) { + MessageHandler.logln("using element mapping " + mappingClassName); + + try { + return (ElementMapping) + Class.forName(mappingClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + mappingClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + mappingClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + mappingClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(mappingClassName + " is not an element mapping"); + } + return null; + } + + /** + * add the element mapping with the given class name + */ + public void addPropertyList(String listClassName) { + createPropertyList(listClassName).addToBuilder(this.treeBuilder); + } + + /** + * protected method used by addPropertyList(String) to + * instantiate list mapping class + */ + protected PropertyListMapping createPropertyList(String listClassName) { + MessageHandler.logln("using property list mapping " + listClassName); + + try { + return (PropertyListMapping) + Class.forName(listClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + listClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + listClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + listClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(listClassName + " is not an property list"); + } + return null; + } + + /** + * return the tree builder (a SAX DocumentHandler). + * + * used in situations where SAX is used but not via a FOP-invoked + * SAX parser. A good example is an XSLT engine that fires SAX + * events but isn't a SAX Parser itself. + */ + public DocumentHandler getDocumentHandler() { + return this.treeBuilder; + } + + /** + * build the formatting object tree using the given SAX Parser and + * SAX InputSource + */ + public void buildFOTree(Parser parser, InputSource source) + throws FOPException { + + parser.setDocumentHandler(this.treeBuilder); + try { + parser.parse(source); + } catch (SAXException e) { + if (e.getException() instanceof FOPException) + throw (FOPException) e.getException(); + else + throw new FOPException(e.getMessage()); + } catch (IOException e) { + throw new FOPException(e.getMessage()); + } + } + + /** + * build the formatting object tree using the given DOM Document + */ + public void buildFOTree(Document document) + throws FOPException { + + /* most of this code is modified from John Cowan's */ + + Node currentNode; + AttributesImpl currentAtts; + + /* temporary array for making Strings into character arrays */ + char[] array = null; + + currentAtts = new AttributesImpl(); + + /* start at the document element */ + currentNode = document; + + try { + while (currentNode != null) { + switch (currentNode.getNodeType()) { + case Node.DOCUMENT_NODE: + this.treeBuilder.startDocument(); + break; + case Node.CDATA_SECTION_NODE: + case Node.TEXT_NODE: + String data = currentNode.getNodeValue(); + int datalen = data.length(); + if (array == null || array.length < datalen) { + /* if the array isn't big enough, make a new + one */ + array = new char[datalen]; + } + data.getChars(0, datalen, array, 0); + this.treeBuilder.characters(array, 0, datalen); + break; + case Node.PROCESSING_INSTRUCTION_NODE: + this.treeBuilder.processingInstruction( + currentNode.getNodeName(), + currentNode.getNodeValue()); + break; + case Node.ELEMENT_NODE: + NamedNodeMap map = currentNode.getAttributes(); + currentAtts.clear(); + for (int i = map.getLength() - 1; i >= 0; i--) { + Attr att = (Attr)map.item(i); + currentAtts.addAttribute("", + att.getName(), + "", + "CDATA", + att.getValue()); + } + this.treeBuilder.startElement( + "", currentNode.getNodeName(), "", currentAtts); + break; + } + + Node nextNode = currentNode.getFirstChild(); + if (nextNode != null) { + currentNode = nextNode; + continue; + } + + while (currentNode != null) { + switch (currentNode.getNodeType()) { + case Node.DOCUMENT_NODE: + this.treeBuilder.endDocument(); + break; + case Node.ELEMENT_NODE: + this.treeBuilder.endElement( + "", currentNode.getNodeName(), "" ); + break; + } + + nextNode = currentNode.getNextSibling(); + if (nextNode != null) { + currentNode = nextNode; + break; + } + + currentNode = currentNode.getParentNode(); + } + } + } catch (SAXException e) { + throw new FOPException(e.getMessage()); + } + } + + /** + * set the PrintWriter to use to output the result of the Renderer + * (if applicable) + */ + public void setWriter(PrintWriter writer) { + this.writer = writer; + } + + /** + * format the formatting object tree into an area tree + */ + public void format() + throws FOPException { + FontInfo fontInfo = new FontInfo(); + this.renderer.setupFontInfo(fontInfo); + + this.areaTree = new AreaTree(); + this.areaTree.setFontInfo(fontInfo); + + this.treeBuilder.format(areaTree); + } + + /** + * render the area tree to the output form + */ + public void render() + throws IOException, FOPException { + this.renderer.render(areaTree, this.writer); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/XalanCommandLine.java b/fop-0_14_0_regions/src/org/apache/fop/apps/XalanCommandLine.java new file mode 100644 index 000000000..7df56cf18 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/XalanCommandLine.java @@ -0,0 +1,253 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + + +package org.apache.fop.apps; + +// SAX +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + + +// Java +import java.io.FileReader; +import java.io.File; +import java.io.StringWriter; +import java.io.StringReader; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.net.URL; + +// Xalan +import org.apache.xalan.xpath.xml.XMLParserLiaison; +import org.apache.xalan.xslt.XSLTInputSource; +import org.apache.xalan.xslt.XSLTProcessor; +import org.apache.xalan.xslt.XSLTProcessorFactory; +import org.apache.xalan.xslt.XSLTResultTarget; + +// FOP +import org.apache.fop.messaging.MessageHandler; + + +/** + * mainline class. + * + * Gets input and output filenames from the command line. + * Creates a SAX Parser (defaulting to Xerces). + * + */ +public class XalanCommandLine { + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static XMLReader createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + org.apache.fop.messaging.MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (XMLReader) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + org.apache.fop.messaging.MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + org.apache.fop.messaging.MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, + path).toString()); + } + catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + + /** + * mainline method + * + * first command line argument is xml input file + * second command line argument is xslt file which commands the conversion from xml to xsl:fo + * third command line argument is the output file + * + * @param command line arguments + */ + public static void main(String[] args) { + String version = Version.getVersion(); + MessageHandler.logln(version); + + + if (args.length != 3) { + MessageHandler.errorln("usage: java " + + "org.apache.fop.apps.XalanCommandLine " + + "xml-file xslt-file pdf-file"); + System.exit(1); + } + + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("ERROR: Unable to create SAX parser"); + System.exit(1); + } + + // setting the parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + System.exit(1); + } + + + try { + java.io.Writer writer; + java.io.Reader reader; + boolean usefile = false; + + MessageHandler.logln("transforming to xsl:fo markup"); + + + // create a Writer + // the following is an ugly hack to allow processing of larger files + // if xml file size is larger than 700 kb write the fo:file to disk + if ((new File(args[0]).length()) > 500000) { + writer = new FileWriter(args[2]+".tmp"); + usefile = true; + } else { + writer = new StringWriter(); + } + + // Use XSLTProcessorFactory to instantiate an XSLTProcessor. + XSLTProcessor processor = XSLTProcessorFactory.getProcessor(); + + // Create the 3 objects the XSLTProcessor needs to perform the transformation. + // Fix up the args... + XMLParserLiaison xmlPL = processor.getXMLProcessorLiaison(); + URL urlTmp = xmlPL.getURLFromString(args[0], null); + System.err.println("XML File: " + args[0]); + System.err.println("URL: " + urlTmp); + XSLTInputSource xmlSource = new XSLTInputSource (urlTmp.toString()); + urlTmp = xmlPL.getURLFromString(args[1], null); + System.err.println("XSL File: " + args[1]); + System.err.println("URL: " + urlTmp); + XSLTInputSource xslSheet = new XSLTInputSource (urlTmp.toString()); + + XSLTResultTarget xmlResult = new XSLTResultTarget (writer); + + // Perform the transformation. + processor.process(xmlSource, xslSheet, xmlResult); + + if (usefile) { + reader = new FileReader(args[2]+".tmp"); + } else { + // create a input source containing the xsl:fo file which can be fed to Fop + reader = new StringReader(writer.toString()); + } + writer.flush(); + writer.close(); + + //set Driver methods to start Fop processing + Driver driver = new Driver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + driver.setWriter(new PrintWriter(new FileWriter(args[2]))); + driver.buildFOTree(parser, new InputSource(reader)); + reader.close(); + driver.format(); + driver.render(); + if (usefile) { + new File (args[2]+".tmp").delete(); + } + } catch (Exception e) { + MessageHandler.errorln("FATAL ERROR: " + e.getMessage()); + System.exit(1); + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/apps/package.html b/fop-0_14_0_regions/src/org/apache/fop/apps/package.html new file mode 100644 index 000000000..c8a9798d5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/apps/package.html @@ -0,0 +1,7 @@ + +org.apache.fop.apps Package + +

Application classes used for running FOP both on the command line and +embedded in other applications.

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorSpace.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorSpace.java new file mode 100644 index 000000000..2cda6d827 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorSpace.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.datatypes; + +public class ColorSpace { + //Ok... so I had some grand purpose for this, but I can't recall. + //I'm just writing it + + public static int DEVICE_UNKNOWN = -1; + public static int DEVICE_GRAY = 1; + //what's the *official* spelling? + //public static int DEVICE_GREY = 1; + public static int DEVICE_RGB = 2; + public static int DEVICE_CMYK = 3; + + //Are there any others? + + protected int currentColorSpace = -1; + + public ColorSpace (int theColorSpace) + { + this.currentColorSpace = theColorSpace; + + } + public int getColorSpace() + { + return (this.currentColorSpace); + } + public void setColorSpace(int theColorSpace) + { + this.currentColorSpace = theColorSpace; + } + + public String getColorSpacePDFString() + {//this is for PDF Output. Does anyone else need a string representation? + + + //shouldn't this be a select-case? I can never remember + //the syntax for that. + if(this.currentColorSpace == this.DEVICE_RGB) + { + return("DeviceRGB"); + } + else if(this.currentColorSpace == this.DEVICE_CMYK) + { + return("DeviceCMYK"); + } + else if(this.currentColorSpace== this.DEVICE_GRAY) + { + return("DeviceGray"); + } + else + {//unknown... Error. Tell them it's RGB and hope they don't notice. + return("DeviceRGB"); + } + } +} \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorType.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorType.java new file mode 100644 index 000000000..9f3d8cbb4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/ColorType.java @@ -0,0 +1,715 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.datatypes; + +import java.util.*; +import org.apache.fop.messaging.MessageHandler; + +/** + * a colour quantity in XSL + */ +public class ColorType { + + /** the red component */ + protected float red; + + /** the green component */ + protected float green; + + /** the blue component */ + protected float blue; + + /** the alpha component */ + protected float alpha = 0; + + /** + * set the colour given a particular String specifying either a + * colour name or #RGB or #RRGGBB + */ + public ColorType (String value) { + if (value.startsWith("#")) { + try { + if (value.length()==4) { + // note: divide by 15 so F = FF = 1 and so on + this.red = Integer.parseInt(value.substring(1,2),16)/15f; + this.green = Integer.parseInt(value.substring(2,3),16)/15f; + this.blue = Integer.parseInt(value.substring(3),16)/15f; + } else if (value.length()==7) { + // note: divide by 255 so FF = 1 + this.red = Integer.parseInt(value.substring(1,3),16)/255f; + this.green = Integer.parseInt(value.substring(3,5),16)/255f; + this.blue = Integer.parseInt(value.substring(5),16)/255f; + } else { + this.red = 0; + this.green = 0; + this.blue = 0; + MessageHandler.errorln("ERROR: unknown colour format. Must be #RGB or #RRGGBB"); + } + } catch (Exception e) { + this.red = 0; + this.green = 0; + this.blue = 0; + MessageHandler.errorln("ERROR: unknown colour format. Must be #RGB or #RRGGBB"); + } + } else if (value.startsWith("rgb(")) { + int poss = value.indexOf("("); + int pose = value.indexOf(")"); + if(poss != -1 && pose != -1) { + value = value.substring(poss + 1, pose); + StringTokenizer st = new StringTokenizer(value, ","); + try { + if(st.hasMoreTokens()) { + String str = st.nextToken().trim(); + if(str.endsWith("%")) { + this.red = Integer.parseInt(str.substring(0, str.length() - 1)) * 2.55f; + } else { + this.red = Integer.parseInt(str)/255f; + } + } + if(st.hasMoreTokens()) { + String str = st.nextToken().trim(); + if(str.endsWith("%")) { + this.green = Integer.parseInt(str.substring(0, str.length() - 1)) * 2.55f; + } else { + this.green = Integer.parseInt(str)/255f; + } + } + if(st.hasMoreTokens()) { + String str = st.nextToken().trim(); + if(str.endsWith("%")) { + this.blue = Integer.parseInt(str.substring(0, str.length() - 1)) * 2.55f; + } else { + this.blue = Integer.parseInt(str)/255f; + } + } + } catch (Exception e) { + this.red = 0; + this.green = 0; + this.blue = 0; + MessageHandler.errorln("ERROR: unknown colour format. Must be #RGB or #RRGGBB"); + } + } + } else if (value.startsWith("url(")) { + // refers to a gradient + } else { + if (value.toLowerCase().equals("transparent")) { + this.red = 0; + this.green = 0; + this.blue = 0; + this.alpha = 1; + } else { + boolean found = false; + for(int count = 0; count < names.length; count++) { + if (value.toLowerCase().equals(names[count])) { + this.red = vals[count][0] / 255f; + this.green = vals[count][1] / 255f; + this.blue = vals[count][2] / 255f; + found = true; + break; + } + } + if(!found) { + this.red = 0; + this.green = 0; + this.blue = 0; + MessageHandler.errorln("ERROR: unknown colour name: " + value); + } + } + +/* if (value.toLowerCase().equals("black")) { + this.red = 0; + this.green = 0; + this.blue = 0; + } else if (value.toLowerCase().equals("green")) { + this.red = 0; + this.green = 0.5f; + this.blue = 0; + } else if (value.toLowerCase().equals("silver")) { + this.red = 0.75f; + this.green = 0.75f; + this.blue = 0.75f; + } else if (value.toLowerCase().equals("lime")) { + this.red = 0; + this.green = 1; + this.blue = 0; + } else if (value.toLowerCase().equals("gray")) { + this.red = 0.5f; + this.green = 0.5f; + this.blue = 0.5f; + } else if (value.toLowerCase().equals("olive")) { + this.red = 0.5f; + this.green = 0.5f; + this.blue = 0; + } else if (value.toLowerCase().equals("white")) { + this.red = 1; + this.green = 1; + this.blue = 1; + } else if (value.toLowerCase().equals("yellow")) { + this.red = 1; + this.green = 1; + this.blue = 0; + } else if (value.toLowerCase().equals("maroon")) { + this.red = 0.5f; + this.green = 0; + this.blue = 0; + } else if (value.toLowerCase().equals("navy")) { + this.red = 0; + this.green = 0; + this.blue = 0.5f; + } else if (value.toLowerCase().equals("red")) { + this.red = 1; + this.green = 0; + this.blue = 0; + } else if (value.toLowerCase().equals("blue")) { + this.red = 0; + this.green = 0; + this.blue = 1; + } else if (value.toLowerCase().equals("purple")) { + this.red = 0.5f; + this.green = 0; + this.blue = 0.5f; + } else if (value.toLowerCase().equals("teal")) { + this.red = 0; + this.green = 0.5f; + this.blue = 0.5f; + } else if (value.toLowerCase().equals("fuchsia")) { + this.red = 1; + this.green = 0; + this.blue = 1; + } else if (value.toLowerCase().equals("aqua")) { + this.red = 0; + this.green = 1; + this.blue = 1; + } else if (value.toLowerCase().equals("orange")) { + // for compatibility with passiveTex + this.red = 0.7f; + this.green = 0.5f; + this.blue = 0; + } else if (value.toLowerCase().equals("transparent")) { + this.red = 0; + this.green = 0; + this.blue = 0; + this.alpha = 1; + } else { + this.red = 0; + this.green = 0; + this.blue = 0; + MessageHandler.errorln("ERROR: unknown colour name: " + value); + }*/ + } + } + + public float blue() { + return this.blue; + } + + public float green() { + return this.green; + } + + public float red() { + return this.red; + } + + public float alpha() { + return this.alpha; + } + + final static String[] names = { + "aliceblue", + "antiquewhite", + "aqua", + "aquamarine", + "azure", + "beige", + "bisque", + "black", + "blanchedalmond", + "blue", + "blueviolet", + "brown", + "burlywood", + "cadetblue", + "chartreuse", + "chocolate", + "coral", + "cornflowerblue", + "cornsilk", + "crimson", + "cyan", + "darkblue", + "darkcyan", + "darkgoldenrod", + "darkgray", + "darkgreen", + "darkgrey", + "darkkhaki", + "darkmagenta", + "darkolivegreen", + "darkorange", + "darkorchid", + "darkred", + "darksalmon", + "darkseagreen", + "darkslateblue", + "darkslategray", + "darkslategrey", + "darkturquoise", + "darkviolet", + "deeppink", + "deepskyblue", + "dimgray", + "dimgrey", + "dodgerblue", + "firebrick", + "floralwhite", + "forestgreen", + "fuchsia", + "gainsboro", + "lightpink", + "lightsalmon", + "lightseagreen", + "lightskyblue", + "lightslategray", + "lightslategrey", + "lightsteelblue", + "lightyellow", + "lime", + "limegreen", + "linen", + "magenta", + "maroon", + "mediumaquamarine", + "mediumblue", + "mediumorchid", + "mediumpurple", + "mediumseagreen", + "mediumslateblue", + "mediumspringgreen", + "mediumturquoise", + "mediumvioletred", + "midnightblue", + "mintcream", + "mistyrose", + "moccasin", + "navajowhite", + "navy", + "oldlace", + "olive", + "olivedrab", + "orange", + "orangered", + "orchid", + "palegoldenrod", + "palegreen", + "paleturquoise", + "palevioletred", + "papayawhip", + "peachpuff", + "peru", + "pink", + "plum", + "powderblue", + "purple", + "red", + "rosybrown", + "royalblue", + "saddlebrown", + "salmon", + "ghostwhite", + "gold", + "goldenrod", + "gray", + "grey", + "green", + "greenyellow", + "honeydew", + "hotpink", + "indianred", + "indigo", + "ivory", + "khaki", + "lavender", + "lavenderblush", + "lawngreen", + "lemonchiffon", + "lightblue", + "lightcoral", + "lightcyan", + "lightgoldenrodyellow", + "lightgray", + "lightgreen", + "lightgrey", + "sandybrown", + "seagreen", + "seashell", + "sienna", + "silver", + "skyblue", + "slateblue", + "slategray", + "slategrey", + "snow", + "springgreen", + "steelblue", + "tan", + "teal", + "thistle", + "tomato", + "turquoise", + "violet", + "wheat", + "white", + "whitesmoke", + "yellow", + "yellowgreen" + }; + + int[][] vals = { + {240, 248, 255}, + {250, 235, 215}, + {0, 255, 255}, + {127, 255, 212}, + {240, 255, 255}, + {245, 245, 220}, + {255, 228, 196}, + {0, 0, 0}, + {255, 235, 205}, + {0, 0, 255}, + {138, 43, 226}, + {165, 42, 42}, + {222, 184, 135}, + {95, 158, 160}, + {127, 255, 0}, + {210, 105, 30}, + {255, 127, 80}, + {100, 149, 237}, + {255, 248, 220}, + {220, 20, 60}, + {0, 255, 255}, + {0, 0, 139}, + {0, 139, 139}, + {184, 134, 11}, + {169, 169, 169}, + {0, 100, 0}, + {169, 169, 169}, + {189, 183, 107}, + {139, 0, 139}, + {85, 107, 47}, + {255, 140, 0}, + {153, 50, 204}, + {139, 0, 0}, + {233, 150, 122}, + {143, 188, 143}, + {72, 61, 139}, + {47, 79, 79}, + {47, 79, 79}, + {0, 206, 209}, + {148, 0, 211}, + {255, 20, 147}, + {0, 191, 255}, + {105, 105, 105}, + {105, 105, 105}, + {30, 144, 255}, + {178, 34, 34}, + {255, 250, 240}, + {34, 139, 34}, + {255, 0, 255}, + {220, 220, 220}, + {255, 182, 193}, + {255, 160, 122}, + {32, 178, 170}, + {135, 206, 250}, + {119, 136, 153}, + {119, 136, 153}, + {176, 196, 222}, + {255, 255, 224}, + {0, 255, 0}, + {50, 205, 50}, + {250, 240, 230}, + {255, 0, 255}, + {128, 0, 0}, + {102, 205, 170}, + {0, 0, 205}, + {186, 85, 211}, + {147, 112, 219}, + {60, 179, 113}, + {123, 104, 238}, + {0, 250, 154}, + {72, 209, 204}, + {199, 21, 133}, + {25, 25, 112}, + {245, 255, 250}, + {255, 228, 225}, + {255, 228, 181}, + {255, 222, 173}, + {0, 0, 128}, + {253, 245, 230}, + {128, 128, 0}, + {107, 142, 35}, + {255, 165, 0}, + {255, 69, 0}, + {218, 112, 214}, + {238, 232, 170}, + {152, 251, 152}, + {175, 238, 238}, + {219, 112, 147}, + {255, 239, 213}, + {255, 218, 185}, + {205, 133, 63}, + {255, 192, 203}, + {221, 160, 221}, + {176, 224, 230}, + {128, 0, 128}, + {255, 0, 0}, + {188, 143, 143}, + {65, 105, 225}, + {139, 69, 19}, + {250, 128, 114}, + {248, 248, 255}, + {255, 215, 0}, + {218, 165, 32}, + {128, 128, 128}, + {128, 128, 128}, + {0, 128, 0}, + {173, 255, 47}, + {240, 255, 240}, + {255, 105, 180}, + {205, 92, 92}, + {75, 0, 130}, + {255, 255, 240}, + {240, 230, 140}, + {230, 230, 250}, + {255, 240, 245}, + {124, 252, 0}, + {255, 250, 205}, + {173, 216, 230}, + {240, 128, 128}, + {224, 255, 255}, + {250, 250, 210}, + {211, 211, 211}, + {144, 238, 144}, + {211, 211, 211}, + {244, 164, 96}, + {46, 139, 87}, + {255, 245, 238}, + {160, 82, 45}, + {192, 192, 192}, + {135, 206, 235}, + {106, 90, 205}, + {112, 128, 144}, + {112, 128, 144}, + {255, 250, 250}, + {0, 255, 127}, + {70, 130, 180}, + {210, 180, 140}, + {0, 128, 128}, + {216, 191, 216}, + {255, 99, 71}, + {64, 224, 208}, + {238, 130, 238}, + {245, 222, 179}, + {255, 255, 255}, + {245, 245, 245}, + {255, 255, 0}, + {154, 205, 50} + }; +} + +/* +aliceblue rgb(240, 248, 255) +antiquewhite rgb(250, 235, 215) +aqua rgb( 0, 255, 255) +aquamarine rgb(127, 255, 212) +azure rgb(240, 255, 255) +beige rgb(245, 245, 220) +bisque rgb(255, 228, 196) +black rgb( 0, 0, 0) +blanchedalmond rgb(255, 235, 205) +blue rgb( 0, 0, 255) +blueviolet rgb(138, 43, 226) +brown rgb(165, 42, 42) +burlywood rgb(222, 184, 135) +cadetblue rgb( 95, 158, 160) +chartreuse rgb(127, 255, 0) +chocolate rgb(210, 105, 30) +coral rgb(255, 127, 80) +cornflowerblue rgb(100, 149, 237) +cornsilk rgb(255, 248, 220) +crimson rgb(220, 20, 60) +cyan rgb( 0, 255, 255) +darkblue rgb( 0, 0, 139) +darkcyan rgb( 0, 139, 139) +darkgoldenrod rgb(184, 134, 11) +darkgray rgb(169, 169, 169) +darkgreen rgb( 0, 100, 0) +darkgrey rgb(169, 169, 169) +darkkhaki rgb(189, 183, 107) +darkmagenta rgb(139, 0, 139) +darkolivegreen rgb( 85, 107, 47) +darkorange rgb(255, 140, 0) +darkorchid rgb(153, 50, 204) +darkred rgb(139, 0, 0) +darksalmon rgb(233, 150, 122) +darkseagreen rgb(143, 188, 143) +darkslateblue rgb( 72, 61, 139) +darkslategray rgb( 47, 79, 79) +darkslategrey rgb( 47, 79, 79) +darkturquoise rgb( 0, 206, 209) +darkviolet rgb(148, 0, 211) +deeppink rgb(255, 20, 147) +deepskyblue rgb( 0, 191, 255) +dimgray rgb(105, 105, 105) +dimgrey rgb(105, 105, 105) +dodgerblue rgb( 30, 144, 255) +firebrick rgb(178, 34, 34) +floralwhite rgb(255, 250, 240) +forestgreen rgb( 34, 139, 34) +fuchsia rgb(255, 0, 255) +gainsboro rgb(220, 220, 220) +lightpink rgb(255, 182, 193) +lightsalmon rgb(255, 160, 122) +lightseagreen rgb( 32, 178, 170) +lightskyblue rgb(135, 206, 250) +lightslategray rgb(119, 136, 153) +lightslategrey rgb(119, 136, 153) +lightsteelblue rgb(176, 196, 222) +lightyellow rgb(255, 255, 224) +lime rgb( 0, 255, 0) +limegreen rgb( 50, 205, 50) +linen rgb(250, 240, 230) +magenta rgb(255, 0, 255) +maroon rgb(128, 0, 0) +mediumaquamarine rgb(102, 205, 170) +mediumblue rgb( 0, 0, 205) +mediumorchid rgb(186, 85, 211) +mediumpurple rgb(147, 112, 219) +mediumseagreen rgb( 60, 179, 113) +mediumslateblue rgb(123, 104, 238) +mediumspringgreen rgb( 0, 250, 154) +mediumturquoise rgb( 72, 209, 204) +mediumvioletred rgb(199, 21, 133) +midnightblue rgb( 25, 25, 112) +mintcream rgb(245, 255, 250) +mistyrose rgb(255, 228, 225) +moccasin rgb(255, 228, 181) +navajowhite rgb(255, 222, 173) +navy rgb( 0, 0, 128) +oldlace rgb(253, 245, 230) +olive rgb(128, 128, 0) +olivedrab rgb(107, 142, 35) +orange rgb(255, 165, 0) +orangered rgb(255, 69, 0) +orchid rgb(218, 112, 214) +palegoldenrod rgb(238, 232, 170) +palegreen rgb(152, 251, 152) +paleturquoise rgb(175, 238, 238) +palevioletred rgb(219, 112, 147) +papayawhip rgb(255, 239, 213) +peachpuff rgb(255, 218, 185) +peru rgb(205, 133, 63) +pink rgb(255, 192, 203) +plum rgb(221, 160, 221) +powderblue rgb(176, 224, 230) +purple rgb(128, 0, 128) +red rgb(255, 0, 0) +rosybrown rgb(188, 143, 143) +royalblue rgb( 65, 105, 225) +saddlebrown rgb(139, 69, 19) +salmon rgb(250, 128, 114) +ghostwhite rgb(248, 248, 255) +gold rgb(255, 215, 0) +goldenrod rgb(218, 165, 32) +gray rgb(128, 128, 128) +grey rgb(128, 128, 128) +green rgb( 0, 128, 0) +greenyellow rgb(173, 255, 47) +honeydew rgb(240, 255, 240) +hotpink rgb(255, 105, 180) +indianred rgb(205, 92, 92) +indigo rgb( 75, 0, 130) +ivory rgb(255, 255, 240) +khaki rgb(240, 230, 140) +lavender rgb(230, 230, 250) +lavenderblush rgb(255, 240, 245) +lawngreen rgb(124, 252, 0) +lemonchiffon rgb(255, 250, 205) +lightblue rgb(173, 216, 230) +lightcoral rgb(240, 128, 128) +lightcyan rgb(224, 255, 255) +lightgoldenrodyellow rgb(250, 250, 210) +lightgray rgb(211, 211, 211) +lightgreen rgb(144, 238, 144) +lightgrey rgb(211, 211, 211) +sandybrown rgb(244, 164, 96) +seagreen rgb( 46, 139, 87) +seashell rgb(255, 245, 238) +sienna rgb(160, 82, 45) +silver rgb(192, 192, 192) +skyblue rgb(135, 206, 235) +slateblue rgb(106, 90, 205) +slategray rgb(112, 128, 144) +slategrey rgb(112, 128, 144) +snow rgb(255, 250, 250) +springgreen rgb( 0, 255, 127) +steelblue rgb( 70, 130, 180) +tan rgb(210, 180, 140) +teal rgb( 0, 128, 128) +thistle rgb(216, 191, 216) +tomato rgb(255, 99, 71) +turquoise rgb( 64, 224, 208) +violet rgb(238, 130, 238) +wheat rgb(245, 222, 179) +white rgb(255, 255, 255) +whitesmoke rgb(245, 245, 245) +yellow rgb(255, 255, 0) +yellowgreen rgb(154, 205, 50) +*/ diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/IDNode.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/IDNode.java new file mode 100644 index 000000000..0ef57e895 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/IDNode.java @@ -0,0 +1,220 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.datatypes; + +import org.apache.fop.pdf.PDFGoTo; + + +public class IDNode +{ + private String + idValue, + internalLinkGoToPageReference; + + private PDFGoTo + internalLinkGoTo; + + private int + pageNumber = -1, + xPosition = 0, // x position on page + yPosition = 0; // y position on page + + + /** + * Constructor for IDNode + * + * @param idValue The value of the id for this node + */ + protected IDNode(String idValue) + { + this.idValue = idValue; + } + + + /** + * Sets the page number for this node + * + * @param number page number of node + */ + protected void setPageNumber(int number) + { + pageNumber=number; + } + + + /** + * Returns the page number of this node + * + * @return page number of this node + */ + public String getPageNumber() + { + return(pageNumber != -1)?new Integer(pageNumber).toString():null; + } + + + /** + * creates a new GoTo object for an internal link + * + * @param objectNumber + * the number to be assigned to the new object + */ + protected void createInternalLinkGoTo(int objectNumber) + { + if ( internalLinkGoToPageReference==null ) + { + internalLinkGoTo = new PDFGoTo(objectNumber,null); + } + else + { + internalLinkGoTo = new PDFGoTo(objectNumber,internalLinkGoToPageReference); + } + + if ( xPosition!=0 ) // if the position is known (if x is known, then y is known) + { + internalLinkGoTo.setXPosition(xPosition); + internalLinkGoTo.setYPosition(yPosition); + } + + } + + + + /** + * sets the page reference for the internal link's GoTo. The GoTo will jump to this page reference. + * + * @param pageReference + * the page reference to which the internal link GoTo should jump + * ex. 23 0 R + */ + protected void setInternalLinkGoToPageReference(String pageReference) + { + if ( internalLinkGoTo !=null ) + { + internalLinkGoTo.setPageReference(pageReference); + } + else + { + internalLinkGoToPageReference = pageReference; + } + + } + + + + /** + * Returns the reference to the Internal Link's GoTo object + * + * @return GoTo object reference + */ + protected String getInternalLinkGoToReference() + { + return internalLinkGoTo.referencePDF(); + } + + + + /** + * Returns the id value of this node + * + * @return this node's id value + */ + protected String getIDValue() + { + return idValue; + } + + + + /** + * Returns the PDFGoTo object associated with the internal link + * + * @return PDFGoTo object + */ + protected PDFGoTo getInternalLinkGoTo() + { + return internalLinkGoTo; + } + + + /** + * Determines whether there is an internal link GoTo for this node + * + * @return true if internal link GoTo for this node is set, false otherwise + */ + protected boolean isThereInternalLinkGoTo() + { + return internalLinkGoTo!=null; + } + + + /** + * Sets the position of this node + * + * @param x the x position + * @param y the y position + */ + protected void setPosition(int x, int y) + { + if ( internalLinkGoTo !=null ) + { + internalLinkGoTo.setXPosition(x); + internalLinkGoTo.setYPosition(y); + } + else + { + xPosition=x; + yPosition=y; + } + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/IDReferences.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/IDReferences.java new file mode 100644 index 000000000..e07969d90 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/IDReferences.java @@ -0,0 +1,341 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.datatypes; + +import org.apache.fop.pdf.PDFGoTo; +import org.apache.fop.layout.AreaContainer; + + +// Java +import java.util.Hashtable; +import java.util.Vector; +import java.util.Enumeration; +import java.util.NoSuchElementException; +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; + + +public class IDReferences { + private Hashtable + idReferences, + idValidation; + + final static int ID_PADDING = 5000; // space to add before id y position + + /** + * Constructor for IDReferences + */ + public IDReferences() + { + idReferences = new Hashtable(); + idValidation = new Hashtable(); + } + + + /** + * Creates and configures the specified id. + * + * @param id The id to initialize + * @param area The area where this id was encountered + * @exception FOPException + */ + public void initializeID(String id, Area area) throws FOPException + { + createID(id); + configureID(id,area); + } + + + /** + * Creates id entry + * + * @param id The id to create + * @param area The area where this id was encountered + * @exception FOPException + */ + public void createID(String id) throws FOPException + { + if ( id!=null && !id.equals("") ) { + if ( doesIDExist(id) ) { + throw new FOPException("The id \""+id+"\" already exists in this document"); + } + else { + createNewId(id); + removeFromIdValidationList(id); + } + + } + } + + + /** + * Configures this id + * + * @param id The id to configure + * @param area The area where the id was encountered + */ + public void configureID(String id, Area area) + { + if ( id!=null && !id.equals("") ) { + setPosition(id,area.getPage().getBody().getXPosition()+area.getTableCellXOffset()-ID_PADDING,area.getPage().getBody().getYPosition() - area.getAbsoluteHeight()+ID_PADDING); + setPageNumber(id,area.getPage().getNumber()); + area.getPage().addToIDList(id); + } + } + + /** + * Adds id to validation list to be validated . This should be used if it is unsure whether the id is valid + * + * @param id id to be added + */ + public void addToIdValidationList(String id) + { + idValidation.put(id,""); + } + + + + /** + * Removes id from validation list. This should be used if the id has been determined to be valid + * + * @param id the id to remove + */ + public void removeFromIdValidationList(String id) + { + idValidation.remove(id); + } + + + /** + * Removes id from IDReferences + * + * @param id The id to remove + * @exception FOPException + */ + public void removeID(String id) + { + idReferences.remove(id); + } + + + /** + * Determines whether all id's are valid + * + * @return true if all id's are valid, false otherwise + */ + public boolean isEveryIdValid() + { + return(idValidation.size()==0); + } + + + + /** + * Returns all invalid id's still remaining in the validation list + * + * @return invalid ids from validation list + */ + public String getInvalidIds() + { + StringBuffer list=new StringBuffer(); + Enumeration enum=idValidation.keys(); + while(enum.hasMoreElements()) + { + list.append("\n\"").append(enum.nextElement().toString()).append("\" ") ; + } + return list.toString(); + } + + + /** + * Determines whether specified id already exists in IDReferences + * + * @param id the id to search for + * @return true if ID was found, false otherwise + */ + public boolean doesIDExist(String id) + { + return idReferences.containsKey(id); + } + + + /** + * Determines whether the GoTo reference for the specified id is defined + * + * @param id the id to search for + * @return true if GoTo reference is defined, false otherwise + */ + public boolean doesGoToReferenceExist(String id) + { + IDNode node = (IDNode)idReferences.get(id); + return node.isThereInternalLinkGoTo(); + } + + + + + /** + * Returns the reference to the GoTo object used for the internal link + * + * @param id the id whose reference to use + * @return reference to GoTo object + */ + public String getInternalLinkGotToReference(String id) + { + IDNode node = (IDNode)idReferences.get(id); + return node.getInternalLinkGoToReference(); + } + + + + /** + * creates an Internal Link GoTo object for this id + * + * @param id The id for which to set the Internal Link Go To + * @param objectNumber + * The object number to use for the GoTo object + * @return the object reference of the new GoTo object + */ + public String createInternalLinkGoTo(String id, int objectNumber) + { + IDNode node = (IDNode)idReferences.get(id); // retrieve id node + node.createInternalLinkGoTo(objectNumber); // create Internal Link GoTo object + return node.getInternalLinkGoToReference(); //return Internal Link Go To object reference + } + + + + /** + * Adds an id to IDReferences + * + * @param id the id to add + */ + public void createNewId(String id) + { + IDNode node=new IDNode(id); + idReferences.put(id,node); + } + + + /** + * Returns the PDFGoTo object for the specified id + * + * @param id the id for which the PDFGoTo to be retrieved is associated + * @return the PDFGoTo object associated with the specified id + */ + public PDFGoTo getPDFGoTo(String id) + { + IDNode node=(IDNode)idReferences.get(id); + return node.getInternalLinkGoTo(); + } + + + /** + * sets the page reference for the internal link's GoTo. The GoTo will jump to this page reference. + * + * @param pageReference + * the page reference to which the internal link GoTo should jump + * ex. 23 0 R + */ + public void setInternalGoToPageReference(String id, String pageReference) + { + IDNode node=(IDNode)idReferences.get(id); + node.setInternalLinkGoToPageReference(pageReference); + } + + + /** + * Sets the page number for the specified id + * + * @param id The id whose page number is being set + * @param pageNumber The page number of the specified id + */ + public void setPageNumber(String id, int pageNumber) + { + IDNode node=(IDNode)idReferences.get(id); + node.setPageNumber(pageNumber); + } + + + /** + * Returns the page number where the specified id is found + * + * @param id The id whose page number to return + * @return the page number of the id, or null if the id does not exist + */ + public String getPageNumber(String id) + { + if ( doesIDExist(id) ) { + IDNode node=(IDNode)idReferences.get(id); + return node.getPageNumber(); + } + else { + addToIdValidationList(id); + return null; + } + } + + + /** + * Sets the x and y position of specified id + * + * @param id the id whose position is to be set + * @param x x position of id + * @param y y position of id + */ + public void setPosition(String id, int x, int y) + { + IDNode node=(IDNode)idReferences.get(id); + node.setPosition(x,y); + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/Length.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/Length.java new file mode 100644 index 000000000..763c61100 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/Length.java @@ -0,0 +1,148 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.datatypes; + +import org.apache.fop.fo.Property; +import org.apache.fop.messaging.MessageHandler; + +/** + * a length quantity in XSL + */ +public class Length { + + protected int millipoints = 0; + + protected double fontsize = 12; + + boolean auto = false; + + /** + * set the length given a particular String specifying length and units + */ + public Length (String len) { + convert(len); + } + + /** + * set the length given a particular String specifying length and units, + * and the font-size (necessary for an em) + */ + public Length (String len, int fontsize) { + this.fontsize = fontsize; + convert(len); + } + + /** + * set the length given a particular multiplier and a length property + */ + public Length (double multiplier, Property property) { + this.millipoints = (int)(multiplier * property.getLength().mvalue()); + } + + protected void convert(String len) { + /* convert the given length to a dimensionless integer representing + points. */ + + int assumed_resolution = 1; // points/pixel + + int l = len.length(); + + if (l == 0) { + MessageHandler.errorln("WARNING: empty length"); + this.millipoints = 0; + } else if (len.equals("auto")) { + this.auto = true; + } else { + String unit = len.substring(l-2); + double dvalue = + Double.valueOf(len.substring(0,(l-2))).doubleValue(); + + if (unit.equals("in")) + dvalue = dvalue * 72; + else if (unit.equals("cm")) + dvalue = dvalue * 28.35; + else if (unit.equals("mm")) + dvalue = dvalue * 2.84; + else if (unit.equals("pt")) + dvalue = dvalue; + else if (unit.equals("pc")) + dvalue = dvalue * 12; + else if (unit.equals("em")) + dvalue = dvalue * fontsize; + else if (unit.equals("px")) + dvalue = dvalue * assumed_resolution; + else { + dvalue = 0; + MessageHandler.errorln("ERROR: unknown length units in " + + len); + } + + this.millipoints = (int) (dvalue * 1000); + } + } + + /** + * return the length in 1/1000ths of a point + */ + public int mvalue() { + return millipoints; + } + + public boolean isAuto() + { + return auto; + } + + public String toString() { + String s = millipoints + "mpt"; + return s; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/PathData.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/PathData.java new file mode 100644 index 000000000..bdb91cf63 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/PathData.java @@ -0,0 +1,302 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.datatypes; + +import org.apache.fop.fo.Property; +import org.apache.fop.svg.PathPoint; +import org.apache.fop.dom.svg.*; +import org.w3c.dom.svg.*; + +import java.util.*; +/** + * a PathData quantity in XSL + * This class parses the string of path data and create a list of + * object commands. It is up to renderers (or whatever) to interpret + * the command properly. + * eg. m at the start is an absolute moveto. + * + * + * @author Keiron Liddle + */ +public class PathData { + Vector table = new Vector(); + + /** + * set the PathData given a particular String specifying PathData and units + */ + public PathData (String len) + { + convert(len); + } + + protected void convert(String len) + { + StringTokenizer st = new StringTokenizer(len, "MmLlHhVvCcSsQqTtAaZz", true); + /* + * If there are two numbers and no spaces then it is assumed that all + * numbers are the same number of chars (3), otherwise there is an error + * not mentioned in spec. + */ + while(st.hasMoreTokens()) { + String str = st.nextToken(); + int pos; + if(str.equals("M")) { + float[][] vals = getPoints(2, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_MOVETO_ABS, vals[count])); + } + } + } else if(str.equals("m")) { + // if first element treat as M + // otherwise treat as implicit lineto, this is handled by renderers + float[][] vals = getPoints(2, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_MOVETO_REL, vals[count])); + } + } + } else if(str.equals("L")) { + float[][] vals = getPoints(2, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_LINETO_ABS, vals[count])); + } + } + } else if(str.equals("l")) { + float[][] vals = getPoints(2, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_LINETO_REL, vals[count])); + } + } + } else if(str.equals("H")) { + float[][] vals = getPoints(1, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS, vals[count])); + } + } + } else if(str.equals("h")) { + float[][] vals = getPoints(1, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL, vals[count])); + } + } + } else if(str.equals("V")) { + float[][] vals = getPoints(1, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS, vals[count])); + } + } + } else if(str.equals("v")) { + float[][] vals = getPoints(1, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL, vals[count])); + } + } + } else if(str.equals("C")) { + float[][] vals = getPoints(6, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS, vals[count])); + } + } + } else if(str.equals("c")) { + float[][] vals = getPoints(6, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL, vals[count])); + } + } + } else if(str.equals("S")) { + float[][] vals = getPoints(4, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS, vals[count])); + } + } + } else if(str.equals("s")) { + float[][] vals = getPoints(4, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL, vals[count])); + } + } + } else if(str.equals("Q")) { + float[][] vals = getPoints(4, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS, vals[count])); + } + } + } else if(str.equals("q")) { + float[][] vals = getPoints(4, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL, vals[count])); + } + } + } else if(str.equals("T")) { + float[][] vals = getPoints(2, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_ABS, vals[count])); + } + } + } else if(str.equals("t")) { + float[][] vals = getPoints(2, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_SMOOTH_REL, vals[count])); + } + } + } else if(str.equals("A")) { + float[][] vals = getPoints(7, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_ARC_ABS, vals[count])); + } + } + } else if(str.equals("a")) { + float[][] vals = getPoints(7, st); + if(vals != null) { + for(int count = 0; count < vals.length; count++) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_ARC_REL, vals[count])); + } + } + } else if(str.equals("Z") || str.equals("z")) { + addSVGPathSeg(new SVGPathSegImpl(SVGPathSeg.PATHSEG_CLOSEPATH, null)); + } + } + } + + public Vector getPath() + { + return table; + } + + public String toString() + { + return ""; + } + + float[][] getPoints(int num, StringTokenizer st) + { + float[] set; + String str; + int pos; + float[][] ret = null; + if(st.hasMoreTokens()) { + str = st.nextToken(); + str = str.trim(); +// pos = str.indexOf(" "); +/* if((str.indexOf(" ") == -1) && (str.indexOf(",") == -1) && (str.indexOf("-") == -1)) { + int length = str.length(); + if((length % num) != 0) { + // invalid number comb + } else { + // how do we determine the length of a single number? + } + } else {*/ + { + StringTokenizer pointtok = new StringTokenizer(str, " ,-\n\r\t", true); + int count = 0; + Vector values = new Vector(); + set = new float[num]; + boolean neg; + while(pointtok.hasMoreTokens()) { + String point = null; + String delim = pointtok.nextToken(); + if(delim.equals("-")) { + neg = true; + if(pointtok.hasMoreTokens()) { + point = pointtok.nextToken(); + } else { + break; + } + } else { + neg = false; + if(delim.equals(" ") || delim.equals(",") || delim.equals("\r") || delim.equals("\n") || delim.equals("\t")) { + continue; + } + point = delim; + } + + float pd = Float.valueOf(point).floatValue(); + if(neg) + pd = -pd; + set[count] = pd; + count++; + if(count == num) { + values.addElement(set); + set = new float[num]; + count = 0; + } + } + count = 0; + ret = new float[values.size()][]; + for(Enumeration e = values.elements(); e.hasMoreElements(); ) { + ret[count++] = (float[])e.nextElement(); + } + } + } + return ret; + } + + protected void addSVGPathSeg(SVGPathSeg pc) + { + table.addElement(pc); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/PointsData.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/PointsData.java new file mode 100644 index 000000000..87065eccd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/PointsData.java @@ -0,0 +1,99 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.datatypes; + +import org.apache.fop.fo.Property; +import org.apache.fop.svg.PathPoint; + +import java.util.*; + +/** + * Parses the points information in polylines and polygons + * + */ +public class PointsData { + Vector table = new Vector(); + + public PointsData (String len) + { + convert(len); + } + + protected void convert(String len) + { + // need to handle negatives + StringTokenizer st = new StringTokenizer(len, ", \n\r\t"); + while(st.hasMoreTokens()) { + String str1 = st.nextToken().trim(); + if(st.hasMoreTokens()) { + String str2 = st.nextToken().trim(); + float x = 0; + float y = 0; + try { + x = Float.valueOf(str1).floatValue(); + y = Float.valueOf(str2).floatValue(); + } catch(NumberFormatException nfe) { + } + addPoint(new PathPoint(x, y)); + } + } + } + + public Vector getPoints() + { + return table; + } + + protected void addPoint(PathPoint pc) + { + table.addElement(pc); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/StyleData.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/StyleData.java new file mode 100644 index 000000000..c1c2548bc --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/StyleData.java @@ -0,0 +1,81 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.datatypes; + +import org.apache.fop.fo.Property; +import org.apache.fop.messaging.MessageHandler; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.css.*; + +import org.w3c.dom.css.*; + +import java.util.*; +/** + * a StyleData quantity in XSL + * + * @author Keiron Liddle + */ +public class StyleData { + CSSStyleDeclaration styleDec = new CSSStyleDeclarationImpl(); + + /** + * set the StyleData given a particular String specifying StyleData and units + */ + public StyleData (String str) { + styleDec.setCssText(str); + } + + public CSSStyleDeclaration getStyle() + { + return styleDec; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/TransformData.java b/fop-0_14_0_regions/src/org/apache/fop/datatypes/TransformData.java new file mode 100644 index 000000000..c88838afd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/TransformData.java @@ -0,0 +1,267 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.datatypes; + +import org.apache.fop.fo.Property; +import org.apache.fop.messaging.MessageHandler; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGTransformImpl; + +import org.w3c.dom.svg.*; + +import java.util.*; +/** + * a TransformData quantity in XSL + * + * @author Keiron Liddle + */ +public class TransformData { + SVGAnimatedTransformList trans; + + /** + * set the TransformData given a particular String specifying TransformData and units + */ + public TransformData (String len) { + convert(len); + } + + protected void convert(String len) + { + Vector list = new Vector(); + StringTokenizer st = new StringTokenizer(len, "()"); + // need to check for unbalanced brackets + while(st.hasMoreTokens()) { + String str = st.nextToken(); + String type = str.trim(); + String value; + if(st.hasMoreTokens()) { + value = st.nextToken().trim(); + SVGTransform transform = new SVGTransformImpl(); + if(type.equals("translate")) { + float xlen = 0; + float ylen = 0; + int pos = value.indexOf(","); + if(pos != -1) { + SVGLengthImpl length; + length = new SVGLengthImpl(); + length.setValueAsString(value.substring(0, pos).trim()); + xlen = length.getValue(); + length = new SVGLengthImpl(); + length.setValueAsString(value.substring(pos + 1, value.length()).trim()); + ylen = length.getValue(); + } + transform.setTranslate(xlen, ylen); + list.addElement(transform); + } else if(type.equals("skewX")) { +// SVGAngleImpl angle = new SVGAngleImpl(); +// angle.setValueAsString(value); + float angle = Float.valueOf(value).floatValue(); + transform.setSkewX(angle); + list.addElement(transform); + } else if(type.equals("skewY")) { + // SVGAngleImpl angle = new SVGAngleImpl(); +// angle.setValueAsString(value); + float angle = Float.valueOf(value).floatValue(); + transform.setSkewY(angle); + list.addElement(transform); + } else if(type.equals("scale")) { + float xlen = 0; + float ylen = 0; + int pos = value.indexOf(","); + if(pos != -1) { +// try { + xlen = Float.valueOf(value.substring(0, pos).trim()).floatValue(); +// } catch(Exception e) { +// } +// try { + ylen = Float.valueOf(value.substring(pos + 1, value.length()).trim()).floatValue(); +// } catch(Exception e) { +// } + transform.setScale(xlen, ylen); + } else { + xlen = Float.valueOf(value).floatValue(); + transform.setScale(xlen, xlen); + } + list.addElement(transform); + } else if(type.equals("rotate")) { + // SVGAngleImpl angle = new SVGAngleImpl(); +// angle.setValueAsString(value); + float angle = Float.valueOf(value).floatValue(); + transform.setRotate(angle, 0, 0); + list.addElement(transform); + } else if(type.equals("matrix")) { + SVGMatrix matrix = new SVGMatrixImpl(); + StringTokenizer mt = new StringTokenizer(value, " ,\r\n-", true); + // need to handle negatives + String tok; + boolean neg = false; + if(mt.hasMoreTokens()) { + tok = mt.nextToken(); + while(tok.equals(" ") || tok.equals(",") || tok.equals("\n") || tok.equals("\r") || tok.equals("-")) { + if(tok.equals("-")) { + neg = true; + } + if(!mt.hasMoreTokens()) + break; + tok = mt.nextToken(); + } + float floatVal = Float.valueOf(tok).floatValue(); + if(neg) + floatVal = -floatVal; + matrix.setA(floatVal); + } + if(mt.hasMoreTokens()) { + tok = mt.nextToken(); + while(tok.equals(" ") || tok.equals(",") || tok.equals("\n") || tok.equals("\r") || tok.equals("-")) { + if(tok.equals("-")) { + neg = true; + } + if(!mt.hasMoreTokens()) + break; + tok = mt.nextToken(); + } + float floatVal = Float.valueOf(tok).floatValue(); + if(neg) + floatVal = -floatVal; + matrix.setB(floatVal); + } + if(mt.hasMoreTokens()) { + tok = mt.nextToken(); + while(tok.equals(" ") || tok.equals(",") || tok.equals("\n") || tok.equals("\r") || tok.equals("-")) { + if(tok.equals("-")) { + neg = true; + } + if(!mt.hasMoreTokens()) + break; + tok = mt.nextToken(); + } + float floatVal = Float.valueOf(tok).floatValue(); + if(neg) + floatVal = -floatVal; + matrix.setC(floatVal); + } + if(mt.hasMoreTokens()) { + tok = mt.nextToken(); + while(tok.equals(" ") || tok.equals(",") || tok.equals("\n") || tok.equals("\r") || tok.equals("-")) { + if(tok.equals("-")) { + neg = true; + } + if(!mt.hasMoreTokens()) + break; + tok = mt.nextToken(); + } + float floatVal = Float.valueOf(tok).floatValue(); + if(neg) + floatVal = -floatVal; + matrix.setD(floatVal); + } + SVGLengthImpl length; + if(mt.hasMoreTokens()) { + tok = mt.nextToken(); + while(tok.equals(" ") || tok.equals(",") || tok.equals("\n") || tok.equals("\r") || tok.equals("-")) { + if(tok.equals("-")) { + neg = true; + } + if(!mt.hasMoreTokens()) + break; + tok = mt.nextToken(); + } + float floatVal = Float.valueOf(tok).floatValue(); + if(neg) + floatVal = -floatVal; +// if(neg) +// tok = "-" + tok; +// length = new SVGLengthImpl(); +// length.setValueAsString(tok); + matrix.setE(floatVal); + } + if(mt.hasMoreTokens()) { + tok = mt.nextToken(); + while(tok.equals(" ") || tok.equals(",") || tok.equals("\n") || tok.equals("\r") || tok.equals("-")) { + if(tok.equals("-")) { + neg = true; + } + if(!mt.hasMoreTokens()) + break; + tok = mt.nextToken(); + } + float floatVal = Float.valueOf(tok).floatValue(); + if(neg) + floatVal = -floatVal; +// if(neg) +// tok = "-" + tok; +// length = new SVGLengthImpl(); +// length.setValueAsString(tok); + matrix.setF(floatVal); + } + transform.setMatrix(matrix); + list.addElement(transform); + } else { + MessageHandler.errorln("WARNING: Unknown Transform type : " + type); + } + } + } + if(list != null) { + SVGTransformList stl = new SVGTransformListImpl(); + for(Enumeration e = list.elements(); e.hasMoreElements(); ) { + stl.appendItem((SVGTransform)e.nextElement()); + } + trans = new SVGAnimatedTransformListImpl(); + trans.setBaseVal(stl); + } + } + + public SVGAnimatedTransformList getTransform() + { + return trans; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/datatypes/package.html b/fop-0_14_0_regions/src/org/apache/fop/datatypes/package.html new file mode 100644 index 000000000..05d202085 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/datatypes/package.html @@ -0,0 +1,6 @@ + +org.apache.fop.datatypes Package + +

XSL Datatypes

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/CharacterDataImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/CharacterDataImpl.java new file mode 100644 index 000000000..ed7d39e68 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/CharacterDataImpl.java @@ -0,0 +1,114 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom; + +import org.apache.fop.datatypes.*; +import org.apache.fop.messaging.*; +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.*; + +import java.util.*; + +/** + * + * + */ +public class CharacterDataImpl extends NodeImpl implements CharacterData { + String str; + + public CharacterDataImpl() + { + } + + public String getData() + { + return str; + } + + public void setData(String s) + { + str = s; + } + + public void insertData(int i, String s) + { + } + + public void deleteData(int i, int j) + { + } + + public int getLength() + { + return str.length(); + } + + public void appendData(String s) + { + str = str + s; + } + + public void replaceData(int i, int j, String s) + { + } + + public String substringData(int i, int j) + { + return str.substring(i, j); + } + + public String toString() + { + return "Character Data: " + str; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/ElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/ElementImpl.java new file mode 100644 index 000000000..9e10b6daa --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/ElementImpl.java @@ -0,0 +1,173 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom; + +import org.apache.fop.datatypes.*; + +import org.w3c.dom.*; + +import java.util.*; + +/** + * + * + */ +public class ElementImpl extends NodeImpl implements Element { + + public Node replaceChild(Node n, Node no) + { + return null; + } + + public String getAttribute(String name) + { + return null; + } + + public void setAttribute(String name, String value) throws DOMException + { + } + + public void removeAttribute(String name) throws DOMException + { + } + + public Attr getAttributeNode(String name) + { + return null; + } + + public Attr setAttributeNode(Attr newAttr) + throws DOMException + { + return null; + } + + public Attr removeAttributeNode(Attr oldAttr) + throws DOMException + { + return null; + } + + public NodeList getElementsByTagName(String name) + { + NodeList nl = getChildNodes(); + Vector eles = new Vector(); + for(int count = 0; count < nl.getLength(); count++) { + Node el = (Node)nl.item(count); + if(el instanceof Element) { + if(name.equals(((Element)el).getTagName())) { + eles.addElement(el); + } + NodeList subtags = ((Element)el).getElementsByTagName(name); + for(int c = 0; c < subtags.getLength(); c++) { + Node node = (Node)subtags.item(c); + eles.addElement(node); + } + } + } + NodeList val = new NodeListImpl(eles); + return val; + } + + public String getAttributeNS(String namespaceURI, + String localName) + { + return null; + } + + public void setAttributeNS(String namespaceURI, + String qualifiedName, + String value) + throws DOMException + { + } + + public void removeAttributeNS(String namespaceURI, + String localName) + throws DOMException + { + } + + public Attr getAttributeNodeNS(String namespaceURI, + String localName) + { + return null; + } + + public Attr setAttributeNodeNS(Attr newAttr) + throws DOMException + { + return null; + } + + public NodeList getElementsByTagNameNS(String namespaceURI, + String localName) + { + return null; + } + + public boolean hasAttributeNS (String namespaceURI, + String localName) + { + return false; + } + + public boolean hasAttribute (String name) + { + return false; + } + + public boolean hasAttributes() + { + return false; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/NodeImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/NodeImpl.java new file mode 100644 index 000000000..eb20a7ecd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/NodeImpl.java @@ -0,0 +1,256 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom; + +import org.apache.fop.datatypes.*; + +import org.w3c.dom.*; + +import java.util.*; + +/** + * + * + */ +public class NodeImpl implements Node { + protected Vector childs = new Vector(); + Node parent = null; + protected Document ownerDoc; + + public Node replaceChild(Node n, Node no) + { + return null; + } + + public String getNodeName() + { + return null; + } + + public short getNodeType() + { + return 0; + } + + public Node getParentNode() + { + return parent; + } + + public NodeList getChildNodes() + { + return new NodeListImpl(childs); + } + + public Node getFirstChild() + { + if(childs.size() > 0) { + return (Node)childs.elementAt(0); + } + return null; + } + + public Node getLastChild() + { + if(childs.size() > 0) { + return (Node)childs.elementAt(childs.size() - 1); + } + return null; + } + + public Node getPreviousSibling() + { + int ind = ((NodeImpl)parent).childs.indexOf(this); + if(ind > 0) { + return (Node)((NodeImpl)parent).childs.elementAt(ind - 1); + } + return null; + } + + public Node getNextSibling() + { + int ind = ((NodeImpl)parent).childs.indexOf(this); + if(ind + 1 < ((NodeImpl)parent).childs.size()) { + return (Node)((NodeImpl)parent).childs.elementAt(ind + 1); + } + return null; + } + + public NamedNodeMap getAttributes() + { + return null; + } + + public Document getOwnerDocument() + { + return ownerDoc; + } + + void setOwnerDocument(Document doc) + { + ownerDoc = doc; + NodeList nl = getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof ElementImpl) { + ((ElementImpl)n).setOwnerDocument(ownerDoc); + } + } + } + + public Node insertBefore(Node newChild, + Node refChild) + throws DOMException + { + return null; + } + + public Node removeChild(Node oldChild) + throws DOMException + { + return null; + } + + public Node appendChild(Node newChild) + throws DOMException + { + childs.addElement(newChild); + if(newChild instanceof ElementImpl) { + ElementImpl ele = (ElementImpl)newChild; + ele.parent = this; + ele.setOwnerDocument(ownerDoc); + } + return newChild; + } + + public boolean hasChildNodes() + { + return childs.size() > 0; + } + + public Node cloneNode(boolean deep) + { + return null; + } + + public void normalize() + { + } + + public boolean supports(String feature, + String version) + { + return false; + } + + public String getNamespaceURI() + { + return ""; + } + + public String getPrefix() + { + return "svg"; + } + + public void setPrefix(String prefix) throws DOMException + { + } + + public String getLocalName() + { + return null; + } + + public String getNodeValue() throws DOMException + { + return null; + } + + public void setNodeValue(String nodeValue) throws DOMException + { + } + + public String getTagName() + { + return null; + } + + public boolean hasAttributes() + { + return false; + } +} + +class NodeListImpl implements NodeList +{ + Vector vect = null; + + NodeListImpl(Vector v) + { + vect = v; + } + + public int getLength() + { + return vect.size(); + } + + public Node item(int i) + { + return (Node)vect.elementAt(i); + } + + public String toString() + { + return vect.toString(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSPrimitiveValueImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSPrimitiveValueImpl.java new file mode 100644 index 000000000..484925726 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSPrimitiveValueImpl.java @@ -0,0 +1,116 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.css; + +import org.w3c.dom.css.*; + +/** + * + * + */ +public class CSSPrimitiveValueImpl extends CSSValueImpl implements CSSPrimitiveValue { + short primType = CSS_UNKNOWN; + float floatVal = 0; + String strVal = null; + + public CSSPrimitiveValueImpl() + { + type = CSS_PRIMITIVE_VALUE; + } + + public short getPrimitiveType() + { + return primType; + } + + public void setFloatValue(short unitType, + float floatValue) + { + primType = unitType; + this.floatVal = floatValue; + } + + public float getFloatValue(short unitType) + { + return this.floatVal; + } + + public void setStringValue(short stringType, + String stringValue) + { + strVal = stringValue; + } + + public String getStringValue() + { + return strVal; + } + + public Counter getCounterValue() + { + return null; + } + + public Rect getRectValue() + { + return null; + } + + public RGBColor getRGBColorValue() + { + if(primType == CSSPrimitiveValue.CSS_RGBCOLOR) { + } else { + // throw a DOMException + } + return null; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleDeclarationImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleDeclarationImpl.java new file mode 100644 index 000000000..7e4958727 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleDeclarationImpl.java @@ -0,0 +1,381 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.css; + +import org.apache.fop.datatypes.*; +import org.apache.fop.messaging.*; +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.css.*; +import org.w3c.dom.svg.*; + +import java.util.*; + +/** + * + * + */ +public class CSSStyleDeclarationImpl implements CSSStyleDeclaration { + Hashtable table = new Hashtable(); + + public CSSStyleDeclarationImpl() + { + } + + public String removeProperty(String str) + { + return null; + } + + public String getCssText() + { + return null; + } + + public void setCssText(String str) + { + try { + parseStyleText(str); + } catch(Exception e) { + e.printStackTrace(); + } + } + + protected void parseStyleText(String len) { + StringTokenizer st = new StringTokenizer(len, ";"); + while(st.hasMoreTokens()) { + String str = st.nextToken(); + int pos; + pos = str.indexOf(":"); + if(pos != -1) { + String type = str.substring(0, pos).trim(); + String value = str.substring(pos + 1, str.length()).trim(); + if(type.equals("stroke-width")) { + CSSPrimitiveValue primval = new LengthValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("stroke")) { + CSSPrimitiveValue primval = new RGBColorValue(); + primval.setCssText(value); + table.put(type, primval); +/* if(value.startsWith("url(")) { + table.put(type, new String(value)); + } else if(!value.equals("none")) { + table.put(type, new ColorType(value)); + } else if(value.equals("none")) { + table.put(type, value); + }*/ + } else if(type.equals("color")) { + CSSPrimitiveValue primval = new RGBColorValue(); + primval.setCssText(value); + table.put(type, primval); +// if(!value.equals("none")) +// table.put("stroke", new ColorType(value));//?? +// table.put(type, new ColorType(value));//?? + } else if(type.equals("stroke-linecap")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("stroke-linejoin")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("stroke-miterlimit")) { + CSSPrimitiveValue primval = new LengthValue(); + primval.setCssText(value); + table.put(type, primval); +// table.put(type, new SVGLengthImpl(value)); + } else if(type.equals("stroke-dasharray")) { + // array of space or comma separated numbers +/* if(!value.equals("none")) { + Vector list = new Vector(); + StringTokenizer array = new StringTokenizer(value, " ,"); + while(array.hasMoreTokens()) { + String intstr = array.nextToken(); + list.addElement(new Integer(Integer.parseInt(intstr))); + } + table.put(type, list); + }*/ + // else leave ?? + } else if(type.equals("stroke-dashoffset")) { + CSSPrimitiveValue primval = new LengthValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("stroke-opacity")) { + } else if(type.equals("fill")) { + CSSPrimitiveValue primval = new RGBColorValue(); + primval.setCssText(value); + table.put(type, primval); +/* if(value.startsWith("url(")) { + table.put(type, new String(value)); + } else if(!value.equals("none")) { + table.put(type, new ColorType(value)); + } else { + table.put(type, value); + }*/ + } else if(type.equals("fill-rule")) { + // nonzero + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-size")) { + CSSPrimitiveValue primval = new LengthValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-family")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-weight")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-style")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-variant")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-stretch")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("font-size-adjust")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("letter-spacing")) { +// table.put(type, new SVGLengthImpl(value)); + } else if(type.equals("word-spacing")) { +// table.put(type, new SVGLengthImpl(value)); + } else if(type.equals("text-decoration")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("mask")) { +// if(value.startsWith("url(")) { +// value = value.substring(4, value.length() - 1); +// } +// table.put(type, value); + } else if(type.equals("fill-opacity")) { + CSSPrimitiveValue primval = new LengthValue(); + primval.setCssText(value); + table.put(type, primval); +// table.put(type, new SVGLengthImpl(value)); + } else if(type.equals("opacity")) { + CSSPrimitiveValue primval = new LengthValue(); + primval.setCssText(value); + table.put(type, primval); +// table.put(type, new SVGLengthImpl(value)); + } else if(type.equals("filter")) { +// table.put(type, new Filter(value)); + } else if(type.equals("stop-color")) { + CSSPrimitiveValue primval = new RGBColorValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("marker-start")) { +// table.put(type, new URLValue(value)); + } else if(type.equals("marker-mid")) { +// table.put(type, new URLValue(value)); + } else if(type.equals("marker-end")) { +// table.put(type, new URLValue(value)); + } else if(type.equals("text-antialiasing")) { +// boolean + } else if(type.equals("stroke-antialiasing")) { +// boolean + } else if(type.equals("writing-mode")) { + } else if(type.equals("glyph-orientation-vertical")) { + } else if(type.equals("glyph-orientation-horizontal")) { + } else if(type.equals("direction")) { + } else if(type.equals("unicode-bidi")) { + } else if(type.equals("text-anchor")) { + CSSPrimitiveValue primval = new StringValue(); + primval.setCssText(value); + table.put(type, primval); + } else if(type.equals("dominant-baseline")) { + } else if(type.equals("baseline-identifier")) { + } else if(type.equals("baseline-shift")) { + } else if(type.equals("font-size-adjust")) { + } else { + MessageHandler.logln("WARNING: Unknown style element : " + type); + } + } else { + MessageHandler.errorln("ERROR: Invalid style element " + str); + } + } + } + + public String getPropertyValue(String str) + { + return getPropertyCSSValue(str).getCssText(); + } + + public void setProperty(String a, String b, String c) + { + } + + public String item(int n) + { + return null; + } + + public CSSRule getParentRule() + { + return null; + } + + public String getPropertyPriority(String str) + { + return null; + } + + public CSSValue getPropertyCSSValue(String str) + { + return (CSSValue)table.get(str); + } + + public int getLength() + { + return table.size(); + } + + class RGBColorValue extends CSSPrimitiveValueImpl { + RGBColor col = null; + + public void setCssText(String str) + { + super.setCssText(str); + if(str.startsWith("url(")) { + primType = CSS_URI; + } else if(str.equals("currentColor")) { + primType = CSS_STRING; + } else if(!str.equals("none")) { + float red; + float green; + float blue; + ColorType ct = new ColorType(str); + red = ct.red(); + green = ct.green(); + blue = ct.blue(); + col = new RGBColorImpl(red, green, blue); + primType = CSS_RGBCOLOR; + } else { + primType = CSS_STRING; + } + } + + public RGBColor getRGBColorValue() + { + if(primType != CSS_RGBCOLOR) { + // throw exception + } + return col; + } + } + + /* + * This should probalby be moved to dom.svg... + */ + class LengthValue extends CSSPrimitiveValueImpl { + + public void setCssText(String str) + { + super.setCssText(str); + SVGLength length = new SVGLengthImpl(str); + floatVal = length.getValue(); + switch(length.getUnitType()) { + case SVGLength.SVG_LENGTHTYPE_IN: + primType = CSS_IN; + break; + case SVGLength.SVG_LENGTHTYPE_CM: + primType = CSS_CM; + break; + case SVGLength.SVG_LENGTHTYPE_MM: + primType = CSS_MM; + break; + case SVGLength.SVG_LENGTHTYPE_PT: + primType = CSS_PT; + break; + case SVGLength.SVG_LENGTHTYPE_PC: + primType = CSS_PC; + break; + case SVGLength.SVG_LENGTHTYPE_EMS: + primType = CSS_EMS; + break; + case SVGLength.SVG_LENGTHTYPE_PX: + primType = CSS_PX; + break; + case SVGLength.SVG_LENGTHTYPE_PERCENTAGE: + primType = CSS_PERCENTAGE; + break; + case SVGLength.SVG_LENGTHTYPE_NUMBER: + primType = CSS_NUMBER; + break; + } + } + } + + class StringValue extends CSSPrimitiveValueImpl { + + public void setCssText(String str) + { + super.setCssText(str); + primType = CSS_STRING; + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleRuleImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleRuleImpl.java new file mode 100644 index 000000000..c035f6084 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleRuleImpl.java @@ -0,0 +1,323 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.css; + +//import org.apache.fop.dom.svg.*; +import org.w3c.dom.svg.*; + +import org.w3c.dom.css.*; +import org.w3c.dom.*; +import org.w3c.dom.stylesheets.*; + +import java.util.*; + +/** + * + * + */ +public class CSSStyleRuleImpl implements CSSStyleRule { + String seltext; + String cssText; + CSSStyleDeclaration style; + CSSStyleSheet styleSheet; + Vector selectors = new Vector(); + + public CSSStyleRuleImpl(CSSStyleSheet styleSheet) + { + this.styleSheet = styleSheet; + } + + public String getSelectorText() + { + return seltext; + } + + /** + * Selectors are comma separated values (except for attributes) + * of all the selectors for the style. + */ + public void setSelectorText(String selectorText) + { + seltext = selectorText; + parseSelector(); + } + + protected void parseSelector() + { + // need to handle "," in attribute selectors + StringTokenizer st = new StringTokenizer(seltext, ","); + while(st.hasMoreTokens()) { + String sel = st.nextToken().trim(); + StringTokenizer subt = new StringTokenizer(sel, " \t\n\r"); + Selector last = null; + Selector current = null; + int compoundstate = 0; + while(subt.hasMoreTokens()) { + String str = subt.nextToken().trim(); + current = new Selector(); + boolean compounding = false; + if(str.equals("*")) { + // all + current.type = Selector.ALL; + current.value = "*"; + } else if(str.equals(">")) { + // child of + compoundstate = 1; + compounding = true; + } else if(str.equals("+")) { + // precedent of + compoundstate = 2; + compounding = true; + } else if(str.startsWith("#")) { + // id + current.type = Selector.ID; + current.value = str.substring(1); + } else if(str.startsWith(".")) { + // class + current.type = Selector.CLASS; + current.value = str.substring(1); + } else if(str.startsWith("[")) { + // attribute + current.type = Selector.ATTRIBUTE; + current.value = str.substring(1, str.length() - 1); + } else { + // tag + current.type = Selector.TAG; + if(str.indexOf(":") != -1) { + current.type = Selector.TAG_FIRST_CHILD; + int pos = str.indexOf(":"); + current.value = str.substring(0, pos); + current.subValue = str.substring(pos + 1); + } else if(str.indexOf("#") != -1) { + current.type = Selector.TAG_ID; + int pos = str.indexOf("#"); + current.value = str.substring(0, pos); + current.subValue = str.substring(pos + 1); + } else if(str.indexOf(".") != -1) { + current.type = Selector.TAG_CLASS; + int pos = str.indexOf("."); + current.value = str.substring(0, pos); + current.subValue = str.substring(pos + 1); + } else { + current.value = str; + } + } + if(!compounding) { + switch(compoundstate) { + case 0: + if(last != null) { + Selector compound = new Selector(); + compound.type = Selector.DESCENDANT; + compound.last = last; + compound.current = current; + current = compound; + compoundstate = 0; + } + break; + case 1: + { + Selector compound = new Selector(); + compound.type = Selector.CHILD; + compound.last = last; + compound.current = current; + current = compound; + compoundstate = 0; + } + break; + case 2: + { + Selector compound = new Selector(); + compound.type = Selector.PRECEDENT; + compound.last = last; + compound.current = current; + current = compound; + compoundstate = 0; + } + break; + } + last = current; + } + } + if(current != null) + selectors.add(current); + } + } + + public CSSStyleDeclaration getStyle() + { + return style; + } + + public String getCssText() + { + return cssText; + } + + public void setCssText(String cssText) + { + this.cssText = cssText; + style = new CSSStyleDeclarationImpl(); + style.setCssText(cssText); + } + + public short getType() + { + return STYLE_RULE; + } + + public CSSStyleSheet getParentStyleSheet() + { + return styleSheet; + } + + public CSSRule getParentRule() + { + return null; + } + + /** + * This should probably be elsewhere, in dom.svg + */ + public boolean matches(SVGElement el) + { + for(Enumeration e = selectors.elements(); e.hasMoreElements(); ) { + Selector sel = (Selector)e.nextElement(); + if(matches(el, sel)) + return true; + } + return false; + } + + protected boolean matches(SVGElement el, Selector sel) + { + short type = sel.type; + if(el == null) + return false; + switch(type) { + case Selector.ALL: + return true; +// break; + case Selector.ID: + return el.getId().equals(sel.value); +// break; + case Selector.CLASS: + return ((SVGStylable)el).getClassName().getBaseVal().equals(sel.value); +// break; + case Selector.ATTRIBUTE: +//System.out.println(sel.value + ":" + el.getAttribute(sel.value)); +// return el.getAttribute(sel.value); + break; + case Selector.TAG: + return sel.value.equals(el.getTagName()); +// break; + case Selector.TAG_FIRST_CHILD: + if(el.getParentNode() != null) + return (el.getParentNode().getFirstChild() == el); + break; + case Selector.TAG_ID: + return sel.value.equals(el.getTagName()) + && sel.subValue.equals(el.getId()); +// break; + case Selector.TAG_CLASS: + return sel.value.equals(el.getTagName()) + && sel.subValue.equals(((SVGStylable)el).getClassName().getBaseVal()); +// break; + case Selector.DESCENDANT: + if(el.getParentNode() instanceof SVGElement) { + if(!matches(el, sel.current)) + return false; + SVGElement parent = (SVGElement)el.getParentNode(); + while(parent != null) { + if(matches(parent, sel.last)) + return true; + if(parent.getParentNode() instanceof SVGElement) { + parent = (SVGElement)parent.getParentNode(); + } else { + return false; + } + } + } + return false; +// break; + case Selector.CHILD: + return matches(el, sel.current) + && matches((SVGElement)el.getParentNode(), sel.last); +// break; + case Selector.PRECEDENT: + return matches(el, sel.current) + && matches((SVGElement)el.getPreviousSibling(), sel.last); +// break; + } + return false; + } +} + +class Selector { + final static short NONE = -1; + final static short ALL = 0; + final static short ID = 1; + final static short CLASS = 2; + final static short ATTRIBUTE = 3; + final static short TAG = 4; + final static short DESCENDANT = 5; + final static short CHILD = 6; + final static short PRECEDENT = 7; + final static short TAG_FIRST_CHILD = 8; + final static short TAG_ID = 9; + final static short TAG_CLASS = 10; + short type = NONE; + String value = ""; + String subValue = ""; + // pre- simple selector in compound selectors + Selector last = null; + Selector current = null; +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleSheetImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleSheetImpl.java new file mode 100644 index 000000000..87c347e5e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSStyleSheetImpl.java @@ -0,0 +1,194 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.css; + +import org.w3c.dom.css.*; +import org.w3c.dom.*; +import org.w3c.dom.stylesheets.*; + +import java.util.*; + +/** + * + * + */ +public class CSSStyleSheetImpl implements CSSStyleSheet { + Vector rules = new Vector(); + + public CSSStyleSheetImpl(String sheet) + { + parseSheet(sheet); + } + + protected void parseSheet(String str) + { + // get each rule and insert it + // rule ends with } + // need to ignore comments + String newStr = str; + int pos1; + int pos2; + pos1 = newStr.indexOf("/*"); + pos2 = newStr.indexOf("*/"); + while((pos1 != -1) && (pos2 != -1)) { + newStr = newStr.substring(0, pos1) + newStr.substring(pos2 + 2, newStr.length()); + pos1 = newStr.indexOf("/*"); + pos2 = newStr.indexOf("*/"); + } + StringTokenizer st = new StringTokenizer(newStr, "}"); + while(st.hasMoreTokens()) { + String rule = st.nextToken() + "}"; + insertRule(rule, rules.size()); + } + } + + public CSSRule getOwnerRule() + { + // since this is for a style element + return null; + } + + public CSSRuleList getCssRules() + { + return new CSSRuleListImpl(rules); + } + + public int insertRule(String rule, + int index) + throws DOMException + { + CSSRule r = parseRule(rule); + if(r != null) + rules.addElement(r); + return 0; + } + + public void deleteRule(int index) + throws DOMException + { + rules.remove(index); + } + + public String getType() + { + return "text/css"; + } + + public boolean getDisabled() + { + return false; + } + + public void setDisabled(boolean disabled) + { + } + + public Node getOwnerNode() + { + // return the style element + return null; + } + + public StyleSheet getParentStyleSheet() + { + return null; + } + + public String getHref() + { + return null; + } + + public String getTitle() + { + return null; + } + + public MediaList getMedia() + { + return null; + } + + protected CSSRule parseRule(String str) + { + // a rule is "selectors {style}" + // a list of selectors followed by the style statement in brackets + int pos1 = str.indexOf("{"); + int pos2 = str.indexOf("}"); + if(pos1 == -1 || pos2 == -1) + return null; + String sel = str.substring(0, pos1); + String style = str.substring(pos1 + 1, pos2); + CSSStyleRule rule = new CSSStyleRuleImpl(this); + rule.setSelectorText(sel); + rule.setCssText(style); + return rule; + } +} + +class CSSRuleListImpl implements CSSRuleList { + Vector rules; + CSSRuleListImpl(Vector v) + { + rules = v; + } + + public int getLength() + { + return rules.size(); + } + + public CSSRule item(int pos) + { + return (CSSRule)rules.elementAt(pos); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSValueImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSValueImpl.java new file mode 100644 index 000000000..9b7b2986c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/css/CSSValueImpl.java @@ -0,0 +1,82 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.css; + +import org.w3c.dom.css.*; + +/** + * + * + */ +public class CSSValueImpl implements CSSValue { + String text; + short type; + + public CSSValueImpl() + { + } + + public void setCssText(String str) + { + text = str; + } + + public String getCssText() + { + return text; + } + + public short getValueType() + { + return type; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/css/RGBColorImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/css/RGBColorImpl.java new file mode 100644 index 000000000..b937df46e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/css/RGBColorImpl.java @@ -0,0 +1,89 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.css; + +import org.w3c.dom.css.*; + +/** + * + * + */ +public class RGBColorImpl implements RGBColor { + CSSPrimitiveValue red; + CSSPrimitiveValue green; + CSSPrimitiveValue blue; + + public RGBColorImpl(float r, float g, float b) + { + red = new CSSPrimitiveValueImpl(); + red.setFloatValue(CSSPrimitiveValue.CSS_NUMBER, r); + green = new CSSPrimitiveValueImpl(); + green.setFloatValue(CSSPrimitiveValue.CSS_NUMBER, g); + blue = new CSSPrimitiveValueImpl(); + blue.setFloatValue(CSSPrimitiveValue.CSS_NUMBER, b); + } + + public CSSPrimitiveValue getRed() + { + return red; + } + + public CSSPrimitiveValue getGreen() + { + return green; + } + + public CSSPrimitiveValue getBlue() + { + return blue; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/stylesheets/StyleSheetListImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/stylesheets/StyleSheetListImpl.java new file mode 100644 index 000000000..ebd0ccb46 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/stylesheets/StyleSheetListImpl.java @@ -0,0 +1,79 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.stylesheets; + +import org.w3c.dom.stylesheets.*; + +import java.util.*; + +/** + * + * + */ +public class StyleSheetListImpl implements StyleSheetList { + Vector sheets = new Vector(); + + public StyleSheetListImpl(Vector sheets) + { + this.sheets = sheets; + } + + public int getLength() + { + return sheets.size(); + } + + public StyleSheet item(int pos) + { + return (StyleSheet)sheets.elementAt(pos); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicElement.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicElement.java new file mode 100644 index 000000000..8be3028ed --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicElement.java @@ -0,0 +1,232 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.Enumeration; + +import org.apache.fop.datatypes.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; +import org.w3c.dom.events.*; + +/** + * base class for SVG graphic objects. + * + * Graphic objects include rectangles, lines and text + * + */ +public abstract class GraphicElement extends SVGElementImpl implements SVGTransformable, SVGLangSpace, SVGTests, EventTarget { + protected SVGList reqFeatures; + protected SVGList reqExtensions; + protected SVGList sysLanguage; + SVGAnimatedTransformList transform; + String xmlspace = "default"; + + public SVGElement getNearestViewportElement( ) + { + return null; + } + + public SVGElement getFarthestViewportElement( ) + { + return null; + } + + public SVGAnimatedTransformList getTransform() + { + if(transform != null) { + return transform; + } + SVGTransformList stl = new SVGTransformListImpl(); + SVGTransform transform = new SVGTransformImpl(); + stl.appendItem(transform); + SVGAnimatedTransformList atl = new SVGAnimatedTransformListImpl(); + atl.setBaseVal(stl); + return atl; + } + + public void setTransform(SVGAnimatedTransformList transform) + { + this.transform = transform; + } + + public SVGRect getBBox() + { + return null; + } + + public SVGMatrix getCTM() + { + return null; + } + + public SVGMatrix getScreenCTM() + { + return null; + } + + public SVGMatrix getTransformToElement(SVGElement element) + throws SVGException + { + return null; + } + + public String getXMLlang() + { + return null; + } + + public void setXMLlang(String xmllang) + { + } + + public String getXMLspace() + { + return xmlspace; + } + + public void setXMLspace(String xmlspace) + { + this.xmlspace = xmlspace; + } + + public SVGList getRequiredFeatures( ) + { + return reqFeatures; + } + + public void setRequiredFeatures( SVGList requiredFeatures ) + throws DOMException + { + reqFeatures = requiredFeatures; + } + + public SVGList getRequiredExtensions( ) + { + return reqExtensions; + } + + public void setRequiredExtensions( SVGList requiredExtensions ) + throws DOMException + { + reqExtensions = requiredExtensions; + } + + public boolean hasExtension ( String extension ) + { + return false; + } + + public SVGList getSystemLanguage() + { + return sysLanguage; + } + + public void setSystemLanguage(SVGList systemLanguage) + { + sysLanguage = systemLanguage; + } + + public void addEventListener(String type, + EventListener listener, + boolean useCapture) + { + } + + public void removeEventListener(String type, + EventListener listener, + boolean useCapture) + { + } + + public boolean dispatchEvent(Event evt) +// throws EventException + { + return false; + } + + /** + * Convenience method for implementations of SVGTransformable + * that have children that represents the bounding box + */ + protected SVGRect getChildrenBBox() + { + float minX = 10000000; // a big number + float maxX = -10000000; // a low number + float minY = 10000000; // a big number + float maxY = -10000000; // a low number + NodeList nl = getChildNodes(); + // can width and height be negative?? + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGTransformable) { + SVGRect r = ((SVGTransformable)n).getBBox(); + if(r != null) { + if(minX > r.getX()) + minX = r.getX(); + if(minY > r.getY()) + minY = r.getY(); + if(maxX < r.getX() + r.getWidth()) + maxX = r.getX() + r.getWidth(); + if(maxY > r.getY() + r.getHeight()) + maxY = r.getY() + r.getHeight(); + } + } + } + SVGRect rect = new SVGRectImpl(); + rect.setX(minX); + rect.setY(minY); + rect.setWidth(maxX - minX); + rect.setHeight(maxY - minY); + return rect; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicImpl.java new file mode 100644 index 000000000..72dfc5c4a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/GraphicImpl.java @@ -0,0 +1,76 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.datatypes.*; + +import java.util.*; + +import org.w3c.dom.svg.SVGElement; + +/** + * base class for SVG graphic objects. + * + * Graphic objects include rectangles, lines and text + * + */ +// use this so that the SVGArea can also hold style, defs and transform etc. +public interface GraphicImpl { + public Hashtable oldgetStyle(); + public void setParent(SVGElement g); + public SVGElement getGraphicParent(); + public Vector oldgetTransform(); // ?? + public Hashtable getDefs(); + public SVGElement locateDef(String str); + public void setStyle(Hashtable st); + public void addDefs(Hashtable st); + public void setTransform(Vector tr); // ?? +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAElementImpl.java new file mode 100644 index 000000000..66206068e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAElementImpl.java @@ -0,0 +1,81 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * class representing a line in an SVG Area + * + */ +public class SVGAElementImpl extends SVGURIReferenceImpl implements SVGAElement { + SVGAnimatedString target; + + public SVGAElementImpl() + { + } + + public void setTarget(SVGAnimatedString str) + { + target = str; + } + + public SVGAnimatedString getTarget() + { + return target; + } + + public SVGRect getBBox() + { + return getChildrenBBox(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAltGlyphElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAltGlyphElementImpl.java new file mode 100644 index 000000000..f1bec3848 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAltGlyphElementImpl.java @@ -0,0 +1,62 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * class representing a line in an SVG Area + * + */ +public class SVGAltGlyphElementImpl extends SVGElementImpl { + public SVGAltGlyphElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAngleImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAngleImpl.java new file mode 100644 index 000000000..f75ba2c34 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAngleImpl.java @@ -0,0 +1,188 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; + +import java.util.*; +import java.text.*; + +import org.w3c.dom.svg.*; + +/** + * SVG Angle. + * + */ +public class SVGAngleImpl implements SVGAngle { + float value = 0; + short unitType = SVG_ANGLETYPE_UNKNOWN; + + public SVGAngleImpl() + { + } + + public short getUnitType( ) + { + return unitType; + } + + public float getValue( ) + { + return value; + } + + public void setValue( float value ) + { + this.value = value; + } + + public float getValueInSpecifiedUnits( ) + { + switch(unitType) { + case SVG_ANGLETYPE_UNKNOWN: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_UNSPECIFIED: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_DEG: + break; + case SVG_ANGLETYPE_RAD: + break; + case SVG_ANGLETYPE_GRAD: + break; + } + return 0; + } + + public void setValueInSpecifiedUnits( float valueInSpecifiedUnits ) + { + switch(unitType) { + case SVG_ANGLETYPE_UNKNOWN: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_UNSPECIFIED: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_DEG: + break; + case SVG_ANGLETYPE_RAD: + break; + case SVG_ANGLETYPE_GRAD: + break; + } + } + + public String getValueAsString( ) + { + NumberFormat nf = NumberFormat.getInstance(); + return nf.format(value); + } + + public void setValueAsString( String valueAsString ) + { + NumberFormat nf = NumberFormat.getInstance(); + try { + value = nf.parse(valueAsString).floatValue(); + value = (float)(value * Math.PI / 90f); + } catch(ParseException pe) { + value = 0; + } + } + + public float getAnimatedValue( ) + { + return 0; + } + + public void newValueSpecifiedUnits ( short unitType, float valueInSpecifiedUnits ) + throws SVGException + { + switch(unitType) { + case SVG_ANGLETYPE_UNKNOWN: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_UNSPECIFIED: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_DEG: + value = (float)(valueInSpecifiedUnits * Math.PI / 90.0); + break; + case SVG_ANGLETYPE_RAD: + value = valueInSpecifiedUnits; + break; + case SVG_ANGLETYPE_GRAD: + value = (float)(valueInSpecifiedUnits * Math.PI / 90.0); + break; + } + this.unitType = unitType; + } + + public void convertToSpecifiedUnits ( short unitType ) + throws SVGException + { + switch(unitType) { + case SVG_ANGLETYPE_UNKNOWN: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_UNSPECIFIED: + throw new SVGExceptionImpl(SVGException.SVG_WRONG_TYPE_ERR, "unknown unit type"); +// break; + case SVG_ANGLETYPE_DEG: + break; + case SVG_ANGLETYPE_RAD: + break; + case SVG_ANGLETYPE_GRAD: + break; + } + this.unitType = unitType; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateColorElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateColorElementImpl.java new file mode 100644 index 000000000..e39f1bf5b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateColorElementImpl.java @@ -0,0 +1,63 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + * + */ +public class SVGAnimateColorElementImpl extends SVGElementImpl { + + public SVGAnimateColorElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateElementImpl.java new file mode 100644 index 000000000..6c45033d2 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateElementImpl.java @@ -0,0 +1,63 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + * + */ +public class SVGAnimateElementImpl extends SVGElementImpl { + + public SVGAnimateElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateMotionElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateMotionElementImpl.java new file mode 100644 index 000000000..a6c98546e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateMotionElementImpl.java @@ -0,0 +1,62 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGAnimateMotionElementImpl extends SVGElementImpl { + + public SVGAnimateMotionElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateTransformElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateTransformElementImpl.java new file mode 100644 index 000000000..99512eedf --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimateTransformElementImpl.java @@ -0,0 +1,62 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGAnimateTransformElementImpl extends SVGElementImpl { + + public SVGAnimateTransformElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedEnumerationImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedEnumerationImpl.java new file mode 100644 index 000000000..585e390aa --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedEnumerationImpl.java @@ -0,0 +1,80 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +import org.w3c.dom.DOMException; + +public class SVGAnimatedEnumerationImpl implements SVGAnimatedEnumeration { + short baseval = 0; + + public SVGAnimatedEnumerationImpl(short base) + { + baseval = base; + } + + public short getBaseVal( ) + { + return baseval; + } + + public void setBaseVal(short baseVal) + { + this.baseval = baseVal; + } + + public short getAnimVal( ) + { + return baseval; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthImpl.java new file mode 100644 index 000000000..3e21499fb --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthImpl.java @@ -0,0 +1,78 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +public class SVGAnimatedLengthImpl implements SVGAnimatedLength { + SVGLength len = null; + + public SVGAnimatedLengthImpl(SVGLength l) + { + len = l; + } + + public SVGLength getBaseVal( ) + { + return len; + } + + public void setBaseVal( SVGLength baseVal ) + { + len = baseVal; + } + + public SVGLength getAnimVal( ) + { + return len; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthListImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthListImpl.java new file mode 100644 index 000000000..0c1feb8fa --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedLengthListImpl.java @@ -0,0 +1,79 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * a length quantity in XSL + */ +public class SVGAnimatedLengthListImpl extends SVGListImpl implements SVGAnimatedLengthList { + SVGLengthList baseVal; + + public SVGAnimatedLengthListImpl() + { + } + + public SVGLengthList getBaseVal( ) + { + return baseVal; + } + + public void setBaseVal(SVGLengthList baseVal) + { + this.baseVal = baseVal; + } + + public SVGLengthList getAnimVal( ) + { + return baseVal; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedNumberImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedNumberImpl.java new file mode 100644 index 000000000..bc3a0b626 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedNumberImpl.java @@ -0,0 +1,84 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGAnimatedNumberImpl implements SVGAnimatedNumber { + float base = 0; + + public SVGAnimatedNumberImpl(float b) + { + base = b; + } + + public float getBaseVal() + { + return base; + } + + public void setBaseVal(float baseVal) + { + base = baseVal; + } + + public float getAnimVal() + { + return base; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedRectImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedRectImpl.java new file mode 100644 index 000000000..5ddc97a62 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedRectImpl.java @@ -0,0 +1,78 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +public class SVGAnimatedRectImpl implements SVGAnimatedRect { + SVGRect rect = null; + + public SVGAnimatedRectImpl(SVGRect r) + { + rect = r; + } + + public SVGRect getBaseVal( ) + { + return rect; + } + + public void setBaseVal( SVGRect baseVal ) + { + rect = baseVal; + } + + public SVGRect getAnimVal( ) + { + return rect; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedStringImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedStringImpl.java new file mode 100644 index 000000000..b65ad9960 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedStringImpl.java @@ -0,0 +1,78 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +public class SVGAnimatedStringImpl implements SVGAnimatedString { + String str = null; + + public SVGAnimatedStringImpl(String l) + { + str = l; + } + + public String getBaseVal( ) + { + return str; + } + + public void setBaseVal( String baseVal ) + { + str = baseVal; + } + + public String getAnimVal( ) + { + return str; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedTransformListImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedTransformListImpl.java new file mode 100644 index 000000000..5144008c5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGAnimatedTransformListImpl.java @@ -0,0 +1,82 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; + +/** + * Transform List + */ +public class SVGAnimatedTransformListImpl implements SVGAnimatedTransformList { + SVGTransformList base; + + public SVGAnimatedTransformListImpl() + { + } + + public SVGTransformList getBaseVal( ) + { + return base; + } + + public void setBaseVal(SVGTransformList baseVal ) + { + base = baseVal; + } + + public SVGTransformList getAnimVal() + { + return null; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGArea.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGArea.java new file mode 100644 index 000000000..58c3fee68 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGArea.java @@ -0,0 +1,108 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +// FOP +import org.apache.fop.render.Renderer; +import org.apache.fop.layout.FontState; +import org.apache.fop.layout.Area; +import org.apache.fop.dom.svg.*; + +import java.util.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; + + +/** + * class representing an SVG area in which the SVG graphics sit + */ +public class SVGArea extends Area implements GetSVGDocument { + SVGDocument doc; + + /** + * construct an SVG area + * + * @param fontState the font state + * @param width the width of the area + * @param height the height of the area + */ + public SVGArea(FontState fontState, float width, float height) { + super(fontState, (int)width * 1000, (int)height * 1000); + currentHeight = (int)height * 1000; + contentRectangleWidth = (int)width * 1000; + } + + public void setSVGDocument(SVGDocument doc) + { + this.doc = doc; + } + + public SVGDocument getSVGDocument() throws DOMException + { + return doc; + } + + public int getWidth() + { +// return getSVGDocument().getRootElement().getWidth().getBaseVal().getValue(); + return contentRectangleWidth; + } + + /** + * render the SVG. + * + * @param renderer the Renderer to use + */ + public void render(Renderer renderer) { + renderer.renderSVGArea(this); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCircleElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCircleElementImpl.java new file mode 100644 index 000000000..8a3ee7e71 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCircleElementImpl.java @@ -0,0 +1,114 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGCircleElementImpl extends GraphicElement implements SVGCircleElement { + private SVGAnimatedLength cx; + private SVGAnimatedLength cy; + private SVGAnimatedLength r; + + /** + */ + public SVGCircleElementImpl() + { + } + + public SVGRect getBBox() + { + SVGRect rect = new SVGRectImpl(); + rect.setX(cx.getBaseVal().getValue() - r.getBaseVal().getValue()); + rect.setY(cy.getBaseVal().getValue() - r.getBaseVal().getValue()); + rect.setWidth(2 * r.getBaseVal().getValue()); + rect.setHeight(2 * r.getBaseVal().getValue()); + return rect; + } + + public SVGAnimatedLength getCx( ) + { + return cx; + } + + public void setCx( SVGAnimatedLength cx ) + { + this.cx = cx; + } + + public SVGAnimatedLength getCy( ) + { + return cy; + } + + public void setCy( SVGAnimatedLength cy ) + { + this.cy = cy; + } + + public SVGAnimatedLength getR( ) + { + return r; + } + + public void setR( SVGAnimatedLength r ) + { + this.r = r; + } + + public String getTagName() + { + return "circle"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGClipPathElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGClipPathElementImpl.java new file mode 100644 index 000000000..77c333bad --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGClipPathElementImpl.java @@ -0,0 +1,83 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import java.util.Vector; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGClipPathElementImpl extends GraphicElement implements SVGClipPathElement { + public Vector elements = new Vector(); + SVGAnimatedEnumeration units; + + public void addElement(SVGElement g) + { + elements.addElement(g); + } + + public SVGClipPathElementImpl() + { + } + + public SVGAnimatedEnumeration getClipPathUnits( ) + { + return units; + } + + public void setClipPathUnits(SVGAnimatedEnumeration clipPathUnits) + { + units = clipPathUnits; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCursorElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCursorElementImpl.java new file mode 100644 index 000000000..b777e2fc3 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGCursorElementImpl.java @@ -0,0 +1,86 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGCursorElementImpl extends SVGURIReferenceImpl implements SVGCursorElement { + SVGAnimatedLength x; + SVGAnimatedLength y; + + public SVGCursorElementImpl() + { + } + + public SVGAnimatedLength getX( ) + { + return x; + } + + public void setX( SVGAnimatedLength x ) + { + this.x = x; + } + + public SVGAnimatedLength getY( ) + { + return y; + } + + public void setY( SVGAnimatedLength y ) + { + this.y = y; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDefsElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDefsElementImpl.java new file mode 100644 index 000000000..79766a989 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDefsElementImpl.java @@ -0,0 +1,64 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * class representing a line in an SVG Area + */ +public class SVGDefsElementImpl extends GraphicElement implements SVGDefsElement { + + public SVGDefsElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDescElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDescElementImpl.java new file mode 100644 index 000000000..7784b94fd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDescElementImpl.java @@ -0,0 +1,64 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * class representing a line in an SVG Area + */ +public class SVGDescElementImpl extends GraphicElement implements SVGDescElement { + + public SVGDescElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDocumentImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDocumentImpl.java new file mode 100644 index 000000000..70be48f48 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGDocumentImpl.java @@ -0,0 +1,211 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.apache.fop.dom.ElementImpl; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; +import org.w3c.dom.events.*; + +/** + * + */ +public class SVGDocumentImpl extends ElementImpl implements SVGDocument { + String title; + public static final String namespaceURI = "http://www.w3.org/2000/svg"; + + public SVGDocumentImpl() + { + ownerDoc = this; + } + + public String getTitle() + { + return title; + } + + public void setTitle(String title) + { + this.title = title; + } + + public String getNamespaceURI() + { + return namespaceURI; + } + + public String getReferrer() + { + return null; + } + + public String getDomain() + { + return null; + } + + public String getURL() + { + return ""; + } + + public SVGSVGElement getRootElement() + { + return (SVGSVGElement)childs.elementAt(0); + } + + public Element getElementById(String elementId) + { + SVGSVGElement svg = getRootElement(); + return findChild(svg, elementId); + } + + protected Element findChild(Node ele, String id) + { + NodeList nl = ele.getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGElement) { + if(id.equals(((SVGElement)n).getId())) { + return (Element)n; + } + } + if(n != null) { + Element el = findChild(n, id); + if(el != null) { + return el; + } + } + } + return null; + } + + public Event createEvent(String eventType) + throws DOMException + { + return null; + } + + public DOMImplementation getImplementation() + { + return null; + } + + public EntityReference createEntityReference(String str) + { + return null; + } + + public DocumentFragment createDocumentFragment() + { + return null; + } + + public Text createTextNode(String str) + { + return null; + } + + public Element createElement(String str) + { + return null; + } + + public Element createElementNS(String namespaceURI, + String qualifiedName){ + return null; + } + + public ProcessingInstruction createProcessingInstruction(String s1, String s2) + { + return null; + } + + public DocumentType getDoctype() + { + return null; + } + + public CDATASection createCDATASection(String str) + { + return null; + } + + public Comment createComment(String str) + { + return null; + } + + public Attr createAttribute(String str) + { + return null; + } + + public Attr createAttributeNS(String namespaceURI, + String qualifiedName) + throws DOMException + { + return null; + } + + public Element getDocumentElement() + { + return null; + } + + public Node importNode(Node importedNode, boolean deep) + { + return null; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGElementImpl.java new file mode 100644 index 000000000..6fe052d79 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGElementImpl.java @@ -0,0 +1,199 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.dom.stylesheets.*; +import org.apache.fop.dom.css.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.dom.ElementImpl; + +import org.w3c.dom.css.*; +import org.w3c.dom.svg.*; +import org.w3c.dom.*; +import org.w3c.dom.stylesheets.*; + +import java.util.*; + +public abstract class SVGElementImpl extends ElementImpl implements SVGElement { + String idString = ""; + CSSStyleDeclaration styleDec; + SVGSVGElement ownerSvg; + SVGAnimatedString className = new SVGAnimatedStringImpl(""); + + public String getId() + { + return idString; + } + + public String getNamespaceURI() + { + return SVGDocumentImpl.namespaceURI; + } + + public void setId(String id) + { + idString = id; + } + + public SVGSVGElement getOwnerSVGElement( ) + { + return ownerSvg; + } + + public SVGElement getViewportElement( ) + { + return null; + } + + public SVGAnimatedString getClassName( ) + { + return className; + } + + public void setClassName( SVGAnimatedString className ) + { + this.className = className; + } + + public CSSValue getPresentationAttribute ( String name ) + { + CSSStyleDeclaration style; + CSSValue val = null; + + style = getStyle(); + if(style != null) { + val = style.getPropertyCSSValue(name); + } + + if(val == null) { + // this checks for the style selector matching + // everytime a property is requested, this is bad, slow + + // get "style" element style for this + SVGSVGElement svg = getOwnerSVGElement(); + // maybe + // val = svg.getComputedStyle(this, name); + StyleSheetList list = svg.getStyleSheets(); + for(int count = 0; count < list.getLength(); count++) { + CSSRuleList rlist = ((CSSStyleSheet)list.item(count)).getCssRules(); + for(int c = 0; c < rlist.getLength(); c++) { + CSSRule rule = rlist.item(c); + if(rule.getType() == CSSRule.STYLE_RULE) { + if(((CSSStyleRuleImpl)rule).matches(this)) { + style = ((CSSStyleRule)rule).getStyle(); + val = style.getPropertyCSSValue(name); +// break; + } + } + } +// if(val != null) { +// break; +// } + } + } + if(val == null) { + // get element parents style + Node par = getParentNode(); + if(par instanceof SVGStylable) { + val = ((SVGStylable)par).getPresentationAttribute(name); + } + } + return val; + } + + public CSSValue getAnimatedPresentationAttribute ( String name ) + { + return getPresentationAttribute(name); + } + + public CSSStyleDeclaration getStyle( ) + { + return styleDec; + } + + public void setStyle(CSSStyleDeclaration dec) + { + styleDec = dec; + } + + public SVGAnimatedBoolean getExternalResourcesRequired( ) + { + return null; + } + + public void setExternalResourcesRequired( SVGAnimatedBoolean externalResourcesRequired ) + { + } + + public Node appendChild(Node newChild) + throws DOMException + { + Node nChild = super.appendChild(newChild); + if(newChild instanceof SVGElementImpl) { + SVGElementImpl ele = (SVGElementImpl)newChild; + if(ownerSvg != null) + ele.setOwnerSVG(ownerSvg); + } + return nChild; + } + + public void setOwnerSVG(SVGSVGElement owner) + { + ownerSvg = owner; + NodeList nl = getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGElementImpl) { + ((SVGElementImpl)n).setOwnerSVG(owner); + } + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGEllipseElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGEllipseElementImpl.java new file mode 100644 index 000000000..b92234fe8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGEllipseElementImpl.java @@ -0,0 +1,115 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; +import org.w3c.dom.events.*; + +/** + * + */ +public class SVGEllipseElementImpl extends GraphicElement implements SVGEllipseElement { + private SVGAnimatedLength cx; + private SVGAnimatedLength cy; + private SVGAnimatedLength rx; + private SVGAnimatedLength ry; + + /** + */ + public SVGEllipseElementImpl() + { + } + + public SVGRect getBBox() + { + SVGRect rect = new SVGRectImpl(); + rect.setX(cx.getBaseVal().getValue() - rx.getBaseVal().getValue()); + rect.setY(cy.getBaseVal().getValue() - ry.getBaseVal().getValue()); + rect.setWidth(2 * rx.getBaseVal().getValue()); + rect.setHeight(2 * ry.getBaseVal().getValue()); + return rect; + } + + public SVGAnimatedLength getCx( ) + { + return cx; + } + public void setCx( SVGAnimatedLength cx ) + { + this.cx = cx; + } + public SVGAnimatedLength getCy( ) + { + return cy; + } + public void setCy( SVGAnimatedLength cy ) + { + this.cy = cy; + } + public SVGAnimatedLength getRx( ) + { + return rx; + } + public void setRx( SVGAnimatedLength rx ) + { + this.rx = rx; + } + public SVGAnimatedLength getRy( ) + { + return ry; + } + public void setRy( SVGAnimatedLength ry ) + { + this.ry = ry; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGExceptionImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGExceptionImpl.java new file mode 100644 index 000000000..d1104ebea --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGExceptionImpl.java @@ -0,0 +1,68 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; + +import java.util.*; +import java.text.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGExceptionImpl extends SVGException { + public SVGExceptionImpl(short code, String message) + { + super(code, message); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFilterElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFilterElementImpl.java new file mode 100644 index 000000000..497f6b879 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFilterElementImpl.java @@ -0,0 +1,140 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGFilterElementImpl extends SVGURIReferenceImpl implements SVGFilterElement { + + public SVGFilterElementImpl() + { + } + + public SVGAnimatedEnumeration getFilterUnits( ) + { + return null; + } + + public void setFilterUnits( SVGAnimatedEnumeration filterUnits ) + { + } + + public SVGAnimatedEnumeration getPrimitiveUnits( ) + { + return null; + } + + public void setPrimitiveUnits( SVGAnimatedEnumeration filterUnits ) + { + } + + public SVGAnimatedLength getX( ) + { + return null; + } + + public void setX( SVGAnimatedLength x ) + { + } + + public SVGAnimatedLength getY( ) + { + return null; + } + + public void setY( SVGAnimatedLength y ) + { + } + + public SVGAnimatedLength getWidth( ) + { + return null; + } + + public void setWidth( SVGAnimatedLength width ) + { + } + + public SVGAnimatedLength getHeight( ) + { + return null; + } + + public void setHeight( SVGAnimatedLength height ) + { + } + + public SVGAnimatedInteger getFilterResX( ) + { + return null; + } + + public SVGAnimatedInteger getFilterResY( ) + { + return null; + } + + public void setFilterResX( SVGAnimatedInteger filterResX ) + { + } + + public void setFilterResY( SVGAnimatedInteger filterResY ) + { + } + + public void setFilterRes ( int filterResX, int filterResY ) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFontElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFontElementImpl.java new file mode 100644 index 000000000..dd45ce697 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGFontElementImpl.java @@ -0,0 +1,64 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGFontElementImpl extends SVGElementImpl implements SVGFontElement { + + public SVGFontElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGElementImpl.java new file mode 100644 index 000000000..95330d4a7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGElementImpl.java @@ -0,0 +1,75 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.layout.*; + +import java.util.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; + +/** + * + */ +public class SVGGElementImpl extends GraphicElement implements SVGGElement { + + /** + */ + public SVGGElementImpl() + { + } + + public SVGRect getBBox() + { + return getChildrenBBox(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGlyphElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGlyphElementImpl.java new file mode 100644 index 000000000..98938085a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGlyphElementImpl.java @@ -0,0 +1,62 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGGlyphElementImpl extends SVGElementImpl { + + public SVGGlyphElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGradientElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGradientElementImpl.java new file mode 100644 index 000000000..4541796ea --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGGradientElementImpl.java @@ -0,0 +1,111 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGGradientElementImpl extends SVGURIReferenceImpl implements SVGGradientElement { +/* +SVG_SPREADMETHOD_UNKNOWN; +SVG_SPREADMETHOD_PAD; +SVG_SPREADMETHOD_REFLECT; +SVG_SPREADMETHOD_REPEAT; +*/ + SVGAnimatedEnumeration spreadMethod = new SVGAnimatedEnumerationImpl(SVG_SPREADMETHOD_UNKNOWN); + SVGAnimatedEnumeration units = new SVGAnimatedEnumerationImpl(SVG_UNIT_TYPE_UNKNOWN); + + + public SVGGradientElementImpl() + { + } + + public SVGAnimatedEnumeration getGradientUnits( ) + { + return units; + } + + public void setGradientUnits(SVGAnimatedEnumeration gradientUnits) + { + units = gradientUnits; + } + + public SVGAnimatedTransformList getGradientTransform() + { + return null; + } + + public void setGradientTransform(SVGAnimatedTransformList gradientTransform) + { + } + + public SVGAnimatedEnumeration getSpreadMethod( ) + { + return spreadMethod; + } + + public void setSpreadMethod( SVGAnimatedEnumeration spreadMethod ) + { + this.spreadMethod = spreadMethod; + } + + public SVGAnimatedBoolean getExternalResourcesRequired( ) + { + return null; + } + + public void setExternalResourcesRequired( SVGAnimatedBoolean externalResourcesRequired ) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGHKernElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGHKernElementImpl.java new file mode 100644 index 000000000..28a563270 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGHKernElementImpl.java @@ -0,0 +1,62 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGHKernElementImpl extends SVGElementImpl { + + public SVGHKernElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGImageElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGImageElementImpl.java new file mode 100644 index 000000000..b59a463ac --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGImageElementImpl.java @@ -0,0 +1,72 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGImageElementImpl extends SVGElementImpl { + public String link; + public float x; + public float y; + public float width; + public float height; + + public SVGImageElementImpl(String l, float x, float y, float w, float h) + { + link = l; + this.x = x; + this.y = y; + width = w; + height = h; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthImpl.java new file mode 100644 index 000000000..3cbae2aaf --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthImpl.java @@ -0,0 +1,204 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; +import org.apache.fop.messaging.MessageHandler; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * a length quantity in SVG + */ +public class SVGLengthImpl implements SVGLength { + short unitType = SVG_LENGTHTYPE_UNKNOWN; + protected float millipoints = 0; + protected float fontsize = 12; //?? + + public short getUnitType( ) + { + return unitType; + } + + public float getValue( ) + { + return millipoints; + } + + public void setValue( float value ) + { + millipoints = value; + } + + public float getValueInSpecifiedUnits() + { + return 0; + } + + public void setValueInSpecifiedUnits(float valueInSpecifiedUnits) + { + } + + public String getValueAsString() + { + return null; + } + + public void setValueAsString( String valueAsString ) + { + convert(valueAsString); + } + + public float getAnimatedValue( ) + { + return 0; + } + + public void newValueSpecifiedUnits(short unitType, float valueInSpecifiedUnits) throws SVGException + { + } + + public void convertToSpecifiedUnits(short unitType) throws SVGException + { + } + + /** + * set the length given a particular String specifying length and units + */ + public SVGLengthImpl (String len) + { + convert(len); + } + + public SVGLengthImpl() + { + } + + /** + * set the length given a particular String specifying length and units, + * and the font-size (necessary for an em) + * + public SVGLengthImpl(String len/*, int fontsize*) + { +// this.fontsize = fontsize; + convert(len); + }*/ + + protected void convert(String len) + { + int l = len.length(); + + if (l == 0) { + System.err.println("WARNING: empty length"); + this.millipoints = 0; + } else { + float dvalue = getFloatValue(len, l); + this.millipoints = dvalue; + } + } + + protected float getFloatValue(String len, int l) + { + int assumed_resolution = 1; // points/pixel + + float dvalue; + try { + if(len.endsWith("in")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 72; + unitType = SVG_LENGTHTYPE_IN; + } else if(len.endsWith("cm")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 28.35f; + unitType = SVG_LENGTHTYPE_CM; + } else if(len.endsWith("mm")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 2.84f; + unitType = SVG_LENGTHTYPE_MM; + } else if(len.endsWith("pt")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); +// dvalue = dvalue; + unitType = SVG_LENGTHTYPE_PT; + } else if(len.endsWith("pc")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 12; + unitType = SVG_LENGTHTYPE_PC; + } else if(len.endsWith("em")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * fontsize; + unitType = SVG_LENGTHTYPE_EMS; + } else if(len.endsWith("px")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * assumed_resolution; + unitType = SVG_LENGTHTYPE_PX; + } else if(len.endsWith("%")) { + dvalue = Float.valueOf(len.substring(0,(l-1))).floatValue() / 100f; + unitType = SVG_LENGTHTYPE_PERCENTAGE; + } else { + dvalue = Float.valueOf(len).floatValue(); + unitType = SVG_LENGTHTYPE_NUMBER; + } + } catch (Exception e) { + dvalue = 0; + unitType = SVG_LENGTHTYPE_UNKNOWN; + MessageHandler.errorln("ERROR: unknown length units in " + len); + } + return dvalue; + } + + public String toString() + { + String s = millipoints + "mpt"; + return s; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthListImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthListImpl.java new file mode 100644 index 000000000..6b33c3218 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLengthListImpl.java @@ -0,0 +1,154 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; +import org.apache.fop.messaging.MessageHandler; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * a length quantity in XSL + */ +public class SVGLengthListImpl extends SVGListImpl implements SVGLengthList { + protected float fontsize = 12; + + public void setValueAsString( String valueAsString ) + { + convert(valueAsString); + } + + /** + * set the length given a particular String specifying length and units + */ + public SVGLengthListImpl (String len) { + convert(len); + } + + public SVGLengthListImpl () { + } + + /** + * set the length given a particular String specifying length and units, + * and the font-size (necessary for an em) + */ + public SVGLengthListImpl (String len, int fontsize) + { + this.fontsize = fontsize; + convert(len); + } + + protected void convert(String len) + { + int l = len.length(); + + if (l == 0) { +// MessageHandler.errorln("WARNING: empty length"); + } else { + // could be an array of points, as in for svg:text + int pos; + pos = len.trim().indexOf(" "); + if(pos != -1) { + StringTokenizer st = new StringTokenizer(len.trim()); + while(st.hasMoreTokens()) { + String val = st.nextToken(); + float dvalue = getFloatValue(val, val.length()); + float intValue = dvalue; + appendItem(new Float(intValue)); + } + } else { + float dvalue = getFloatValue(len, l); + appendItem(new Float(dvalue)); + } + } + } + + protected float getFloatValue(String len, int l) + { + int assumed_resolution = 1; // points/pixel + + float dvalue; + try { + if(len.endsWith("in")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 72; + } else if(len.endsWith("cm")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 28.35f; + } else if(len.endsWith("mm")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 2.84f; + } else if(len.endsWith("pt")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue; + } else if(len.endsWith("pc")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * 12; + } else if(len.endsWith("em")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * fontsize; + } else if(len.endsWith("px")) { + dvalue = Float.valueOf(len.substring(0,(l-2))).floatValue(); + dvalue = dvalue * assumed_resolution; + } else if(len.endsWith("%")) { + dvalue = Float.valueOf(len.substring(0,(l-1))).floatValue() / 100f; //?? + } else { + dvalue = Float.valueOf(len).floatValue(); + } + } catch (Exception e) { + dvalue = 0; + MessageHandler.errorln("ERROR: unknown length units in " + len); + } + return dvalue; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLineElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLineElementImpl.java new file mode 100644 index 000000000..34168c864 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLineElementImpl.java @@ -0,0 +1,135 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; +import org.w3c.dom.events.*; + +/** + * class representing a line in an SVG Area + */ +public class SVGLineElementImpl extends GraphicElement implements SVGLineElement { + /** x-coordinate of start */ + protected SVGAnimatedLength x1; + + /** y-coordinate of start */ + protected SVGAnimatedLength y1; + + /** x-coordinate of end */ + protected SVGAnimatedLength x2; + + /** y-coordinate of end */ + protected SVGAnimatedLength y2; + + /** + * construct a line graphic + * + * @param x1 x-coordinate of start + * @param y1 y-coordinate of start + * @param x2 x-coordinate of end + * @param y2 y-coordinate of end + */ + public SVGLineElementImpl() + { + } + + public SVGRect getBBox() + { + SVGRect rect = new SVGRectImpl(); + rect.setX(Math.min(x1.getBaseVal().getValue(), x2.getBaseVal().getValue())); + rect.setY(Math.min(y1.getBaseVal().getValue(), y2.getBaseVal().getValue())); + rect.setWidth(Math.abs(x1.getBaseVal().getValue() - x2.getBaseVal().getValue())); + rect.setHeight(Math.abs(y1.getBaseVal().getValue() - y2.getBaseVal().getValue())); + return rect; + } + + public SVGAnimatedLength getX1( ) + { + return x1; + } + + public void setX1( SVGAnimatedLength x1 ) + { + this.x1 = x1; + } + + public SVGAnimatedLength getY1( ) + { + return y1; + } + + public void setY1( SVGAnimatedLength y1 ) + { + this.y1 = y1; + } + + public SVGAnimatedLength getX2( ) + { + return x2; + } + + public void setX2( SVGAnimatedLength x2 ) + { + this.x2 = x2; + } + + public SVGAnimatedLength getY2( ) + { + return y2; + } + + public void setY2( SVGAnimatedLength y2 ) + { + this.y2 = y2; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLinearGradientElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLinearGradientElementImpl.java new file mode 100644 index 000000000..3c38b9afd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGLinearGradientElementImpl.java @@ -0,0 +1,110 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGLinearGradientElementImpl extends SVGGradientElementImpl + implements SVGLinearGradientElement { + + SVGAnimatedLength x1; + SVGAnimatedLength x2; + SVGAnimatedLength y1; + SVGAnimatedLength y2; + + public SVGLinearGradientElementImpl() + { + } + + public SVGAnimatedLength getX1() + { + return x1; + } + + public void setX1(SVGAnimatedLength x1) + { + this.x1 = x1; + } + + public SVGAnimatedLength getY1() + { + return y1; + } + + public void setY1(SVGAnimatedLength y1) + { + this.y1 = y1; + } + + public SVGAnimatedLength getX2() + { + return x2; + } + + public void setX2(SVGAnimatedLength x2) + { + this.x2 = x2; + } + + public SVGAnimatedLength getY2() + { + return y2; + } + + public void setY2(SVGAnimatedLength y2) + { + this.y2 = y2; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGListImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGListImpl.java new file mode 100644 index 000000000..2f519193c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGListImpl.java @@ -0,0 +1,123 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; + +/** + * + */ +public class SVGListImpl implements SVGList { + Vector list = new Vector(); + + public int getNumberOfItems( ) + { + return list.size(); + } + + public void clear() + { + list.removeAllElements(); + } + + public Object initialize ( Object newItem ) + throws SVGException + { + return null; + } + + public Object createItem() + { + return null; + } + + public Object getItem(int index) + throws DOMException + { + Object obj = list.elementAt(index); + return obj; + } + + public Object insertItemBefore(Object newItem, int index) + throws SVGException + { + return null; + } + + public Object replaceItem(Object newItem, int index) + throws DOMException, SVGException + { + return null; + } + + public Object removeItem(int index) + throws DOMException + { + Object obj = list.elementAt(index); + list.removeElementAt(index); + return obj; + } + + public Object appendItem(Object newItem) + throws SVGException + { + list.addElement(newItem); + return null; + } + + public String toString() + { + return list.toString(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMarkerElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMarkerElementImpl.java new file mode 100644 index 000000000..0d7b8fc49 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMarkerElementImpl.java @@ -0,0 +1,148 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGMarkerElementImpl extends GraphicElement implements SVGMarkerElement { + SVGAnimatedEnumeration units; + SVGAnimatedEnumeration otype; + + public SVGMarkerElementImpl() + { + } + + public SVGAnimatedEnumeration getMarkerUnits( ) + { + return units; + } + + public SVGAnimatedEnumeration getOrientType( ) + { + return otype; + } + + public SVGAnimatedAngle getOrientAngle( ) + { + return null; + } + + public SVGAnimatedLength getRefX( ) + { + return null; + } + + public void setRefX(SVGAnimatedLength refX) + { + } + + public SVGAnimatedLength getRefY( ) + { + return null; + } + + public void setRefY( SVGAnimatedLength refY ) + { + } + + public SVGAnimatedLength getMarkerWidth( ) + { + return null; + } + + public void setMarkerWidth( SVGAnimatedLength markerWidth ) + { + } + + public SVGAnimatedLength getMarkerHeight( ) + { + return null; + } + + public void setMarkerHeight( SVGAnimatedLength markerHeight ) + { + } + + public void setOrientToAuto ( ) + { + } + + public void setOrientToAngle ( SVGAngle angle ) + throws SVGException + { + } + + public SVGAnimatedRect getViewBox( ) + { + return null; + } + + public void setViewBox( SVGAnimatedRect viewBox ) + { + } + + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio( ) + { + return null; + } + + public void setPreserveAspectRatio( SVGAnimatedPreserveAspectRatio preserveAspectRatio ) + { + } + + public void setMarkerUnits( SVGAnimatedEnumeration markerUnits ) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMaskElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMaskElementImpl.java new file mode 100644 index 000000000..c9efa34b8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMaskElementImpl.java @@ -0,0 +1,97 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +import java.util.Vector; + +/** + * + */ +public class SVGMaskElementImpl extends GraphicElement implements SVGMaskElement { + public Vector elements = new Vector(); + + public void addElement(SVGElement g) + { + elements.addElement(g); + } + + public SVGMaskElementImpl() + { + } + + public SVGAnimatedEnumeration getMaskUnits( ) + { + return null; + } + + public SVGAnimatedLength getX( ) + { + return null; + } + + public SVGAnimatedLength getY( ) + { + return null; + } + + public SVGAnimatedLength getWidth( ) + { + return null; + } + + public SVGAnimatedLength getHeight( ) + { + return null; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMatrixImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMatrixImpl.java new file mode 100644 index 000000000..4656f22f2 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMatrixImpl.java @@ -0,0 +1,291 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGMatrixImpl implements SVGMatrix { + float a = 1.0f; + float b = 0.0f; + float c = 0.0f; + float d = 1.0f; + float e = 0.0f; + float f = 0.0f; + + public SVGMatrixImpl() + { + } + + public float getA( ) + { + return a; + } + + public void setA( float a ) + { + this.a = a; + } + + public float getB( ) + { + return b; + } + + public void setB( float b ) + { + this.b = b; + } + + public float getC( ) + { + return c; + } + + public void setC( float c ) + { + this.c = c; + } + + public float getD( ) + { + return d; + } + + public void setD( float d ) + { + this.d = d; + } + + public float getE( ) + { + return e; + } + + public void setE( float e ) + { + this.e = e; + } + + public float getF( ) + { + return f; + } + + public void setF( float f ) + { + this.f = f; + } + + public SVGMatrix multiply ( SVGMatrix secondMatrix ) + throws SVGException + { + SVGMatrix mat = new SVGMatrixImpl(); + mat.setA(a * secondMatrix.getA() + b * secondMatrix.getC()); + mat.setB(a * secondMatrix.getB() + b * secondMatrix.getD()); + mat.setC(c * secondMatrix.getA() + d * secondMatrix.getC()); + mat.setD(c * secondMatrix.getB() + d * secondMatrix.getD()); + // e,f? + mat.setE(e + secondMatrix.getE()); + mat.setF(f + secondMatrix.getF()); + return mat; + } + + public SVGMatrix inverse ( ) + throws SVGException + { + SVGMatrix mat = new SVGMatrixImpl(); + double det = Math.abs(a * d - b * c); + mat.setA((float)(d / det)); + mat.setB((float)(b / det)); + mat.setC((float)(-c / det)); + mat.setD((float)(a / det)); + // e,f? + mat.setE(-e); + mat.setF(-f); + return mat; + } + +/* switch(t.getType()) { + case SVGTransform.SVG_TRANSFORM_SCALE: + { + // to scale around the svg origin + // we need to translate before and after +// Float len = (Float)t.getValue(); +// float val = len.floatValue(); +// if(Math.abs(val) < 0.001) +// val = 0; +// currentStream.add("1 0 0 1 " + -posx / 1000f + " " + posy / 1000f + " cm\n"); +// currentStream.add(val + " 0 0 " + val + " 0 0 cm\n"); +// currentStream.add("1 0 0 1 " + posx / 1000f + " " + -posy / 1000f + " cm\n"); + } + break; + case SVGTransform.SVG_TRANSFORM_ROTATE: + { + // to rotate around the svg origin + // we need to translate before and after +// SVGLength len = (SVGLength)t.getValue(); +// float val = len.getValue(); +// float cosval = (float)Math.cos(val * Math.PI / 90f); +// if(Math.abs(cosval) < 0.001) +// cosval = 0; +// float sinval = (float)Math.sin(val * Math.PI / 90f); +// if(Math.abs(sinval) < 0.001) +// sinval = 0; +// currentStream.add("1 0 0 1 " + -posx / 1000f + " " + posy / 1000f + " cm\n"); +// currentStream.add(cosval +// + " " + sinval +// + " " + -sinval +// + " " + cosval +// + " 0 0 cm\n"); +// currentStream.add("1 0 0 1 " + posx / 1000f + " " + -posy / 1000f + " cm\n"); + } + break; + }*/ + + public SVGMatrix translate ( float x, float y ) + throws SVGException + { + SVGMatrix matrix = new SVGMatrixImpl(); + matrix.setA(a); + matrix.setB(b); + matrix.setC(c); + matrix.setD(d); + matrix.setE(e + x); + matrix.setF(f + y); + return matrix; + } + + public SVGMatrix scale(float scaleFactor) + throws SVGException + { + SVGMatrix matrix = new SVGMatrixImpl(); + matrix.setA(a * scaleFactor); + matrix.setB(b); + matrix.setC(c); + matrix.setD(d * scaleFactor); + matrix.setE(e); + matrix.setF(f); + return matrix; + } + + public SVGMatrix scaleNonUniform(float scaleFactorX, float scaleFactorY) + throws SVGException + { + SVGMatrix matrix = new SVGMatrixImpl(); + matrix.setA(a * scaleFactorX); + matrix.setB(b); + matrix.setC(c); + matrix.setD(d * scaleFactorY); + matrix.setE(e); + matrix.setF(f); + return matrix; + } + + public SVGMatrix rotate ( float angle ) + throws SVGException + { + angle = (float)(angle * Math.PI / 180f); + SVGMatrix matrix = new SVGMatrixImpl(); + matrix.setA((float)Math.cos(angle)); + matrix.setB((float)Math.sin(angle)); + matrix.setC((float)-Math.sin(angle)); + matrix.setD((float)Math.cos(angle)); + return multiply(matrix); + } + + public SVGMatrix rotateFromVector(float x, float y) throws SVGException + { + return null; + } + + public SVGMatrix flipX() + { + return null; + } + + public SVGMatrix flipY() + { + return null; + } + + public SVGMatrix skewX(float angle) throws SVGException + { + SVGMatrix matrix = new SVGMatrixImpl(); + matrix.setA(1); + matrix.setB(0); + matrix.setC((float)Math.sin(angle)); + matrix.setD(1); + return multiply(matrix); + } + + public SVGMatrix skewY(float angle) throws SVGException + { + SVGMatrix matrix = new SVGMatrixImpl(); + matrix.setA(1); + matrix.setB((float)Math.sin(angle)); + matrix.setC(0); + matrix.setD(1); + return multiply(matrix); + } + + public String toString() + { + return "[" + getA() + " " + getB() + " " + getC() + + " " + getD() + " " + getE() + " " + getF() + "]"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMissingGlyphElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMissingGlyphElementImpl.java new file mode 100644 index 000000000..976a5468b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGMissingGlyphElementImpl.java @@ -0,0 +1,61 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGMissingGlyphElementImpl extends SVGElementImpl { + + public SVGMissingGlyphElementImpl() { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathElementImpl.java new file mode 100644 index 000000000..cf5d29b39 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathElementImpl.java @@ -0,0 +1,279 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * TODO: implement properly + */ +public class SVGPathElementImpl extends GraphicElement implements SVGPathElement { + + public Vector pathElements; + + /** + * construct a line graphic + */ + public SVGPathElementImpl(Vector v) + { + this.pathElements = v; + } + + public SVGAnimatedNumber getPathLength() + { + return null; + } + + public SVGRect getBBox() + { + float minX = 10000000; // a big number + float maxX = -10000000; // a low number + float minY = 10000000; // a big number + float maxY = -10000000; // a low number + // the bounds of a path is always within the end points and + // the control points, so adjust the min and max to be these extremes + for(Enumeration e = pathElements.elements(); e.hasMoreElements(); ) { + SVGPathSegImpl pc = (SVGPathSegImpl)e.nextElement(); + float[] vals = pc.getValues(); + switch(pc.getPathSegType()) { + case SVGPathSeg.PATHSEG_MOVETO_ABS: + break; + case SVGPathSeg.PATHSEG_MOVETO_REL: + break; + case SVGPathSeg.PATHSEG_LINETO_ABS: + break; + case SVGPathSeg.PATHSEG_LINETO_REL: + break; + case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS: + break; + case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL: + break; + case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS: + break; + case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL: + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: + break; + case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: + break; + case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: + break; + case SVGPathSeg.PATHSEG_ARC_ABS: + break; + case SVGPathSeg.PATHSEG_ARC_REL: + break; + case SVGPathSeg.PATHSEG_CLOSEPATH: + break; + } + } + SVGRect rect = new SVGRectImpl(); + rect.setX(minX); + rect.setY(minY); + rect.setWidth(maxX - minX); + rect.setHeight(maxY - minY); + return rect; + } + + public void setPathLength( SVGAnimatedNumber length ) + { + } + + public SVGList getPathSegList() + { + return null; + } + + public SVGList getNormalizedPathSegList() + { + return null; + } + + public float getTotalLength() + { + return 0; + } + + public SVGPoint getPointAtLength(float distance) + throws SVGException + { + return null; + } + + public int getPathSegAtLength(float distance) + throws SVGException + { + return 0; + } + + public short getPathSegType( ) + { + return 0; + } + + public String getPathSegTypeAsLetter( ) + { + return null; + } + + public SVGPathSegClosePath createSVGPathSegClosePath ( ) + { + return null; + } + + public SVGPathSegMovetoAbs createSVGPathSegMovetoAbs ( float x, float y ) + { + return null; + } + + public SVGPathSegMovetoRel createSVGPathSegMovetoRel ( float x, float y ) + { + return null; + } + + public SVGPathSegLinetoAbs createSVGPathSegLinetoAbs ( float x, float y ) + { + return null; + } + + public SVGPathSegLinetoRel createSVGPathSegLinetoRel ( float x, float y ) + { + return null; + } + + public SVGPathSegCurvetoCubicAbs createSVGPathSegCurvetoCubicAbs ( float x, float y, float x1, float y1, float x2, float y2 ) + { + return null; + } + + public SVGPathSegCurvetoCubicRel createSVGPathSegCurvetoCubicRel ( float x, float y, float x1, float y1, float x2, float y2 ) + { + return null; + } + + public SVGPathSegCurvetoQuadraticAbs createSVGPathSegCurvetoQuadraticAbs ( float x, float y, float x1, float y1 ) + { + return null; + } + + public SVGPathSegCurvetoQuadraticRel createSVGPathSegCurvetoQuadraticRel ( float x, float y, float x1, float y1 ) + { + return null; + } + + public SVGPathSegArcAbs createSVGPathSegArcAbs ( float x, float y, float r1, float r2, float angle, boolean largeArcFlag, boolean sweepFlag ) + { + return null; + } + + public SVGPathSegArcRel createSVGPathSegArcRel ( float x, float y, float r1, float r2, float angle, boolean largeArcFlag, boolean sweepFlag ) + { + return null; + } + + public SVGPathSegLinetoHorizontalAbs createSVGPathSegLinetoHorizontalAbs ( float x ) + { + return null; + } + + public SVGPathSegLinetoHorizontalRel createSVGPathSegLinetoHorizontalRel ( float x ) + { + return null; + } + + public SVGPathSegLinetoVerticalAbs createSVGPathSegLinetoVerticalAbs ( float y ) + { + return null; + } + + public SVGPathSegLinetoVerticalRel createSVGPathSegLinetoVerticalRel ( float y ) + { + return null; + } + + public SVGPathSegCurvetoCubicSmoothAbs createSVGPathSegCurvetoCubicSmoothAbs ( float x, float y, float x2, float y2 ) + { + return null; + } + + public SVGPathSegCurvetoCubicSmoothRel createSVGPathSegCurvetoCubicSmoothRel ( float x, float y, float x2, float y2 ) + { + return null; + } + + public SVGPathSegCurvetoQuadraticSmoothAbs createSVGPathSegCurvetoQuadraticSmoothAbs ( float x, float y ) + { + return null; + } + + public SVGPathSegCurvetoQuadraticSmoothRel createSVGPathSegCurvetoQuadraticSmoothRel ( float x, float y ) + { + return null; + } + + public SVGList getAnimatedPathSegList( ) + { + return null; + } + + public SVGList getAnimatedNormalizedPathSegList( ) + { + return null; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathSegImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathSegImpl.java new file mode 100644 index 000000000..eb68a8258 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPathSegImpl.java @@ -0,0 +1,185 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +public class SVGPathSegImpl implements SVGPathSeg { + float[] values; + short commandType; + public SVGPathSegImpl(short type, float[] vals) + { + commandType = type; + values = vals; + } + + public float[] getValues() + { + return values; + } + + public short getPathSegType( ) + { + return commandType; + } + + public void setPathSegType( short pathSegType ) + { + } + + public String getPathSegTypeAsLetter( ) + { + return null; + } + + public void setPathSegTypeAsLetter( String pathSegTypeAsLetter ) + { + } + +/* public float getX( ) + { + return 0; + } + + public void setX( float x ) + { + } + + public float getY( ) + { + return 0; + } + + public void setY( float y ) + { + } + + public float getX1( ) + { + return 0; + } + + public void setX1( float x1 ) + { + } + + public float getY1( ) + { + return 0; + } + + public void setY1( float y1 ) + { + } + + public float getX2( ) + { + return 0; + } + + public void setX2( float x2 ) + { + } + + public float getY2( ) + { + return 0; + } + + public void setY2( float y2 ) + { + } + + public float getR1( ) + { + return 0; + } + + public void setR1( float r1 ) + { + } + + public float getR2( ) + { + return 0; + } + + public void setR2( float r2 ) + { + } + + public float getAngle( ) + { + return 0; + } + + public void setAngle( float angle ) + { + } + + public boolean getLargeArcFlag( ) + { + return false; + } + + public void setLargeArcFlag( boolean largeArcFlag ) + { + } + + public boolean getSweepFlag( ) + { + return false; + } + + public void setSweepFlag( boolean sweepFlag ) + { + }*/ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPatternElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPatternElementImpl.java new file mode 100644 index 000000000..1a5e16a70 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPatternElementImpl.java @@ -0,0 +1,135 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGPatternElementImpl extends SVGURIReferenceImpl implements SVGPatternElement { + + public SVGPatternElementImpl() { + } + + public SVGAnimatedEnumeration getPatternUnits( ) + { + return null; + } + + public void setPatternUnits( SVGAnimatedEnumeration patternUnits ) + { + } + + public SVGAnimatedTransformList getPatternTransform( ) + { + return null; + } + + public void setPatternTransform( SVGAnimatedTransformList patternTransform ) + { + } + + public SVGAnimatedLength getX( ) + { + return null; + } + + public void setX( SVGAnimatedLength x ) + { + } + + public SVGAnimatedLength getY( ) + { + return null; + } + + public void setY( SVGAnimatedLength y ) + { + } + + public SVGAnimatedLength getWidth( ) + { + return null; + } + + public void setWidth( SVGAnimatedLength width ) + { + } + + public SVGAnimatedLength getHeight( ) + { + return null; + } + + public void setHeight( SVGAnimatedLength height ) + { + } + + public SVGAnimatedRect getViewBox( ) + { + return null; + } + + public void setViewBox( SVGAnimatedRect viewBox ) + { + } + + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio( ) + { + return null; + } + + public void setPreserveAspectRatio( SVGAnimatedPreserveAspectRatio preserveAspectRatio) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolygonElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolygonElementImpl.java new file mode 100644 index 000000000..0c5e150c6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolygonElementImpl.java @@ -0,0 +1,101 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGPolygonElementImpl extends GraphicElement implements SVGPolygonElement { + + public Vector points; + + public SVGPolygonElementImpl(Vector p) + { + this.points = p; + } + + public SVGList getPoints( ) + { + return null; + } + + public SVGList getAnimatedPoints( ) + { + return null; + } + + public SVGRect getBBox() + { + float minX = 10000000; // a big number + float maxX = -10000000; // a low number + float minY = 10000000; // a big number + float maxY = -10000000; // a low number + for(Enumeration e = points.elements(); e.hasMoreElements(); ) { + e.nextElement(); + } + SVGRect rect = new SVGRectImpl(); + rect.setX(minX); + rect.setY(minY); + rect.setWidth(maxX - minX); + rect.setHeight(maxY - minY); + return rect; + } + + public String getTagName() + { + return "polygon"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolylineElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolylineElementImpl.java new file mode 100644 index 000000000..9d0f04e54 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGPolylineElementImpl.java @@ -0,0 +1,88 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGPolylineElementImpl extends GraphicElement implements SVGPolylineElement { + + public Vector points; + + public SVGPolylineElementImpl(Vector p) + { + this.points = p; + } + + public SVGList getPoints() + { + return null; + } + + public SVGList getAnimatedPoints( ) + { + return null; + } + +/* public SVGAnimatedBoolean getExternalResourcesRequired( ) + { + return null; + } + + public void setExternalResourcesRequired( SVGAnimatedBoolean externalResourcesRequired ) + { + }*/ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRadialGradientElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRadialGradientElementImpl.java new file mode 100644 index 000000000..978b6bd40 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRadialGradientElementImpl.java @@ -0,0 +1,119 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGRadialGradientElementImpl extends SVGGradientElementImpl implements SVGRadialGradientElement { + SVGAnimatedLength cx; + SVGAnimatedLength cy; + SVGAnimatedLength r; + SVGAnimatedLength fx; + SVGAnimatedLength fy; + + public SVGRadialGradientElementImpl() + { + } + + public SVGAnimatedLength getCx() + { + return cx; + } + + public void setCx(SVGAnimatedLength cx) + { + this.cx = cx; + } + + public SVGAnimatedLength getCy() + { + return cy; + } + + public void setCy(SVGAnimatedLength cy) + { + this.cy = cy; + } + + public SVGAnimatedLength getR() + { + return r; + } + + public void setR(SVGAnimatedLength r) + { + this.r = r; + } + + public SVGAnimatedLength getFx() + { + return fx; + } + + public void setFx(SVGAnimatedLength fx) + { + this.fx = fx; + } + + public SVGAnimatedLength getFy() + { + return fy; + } + + public void setFy(SVGAnimatedLength fy) + { + this.fy = fy; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectElementImpl.java new file mode 100644 index 000000000..c5ace8baa --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectElementImpl.java @@ -0,0 +1,161 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; +import org.w3c.dom.events.*; + +/** + * class representing a rectangle in an SVG Area + */ +public class SVGRectElementImpl extends GraphicElement implements SVGRectElement { + + /** x-coordinate of corner */ + private SVGAnimatedLength x; + + /** y-coordinate of corner */ + private SVGAnimatedLength y; + private SVGAnimatedLength rx; + private SVGAnimatedLength ry; + + /** width of rectangle */ + private SVGAnimatedLength width; + + /** height of rectangle */ + private SVGAnimatedLength height; + + /** + * construct a rectangle graphic. + * + * @param x x-coordinate of corner + * @param y y-coordinate of corner + * @param width width of rectangle + * @param height height of rectangle + */ + public SVGRectElementImpl() { + } + + public SVGRect getBBox() + { + SVGRect rect = new SVGRectImpl(); + rect.setX(x.getBaseVal().getValue()); + rect.setY(y.getBaseVal().getValue()); + rect.setWidth(width.getBaseVal().getValue()); + rect.setHeight(height.getBaseVal().getValue()); + return rect; + } + + public SVGAnimatedLength getX( ) + { + return x; + } + + public void setX( SVGAnimatedLength x ) + { + this.x = x; + } + + public SVGAnimatedLength getY( ) + { + return y; + } + + public void setY( SVGAnimatedLength y ) + { + this.y = y; + } + + public SVGAnimatedLength getWidth( ) + { + return width; + } + + public void setWidth( SVGAnimatedLength width ) + { + this.width = width; + } + + public SVGAnimatedLength getHeight( ) + { + return height; + } + + public void setHeight( SVGAnimatedLength height ) + { + this.height = height; + } + + public SVGAnimatedLength getRx( ) + { + return rx; + } + + public void setRx( SVGAnimatedLength rx ) + { + this.rx = rx; + } + + public SVGAnimatedLength getRy( ) + { + return ry; + } + + public void setRy( SVGAnimatedLength ry ) + { + this.ry = ry; + } + + public String getTagName() + { + return "rect"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectImpl.java new file mode 100644 index 000000000..b8f64a259 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGRectImpl.java @@ -0,0 +1,111 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGRectImpl implements SVGRect { + float x; + float y; + float width; + float height; + + public SVGRectImpl() + { + } + + public float getX( ) + { + return x; + } + + public void setX(float x ) + { + this.x = x; + } + + public float getY( ) + { + return y; + } + + public void setY(float y ) + { + this.y = y; + } + + public float getWidth( ) + { + return width; + } + + public void setWidth(float width ) + { + this.width = width; + } + + public float getHeight( ) + { + return height; + } + + public void setHeight(float height ) + { + this.height = height; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSVGElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSVGElementImpl.java new file mode 100644 index 000000000..8c5c69f40 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSVGElementImpl.java @@ -0,0 +1,412 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.dom.stylesheets.StyleSheetListImpl; +import org.apache.fop.fo.Property; + +import java.util.*; + +import org.w3c.dom.events.Event; +import org.w3c.dom.Element; +import org.w3c.dom.css.RGBColor; +import org.w3c.dom.css.CSSStyleDeclaration; +import org.w3c.dom.stylesheets.StyleSheetList; +import org.w3c.dom.stylesheets.StyleSheet; +import org.w3c.dom.NodeList; +import org.w3c.dom.views.DocumentView; +import org.w3c.dom.svg.*; +import org.w3c.dom.css.*; +import org.w3c.dom.*; + +/** + * + */ +public class SVGSVGElementImpl extends GraphicElement implements SVGSVGElement { + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + + public SVGSVGElementImpl() + { + } + + public SVGAnimatedLength getX( ) + { + return x; + } + + public SVGAnimatedLength getY( ) + { + return y; + } + + public SVGAnimatedLength getWidth( ) + { + return width; + } + + public SVGAnimatedLength getHeight( ) + { + return height; + } + + public void setWidth(SVGAnimatedLength w) + { + width = w; + } + + public void setHeight(SVGAnimatedLength h) + { + height = h; + } + + public void setX(SVGAnimatedLength x) + { + this.x = x; + } + + public void setY(SVGAnimatedLength y) + { + this.y = y; + } + + public SVGRect getViewport( ) + { + return null; + } + + public SVGRect getBBox() + { + return getChildrenBBox(); + } + + public String getContentScriptType( ) + { + return null; + } + + public void setContentScriptType( String contentScriptType ) + { + } + + public String getContentStyleType( ) + { + return null; + } + + public void setContentStyleType( String contentStyleType ) + { + } + +/* public CSSValue getPresentationAttribute ( String name ) + { + CSSStyleDeclaration style; + style = getStyle(); + CSSValue val; + val = style.getPropertyCSSValue(name); + if(val == null) { + // get "style" element style for this + } + if(val == null) { + // get element parents style + Node par = getParentNode(); + if(par instanceof SVGStylable) { + val = ((SVGStylable)par).getPresentationAttribute(name); + } + } + return val; + }*/ + + public SVGPoint getCurrentTranslate( ) + { + return null; + } + + public void setCurrentTranslate( SVGPoint currentTranslate ) + { + } + + public SVGViewSpec getCurrentView( ) + { + return null; + } + + public void deSelectAll() + { + } + + public NodeList getIntersectionList ( SVGRect rect, SVGElement referenceElement ) + { + return null; + } + + public NodeList getEnclosureList ( SVGRect rect, SVGElement referenceElement ) + { + return null; + } + + public boolean checkIntersection ( SVGElement element, SVGRect rect ) + { + return false; + } + + public boolean checkEnclosure ( SVGElement element, SVGRect rect ) + { + return false; + } + + public float getPixelUnitToMillimeterX( ) + { + return 0; + } + + public float getPixelUnitToMillimeterY( ) + { + return 0; + } + + public float getScreenPixelToMillimeterX( ) + { + return 0; + } + + public float getScreenPixelToMillimeterY( ) + { + return 0; + } + + public boolean getUseCurrentView( ) + { + return true; + } + + public void setUseCurrentView( boolean useCurrentView ) + { + } + + public float getCurrentScale( ) + { + return 0; + } + + public void setCurrentScale( float currentScale ) + { + } + + public int suspendRedraw ( int max_wait_milliseconds ) + { + return 0; + } + + public void unsuspendRedraw ( int suspend_handle_id ) + { + } + + public void unsuspendRedrawAll ( ) + { + } + + public void forceRedraw ( ) + { + } + + public void pauseAnimations ( ) + { + } + + public void unpauseAnimations ( ) + { + } + + public boolean animationsPaused () + { + return true; + } + + public float getCurrentTime() + { + return 0; + } + + public void setCurrentTime ( float seconds ) + { + } + + public SVGLength createSVGLength ( ) + { + return new SVGLengthImpl(); + } + + public SVGAngle createSVGAngle ( ) + { + return new SVGAngleImpl(); + } + + public SVGPoint createSVGPoint ( ) + { + return null; + } + + public SVGMatrix createSVGMatrix ( ) + { + return new SVGMatrixImpl(); + } + + public SVGRect createSVGRect ( ) + { + return new SVGRectImpl(); + } + + public SVGTransform createSVGTransform ( ) + { + return new SVGTransformImpl(); + } + + public SVGTransform createSVGTransformFromMatrix ( SVGMatrix matrix ) + { + SVGTransform trans = new SVGTransformImpl(); + trans.setMatrix(matrix); + return trans; + } + + public RGBColor createRGBColor ( ) + { + return null; + } + + public SVGICCColor createSVGICCColor ( ) + { + return null; + } + + public Element getElementById ( String elementId ) + { + return null; + } + + public short getZoomAndPan( ) + { + return 0; + } + + public void setZoomAndPan( short zoomAndPan ) + { + } + + public SVGAnimatedRect getViewBox() + { + return null; + } + + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio( ) + { + return null; + } + + public CSSStyleDeclaration getComputedStyle(Element el, String str) + { + return null; + } + + public CSSStyleDeclaration getOverrideStyle(Element el, String str) + { + return null; + } + + public StyleSheetList getStyleSheets() + { + NodeList nl = getElementsByTagName("style"); + Vector shs = new Vector(); + for(int count = 0; count < nl.getLength(); count++) { + Node el = (Node)nl.item(count); + SVGStyleElementImpl sse = (SVGStyleElementImpl)el; + StyleSheet sheet = sse.getStyleSheet(); + shs.addElement(sheet); + } + return new StyleSheetListImpl(shs); + } + + public Event createEvent(String str) + { + return null; + } + + public DocumentView getDocument() + { + return null; + } + + public Node appendChild(Node newChild) + throws DOMException + { + Node nChild = super.appendChild(newChild); + if(newChild instanceof SVGElementImpl) { + SVGElementImpl ele = (SVGElementImpl)newChild; + ele.setOwnerSVG(this); + } + setOwnerSVG(this); + return nChild; + } + + public void setOwnerSVG(SVGSVGElement owner) + { + ownerSvg = owner; + NodeList nl = getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGElementImpl) { + ((SVGElementImpl)n).setOwnerSVG(this); + } + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSetElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSetElementImpl.java new file mode 100644 index 000000000..e259d2170 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSetElementImpl.java @@ -0,0 +1,64 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGSetElementImpl extends GraphicElement {// implements SVGSetElement { + + public SVGSetElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStopElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStopElementImpl.java new file mode 100644 index 000000000..de0592809 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStopElementImpl.java @@ -0,0 +1,75 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGStopElementImpl extends SVGElementImpl implements SVGStopElement { + SVGAnimatedNumber offset; + + public SVGStopElementImpl() + { + } + + public SVGAnimatedNumber getOffset() + { + return offset; + } + + public void setOffset(SVGAnimatedNumber offset) + { + this.offset = offset; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStyleElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStyleElementImpl.java new file mode 100644 index 000000000..3fedd5edb --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGStyleElementImpl.java @@ -0,0 +1,109 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.apache.fop.dom.css.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.css.*; +import org.w3c.dom.stylesheets.*; + +/** + * + */ +public class SVGStyleElementImpl extends GraphicElement implements SVGStyleElement { + String type; + CSSStyleSheet styleSheet; + + public SVGStyleElementImpl(String str) + { + styleSheet = new CSSStyleSheetImpl(str); + } + + public String getType() + { + return type; + } + + public void setType(String type) + { + this.type = type; + } + + public String getMedia( ) + { + return null; + } + + public void setMedia( String media ) + { + } + + public String getTitle( ) + { + return null; + } + + public void setTitle( String title ) + { + } + + public StyleSheet getStyleSheet() + { + return styleSheet; + } + + public String getTagName() + { + return "style"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSwitchElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSwitchElementImpl.java new file mode 100644 index 000000000..be4ecacab --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSwitchElementImpl.java @@ -0,0 +1,69 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGSwitchElementImpl extends GraphicElement implements SVGSwitchElement { + + public SVGSwitchElementImpl() { + } + + public SVGRect getBBox() + { + // is this valid since only one will be rendered? + return getChildrenBBox(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSymbolElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSymbolElementImpl.java new file mode 100644 index 000000000..5cc318de5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGSymbolElementImpl.java @@ -0,0 +1,86 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGSymbolElementImpl extends GraphicElement implements SVGSymbolElement { + SVGAnimatedRect viewBox; + SVGAnimatedPreserveAspectRatio preserveAspectRatio; + + public SVGSymbolElementImpl() + { + } + + public SVGAnimatedRect getViewBox() + { + return viewBox; + } + + public void setViewBox(SVGAnimatedRect viewBox) + { + this.viewBox = viewBox; + } + + public SVGAnimatedPreserveAspectRatio getPreserveAspectRatio( ) + { + return preserveAspectRatio; + } + + public void setPreserveAspectRatio(SVGAnimatedPreserveAspectRatio preserveAspectRatio) + { + this.preserveAspectRatio = preserveAspectRatio; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTRefElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTRefElementImpl.java new file mode 100644 index 000000000..205b84b00 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTRefElementImpl.java @@ -0,0 +1,154 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import java.util.Vector; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGTRefElementImpl extends SVGTSpanElementImpl implements SVGTRefElement { + public String ref; + + String xlinkType; + String xlinkRole; + String xlinkTitle; + String xlinkShow; + String xlinkActuate; + String xlinkArcRole; + SVGAnimatedString href; + + public SVGTRefElementImpl() + { + } + + public String getXlinkType( ) + { + return xlinkType; + } + + public void setXlinkType( String xlinkType ) + { + this.xlinkType = xlinkType; + } + + public String getXlinkRole( ) + { + return xlinkRole; + } + + public void setXlinkRole( String xlinkRole ) + { + this.xlinkRole = xlinkRole; + } + + public String getXlinkTitle( ) + { + return xlinkTitle; + } + + public void setXlinkTitle( String xlinkTitle ) + { + this.xlinkTitle = xlinkTitle; + } + + public String getXlinkArcRole() + { + return xlinkArcRole; + } + + public void setXlinkArcRole(String xlinkArcRole) + { + this.xlinkArcRole = xlinkArcRole; + } + + public String getXlinkShow( ) + { + return xlinkShow; + } + + public void setXlinkShow( String xlinkShow ) + { + this.xlinkShow = xlinkShow; + } + + public String getXlinkActuate( ) + { + return xlinkActuate; + } + + public void setXlinkActuate( String xlinkActuate ) + { + this.xlinkActuate = xlinkActuate; + } + + public SVGAnimatedString getHref( ) + { + return href; + } + + public void setHref( SVGAnimatedString href ) + { + this.href = href; + } + + public SVGAnimatedBoolean getExternalResourcesRequired() + { + return null; + } + + public void setExternalResourcesRequired(SVGAnimatedBoolean externalResourcesRequired) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTSpanElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTSpanElementImpl.java new file mode 100644 index 000000000..8e281c13a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTSpanElementImpl.java @@ -0,0 +1,101 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGTSpanElementImpl extends SVGTextContentElementImpl implements SVGTSpanElement { + public String str; + public int dx = 0; + public int dy = 0; + public SVGAnimatedLengthList xlist = null; + public SVGAnimatedLengthList ylist = null; + public SVGAnimatedLengthList dxlist = null; + public SVGAnimatedLengthList dylist = null; + + /** + * + */ + public SVGTSpanElementImpl() + { + } + + public SVGAnimatedLengthList getX( ) + { + return xlist; + } + + public SVGAnimatedLengthList getY( ) + { + return ylist; + } + + public SVGAnimatedLengthList getDx( ) + { + return dxlist; + } + + public SVGAnimatedLengthList getDy( ) + { + return dylist; + } + + public SVGAnimatedTextRotate getRotate( ) + { + return null; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextContentElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextContentElementImpl.java new file mode 100644 index 000000000..ebf0ca5a7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextContentElementImpl.java @@ -0,0 +1,120 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * class representing text in an SVG Area + * + */ +public class SVGTextContentElementImpl extends GraphicElement implements SVGTextContentElement { + + public SVGTextContentElementImpl() + { + } + + public SVGAnimatedLength getTextLength( ) + { + return null; + } + + public SVGAnimatedEnumeration getLengthAdjust( ) + { + return null; + } + + public int getNumberOfChars ( ) + { + return 0; + } + + public float getComputedTextLength ( ) + { + return 0; + } + + public float getSubStringLength ( int charnum, int nchars) + { + return 0; + } + + public SVGPoint getStartPositionOfChar ( int charnum ) + { + return null; + } + + public SVGPoint getEndPositionOfChar ( int charnum ) + { + return null; + } + + public SVGRect getExtentOfChar ( int charnum ) + { + return null; + } + + public float getRotationOfChar ( int charnum ) + { + return 0; + } + + public int getCharNumAtPosition ( SVGPoint point ) + { + return 0; + } + + public void selectSubString ( int charnum, int nchars ) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextElementImpl.java new file mode 100644 index 000000000..ddf9d8747 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextElementImpl.java @@ -0,0 +1,78 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * class representing text in an SVG Area + * + */ +public class SVGTextElementImpl extends SVGTextContentElementImpl { + + /** x-coordinate of text */ + public float x; + + /** y-coordinate of text */ + public float y; + + /** vector of text elements, strings, tspan, tref */ + public Vector textList; + + /** + * construct a text element + */ + public SVGTextElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextPathElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextPathElementImpl.java new file mode 100644 index 000000000..0394d1f4c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTextPathElementImpl.java @@ -0,0 +1,66 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +/** + * + */ +public class SVGTextPathElementImpl extends SVGElementImpl { + public String pathLink; + public String str; + + public SVGTextPathElementImpl(String s, String con) + { + pathLink = s; + str = con; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTitleElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTitleElementImpl.java new file mode 100644 index 000000000..935cbf693 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTitleElementImpl.java @@ -0,0 +1,63 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * class representing a line in an SVG Area + */ +public class SVGTitleElementImpl extends GraphicElement implements SVGTitleElement { + public SVGTitleElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformImpl.java new file mode 100644 index 000000000..db2f6ef11 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformImpl.java @@ -0,0 +1,121 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import org.apache.fop.fo.Property; + +import java.util.*; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class SVGTransformImpl implements SVGTransform { + short type; + SVGMatrix matrix = new SVGMatrixImpl(); + + public SVGTransformImpl() + { + } + + public short getType( ) + { + return type; + } + + public SVGMatrix getMatrix( ) + { + return matrix; + } + + public float getAngle( ) + { + return 0.0f; + } + + public void setMatrix ( SVGMatrix matrix ) + { + this.matrix = matrix; + } + + public void setTranslate ( float tx, float ty ) + throws SVGException + { + matrix.setE(tx); + matrix.setF(ty); + } + + public void setScale ( float sx, float sy ) + throws SVGException + { + matrix.setA(sx); + matrix.setD(sy); + } + + public void setRotate (float angle, float cx, float cy) + throws SVGException + { + matrix = matrix.rotate(angle); + } + + public void setSkewX ( float angle ) + throws SVGException + { + matrix = matrix.skewX(angle); + } + + public void setSkewY ( float angle ) + throws SVGException + { + matrix = matrix.skewY(angle); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformListImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformListImpl.java new file mode 100644 index 000000000..c4a22d487 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGTransformListImpl.java @@ -0,0 +1,86 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.dom.svg; + +import java.util.*; + +import org.w3c.dom.svg.*; +import org.w3c.dom.*; + +/** + * Transform List + */ +public class SVGTransformListImpl extends SVGListImpl implements SVGTransformList { + public SVGTransform createSVGTransformFromMatrix ( SVGMatrix matrix ) + throws SVGException + { + SVGTransform st = new SVGTransformImpl(); + st.setMatrix(matrix); + return st; + } + + public SVGTransform consolidate() + { + SVGMatrix matrix = new SVGMatrixImpl(); + for(int count = 0; count < getNumberOfItems(); count++) { + SVGMatrix mat = ((SVGTransform)getItem(count)).getMatrix(); + matrix = matrix.multiply(mat); + } + SVGTransform trans = new SVGTransformImpl(); + trans.setMatrix(matrix); + return trans; + } + + public Object createItem() + { + return new SVGTransformImpl(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGURIReferenceImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGURIReferenceImpl.java new file mode 100644 index 000000000..edf9a3ad0 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGURIReferenceImpl.java @@ -0,0 +1,143 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +public class SVGURIReferenceImpl extends GraphicElement implements SVGURIReference { + String xlinkType; + String xlinkRole; + String xlinkTitle; + String xlinkShow; + String xlinkActuate; + String xlinkArcRole; + SVGAnimatedString href; + + public String getXlinkType( ) + { + return xlinkType; + } + + public void setXlinkType( String xlinkType ) + { + this.xlinkType = xlinkType; + } + + public String getXlinkRole( ) + { + return xlinkRole; + } + + public void setXlinkRole( String xlinkRole ) + { + this.xlinkRole = xlinkRole; + } + + public String getXlinkTitle( ) + { + return xlinkTitle; + } + + public void setXlinkTitle( String xlinkTitle ) + { + this.xlinkTitle = xlinkTitle; + } + + public String getXlinkArcRole() + { + return xlinkArcRole; + } + + public void setXlinkArcRole(String xlinkArcRole) + { + this.xlinkArcRole = xlinkArcRole; + } + + public String getXlinkShow( ) + { + return xlinkShow; + } + + public void setXlinkShow( String xlinkShow ) + { + this.xlinkShow = xlinkShow; + } + + public String getXlinkActuate( ) + { + return xlinkActuate; + } + + public void setXlinkActuate( String xlinkActuate ) + { + this.xlinkActuate = xlinkActuate; + } + + public SVGAnimatedString getHref( ) + { + return href; + } + + public void setHref( SVGAnimatedString href ) + { + this.href = href; + } + + public SVGAnimatedBoolean getExternalResourcesRequired() + { + return null; + } + + public void setExternalResourcesRequired(SVGAnimatedBoolean externalResourcesRequired) + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGUseElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGUseElementImpl.java new file mode 100644 index 000000000..6de276cbf --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGUseElementImpl.java @@ -0,0 +1,194 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * Use Element + * + */ +public class SVGUseElementImpl extends GraphicElement implements SVGUseElement { + public String link; + String xlinkArcRole; + SVGAnimatedLength x; + SVGAnimatedLength y; + SVGAnimatedLength width; + SVGAnimatedLength height; + + public SVGUseElementImpl(String s) + { + link = s; + } + + public String getXlinkType( ) + { + return null; + } + + public void setXlinkType( String xlinkType ) + { + } + + public String getXlinkRole( ) + { + return null; + } + + public void setXlinkRole( String xlinkRole ) + { + } + + public String getXlinkTitle( ) + { + return null; + } + + public void setXlinkTitle( String xlinkTitle ) + { + } + + public String getXlinkArcRole() + { + return xlinkArcRole; + } + + public void setXlinkArcRole(String xlinkArcRole) + { + this.xlinkArcRole = xlinkArcRole; + } + + public String getXlinkShow( ) + { + return null; + } + + public void setXlinkShow( String xlinkShow ) + { + } + + public String getXlinkActuate( ) + { + return null; + } + + public void setXlinkActuate( String xlinkActuate ) + { + } + + public SVGAnimatedString getHref( ) + { + return null; + } + + public void setHref( SVGAnimatedString href ) + { + } + + public SVGAnimatedLength getX( ) + { + return x; + } + + public void setX( SVGAnimatedLength x ) + { + this.x = x; + } + + public SVGAnimatedLength getY( ) + { + return y; + } + + public void setY( SVGAnimatedLength y ) + { + this.y = y; + } + + public SVGAnimatedLength getWidth( ) + { + return width; + } + + public void setWidth( SVGAnimatedLength width ) + { + this.width = width; + } + + public SVGAnimatedLength getHeight( ) + { + return height; + } + + public void setHeight( SVGAnimatedLength height ) + { + this.height = height; + } + + public SVGElementInstance getInstanceRoot( ) + { + return null; + } + + public SVGElementInstance getAnimatedInstanceRoot( ) + { + return null; + } + +/* public SVGAnimatedBoolean getExternalResourcesRequired( ) + { + } + + public void setExternalResourcesRequired( SVGAnimatedBoolean externalResourcesRequired ) + { + }*/ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGVKernElementImpl.java b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGVKernElementImpl.java new file mode 100644 index 000000000..befa97e76 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/dom/svg/SVGVKernElementImpl.java @@ -0,0 +1,65 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.dom.svg; + +import org.w3c.dom.svg.*; + +/** + * + * + */ +public class SVGVKernElementImpl extends SVGElementImpl implements SVGVKernElement { + + public SVGVKernElementImpl() + { + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/ElementMapping.java b/fop-0_14_0_regions/src/org/apache/fop/fo/ElementMapping.java new file mode 100644 index 000000000..9ed5cb3d1 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/ElementMapping.java @@ -0,0 +1,56 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +public interface ElementMapping { + + public void addToBuilder(TreeBuilder builder); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/FONode.java b/fop-0_14_0_regions/src/org/apache/fop/fo/FONode.java new file mode 100644 index 000000000..884e4070f --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/FONode.java @@ -0,0 +1,220 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +// FOP +import org.apache.fop.apps.FOPException; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.LinkSet; + +// Java +import java.util.Vector; + +/** + * base class for nodes in the formatting object tree + */ +abstract public class FONode { + + protected FObj parent; + + public Vector children = new Vector(); // made public for searching for id's + + /** value of marker before layout begins */ + public final static int START = -1000; + + /** value of marker after break-after */ + public final static int BREAK_AFTER = -1001; + + /** + * where the layout was up to. + * for FObjs it is the child number + * for FOText it is the character number + */ + protected int marker = START; + + protected boolean isInLabel = false; + protected boolean isInListBody = false; + protected boolean isInTableCell = false; + + protected int bodyIndent; + protected int distanceBetweenStarts; + protected int labelSeparation; + + protected int forcedStartOffset = 0; + protected int forcedWidth = 0; + + protected LinkSet linkSet; + + protected FONode(FObj parent) { + this.parent = parent; + } + + public void setIsInLabel() { + this.isInLabel = true; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++ ) { + FONode child = (FONode) this.children.elementAt(i); + child.setIsInLabel(); + } + } + + public void setIsInListBody() { + this.isInListBody = true; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.setIsInListBody(); + } + } + + public void setIsInTableCell() { + this.isInTableCell = true; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.setIsInTableCell(); + } + } + + public void setDistanceBetweenStarts(int distance) { + this.distanceBetweenStarts = distance; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.setDistanceBetweenStarts(distance); + } + } + + public void setLabelSeparation(int separation) { + this.labelSeparation = separation; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.setLabelSeparation(separation); + } + } + + public void setBodyIndent(int indent) { + this.bodyIndent = indent; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.setBodyIndent(indent); + } + } + + public void forceStartOffset(int offset) { + this.forcedStartOffset = offset; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.forceStartOffset(offset); + } + } + + public void forceWidth(int width) { + this.forcedWidth = width; + // made recursive by Eric Schaeffer + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.forceWidth(width); + } + } + + public void resetMarker() { + this.marker = START; + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + ((FONode) children.elementAt(i)).resetMarker(); + } + } + + public void removeAreas() { + // still to do + } + + protected void addChild(FONode child) { + children.addElement(child); + } + + public FObj getParent() { + return this.parent; + } + + public void setLinkSet(LinkSet linkSet) { + this.linkSet = linkSet; + for (int i = 0; i < this.children.size(); i++) { + FONode child = (FONode) this.children.elementAt(i); + child.setLinkSet(linkSet); + } + } + + public LinkSet getLinkSet() { + return this.linkSet; + } + + abstract public Status layout(Area area) + throws FOPException; + + /** + * lets outside sources access the property list + * first used by PageNumberCitation to find the "id" property + * returns null by default, overide this function when there is a property list + *@param name - the name of the desired property to obtain + * @returns the property + */ + public Property getProperty(String name) + { + return(null); + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/FOText.java b/fop-0_14_0_regions/src/org/apache/fop/fo/FOText.java new file mode 100644 index 000000000..d3f4a8740 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/FOText.java @@ -0,0 +1,133 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +// FOP +import org.apache.fop.layout.Area; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.datatypes.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.apps.FOPException; + +/** + * a text node in the formatting object tree + */ +public class FOText extends FONode { + + protected char[] ca; + protected int start; + protected int length; + + FontState fs; + float red; + float green; + float blue; + int wrapOption; + int whiteSpaceTreatment; + + protected FOText(char[] chars, int s, int e, FObj parent) { + super(parent); + this.start = 0; + this.ca = new char[e - s]; + for (int i = s; i < e; i++) + this.ca[i - s] = chars[i]; + this.length = e - s; + } + + public Status layout(Area area) throws FOPException { + if (!(area instanceof BlockArea)) { + MessageHandler.errorln("WARNING: text outside block area" + new String(ca, start, length)); + return new Status(Status.OK); + } + if (this.marker == START) { + String fontFamily = + this.parent.properties.get("font-family").getString(); + String fontStyle = + this.parent.properties.get("font-style").getString(); + String fontWeight = + this.parent.properties.get("font-weight").getString(); + int fontSize = + this.parent.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, fontStyle, + fontWeight, fontSize); + + ColorType c = + this.parent.properties.get("color").getColorType(); + this.red = c.red(); + this.green = c.green(); + this.blue = c.blue(); + + this.wrapOption = + this.parent.properties.get("wrap-option").getEnum(); + this.whiteSpaceTreatment = + this.parent.properties.get("white-space-treatment").getEnum(); + + this.marker = this.start; + } + int orig_start = this.marker; + this.marker = ((BlockArea) area).addText(fs, red, green, blue, + wrapOption, + this.getLinkSet(), + whiteSpaceTreatment, + ca, this.marker, length); + if (this.marker == -1) { + return new Status(Status.OK); + } else if (this.marker != orig_start) { + return new Status(Status.AREA_FULL_SOME); + } else { + return new Status(Status.AREA_FULL_NONE); + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/FOTreeBuilder.java b/fop-0_14_0_regions/src/org/apache/fop/fo/FOTreeBuilder.java new file mode 100644 index 000000000..4d25bc546 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/FOTreeBuilder.java @@ -0,0 +1,298 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +// FOP +import org.apache.fop.layout.AreaTree; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.pagination.Root; + +// SAX +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.SAXException; +import org.xml.sax.InputSource; +import org.xml.sax.Attributes; + +// Java +import java.util.Hashtable; +import java.util.Stack; +import java.io.IOException; + +/** + * SAX Handler that builds the formatting object tree. + */ +public class FOTreeBuilder extends DefaultHandler implements TreeBuilder { + + /** + * table mapping element names to the makers of objects + * representing formatting objects + */ + protected Hashtable fobjTable = new Hashtable(); + + /** + * class that builds a property list for each formatting object + */ + protected Hashtable propertylistTable = new Hashtable(); + + /** + * current formatting object being handled + */ + protected FObj currentFObj = null; + + /** + * the root of the formatting object tree + */ + protected FObj rootFObj = null; + + /** + * set of names of formatting objects encountered but unknown + */ + protected Hashtable unknownFOs = new Hashtable(); + + // namespace implementation ideas pinched from John Cowan +// protected static class NSMap { +// String prefix; +// String uri; +// int level; + +// NSMap(String prefix, String uri, int level) { +// this.prefix = prefix; +// this.uri = uri; +// this.level = level; +// } +// } + +// protected int level = 0; +// protected Stack namespaceStack = new Stack(); + +// { +// namespaceStack.push(new NSMap("xml", +// "http://www.w3.org/XML/1998/namespace", +// -1)); +// namespaceStack.push(new NSMap("", "", -1)); +// } + +// protected String findURI(String prefix) { +// for (int i = namespaceStack.size() - 1; i >= 0; i--) { +// NSMap nsMap = (NSMap) (namespaceStack.elementAt(i)); +// if (prefix.equals(nsMap.prefix)) return nsMap.uri; +// } +// return null; +// } + +// protected String mapName(String name) +// throws SAXException { +// int colon = name.indexOf(':'); +// String prefix = ""; +// String localPart = name; +// if (colon != -1) { +// prefix = name.substring(0, colon); +// localPart = name.substring(colon + 1); +// } +// String uri = findURI(prefix); +// if (uri == null) { +// if (prefix.equals("")) { +// return name; +// } else { +// throw new SAXException(new FOPException("Unknown namespace prefix " + prefix)); +// } +// } +// return uri + "^" + localPart; +// } + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addMapping(String namespaceURI, String localName, + FObj.Maker maker) { + this.fobjTable.put(namespaceURI + "^" + localName, maker); + } + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addPropertyList(String namespaceURI, Hashtable list) { + PropertyListBuilder plb; + plb = (PropertyListBuilder)this.propertylistTable.get(namespaceURI); + if(plb == null) { + plb = new PropertyListBuilder(); + plb.addList(list); + this.propertylistTable.put(namespaceURI, plb); + } else { + plb.addList(list); + } + } + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addElementPropertyList(String namespaceURI, String localName, Hashtable list) { + PropertyListBuilder plb; + plb = (PropertyListBuilder)this.propertylistTable.get(namespaceURI); + if(plb == null) { + plb = new PropertyListBuilder(); + plb.addElementList(localName, list); + this.propertylistTable.put(namespaceURI, plb); + } else { + plb.addElementList(localName, list); + } + } + + /** SAX Handler for characters */ + public void characters(char data[], int start, int length) { + currentFObj.addCharacters(data, start, start + length); + } + + /** SAX Handler for the end of an element */ + public void endElement( + String uri, String localName, String rawName) { + currentFObj.end(); + currentFObj = (FObj) currentFObj.getParent(); +// level--; +// while (((NSMap) namespaceStack.peek()).level > level) { +// namespaceStack.pop(); +// } + } + + /** SAX Handler for the start of the document */ + public void startDocument() { + MessageHandler.logln("building formatting object tree"); + } + + /** SAX Handler for the start of an element */ + public void startElement(String uri, + String localName, String rawName, Attributes attlist) + throws SAXException { + /* the formatting object started */ + FObj fobj; + + /* the maker for the formatting object started */ + FObj.Maker fobjMaker; + +// level++; +// int length = attlist.getLength(); +// for (int i = 0; i < length; i++) { +// String att = attlist.getQName(i); +// if (att.equals("xmlns")) { +// namespaceStack.push( new NSMap("", +// attlist.getValue(i), +// level)); +// } else if (att.startsWith("xmlns:")) { +// String value = attlist.getValue(i); +// namespaceStack.push(new NSMap(att.substring(6), value, +// level)); +// } +// } + + //String fullName = mapName(rawName); + String fullName = uri + "^" + localName; + fobjMaker = (FObj.Maker) fobjTable.get(fullName); + PropertyListBuilder currentListBuilder = + (PropertyListBuilder)this.propertylistTable.get(uri); + + if (fobjMaker == null) { + if (!this.unknownFOs.containsKey(fullName)) { + this.unknownFOs.put(fullName, ""); + MessageHandler.errorln("WARNING: Unknown formatting object " + + fullName); + } + fobjMaker = new FObjMixed.Maker(); // fall back + } + + try { + PropertyList list = null; + if(currentListBuilder != null) { + list = currentListBuilder.makeList(fullName, attlist, + (currentFObj == null) ? null : currentFObj.properties); + } + fobj = fobjMaker.make(currentFObj, list); + } catch (FOPException e) { + throw new SAXException(e); + } + + if (rootFObj == null) { + rootFObj = fobj; + if (!fobj.getName().equals("fo:root")) { + throw new SAXException(new FOPException("Root element must" + + " be root, not " + + fobj.getName())); + } + } else { + currentFObj.addChild(fobj); + } + + currentFObj = fobj; + } + + /** + * format this formatting object tree + * + * @param areaTree the area tree to format into + */ + public void format(AreaTree areaTree) + throws FOPException { + MessageHandler.logln("formatting FOs into areas"); + ((Root) this.rootFObj).format(areaTree); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/FObj.java b/fop-0_14_0_regions/src/org/apache/fop/fo/FObj.java new file mode 100644 index 000000000..bc4f789f6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/FObj.java @@ -0,0 +1,166 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +// FOP +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; +import org.apache.fop.datatypes.IDReferences; + +// Java +import java.util.Hashtable; +import java.util.Enumeration; + +/** + * base class for representation of formatting objects and their processing + */ +public class FObj extends FONode { + + public static class Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new FObj(parent, propertyList); + } + } + + public static Maker maker() { + return new Maker(); + } + +// protected PropertyList properties; + public PropertyList properties; + + protected String name; + + protected FObj(FObj parent, PropertyList propertyList) { + super(parent); + this.properties = propertyList; + this.name = "default FO"; + } + + /** + * adds characters (does nothing here) + * @param data text + * @param start start position + * @param length length of the text + */ + protected void addCharacters(char data[], int start, int length) { + // ignore + } + + /** + * generates the area or areas for this formatting object + * and adds these to the area. This method should always be + * overridden by all sub classes + * + * @param area + */ + public Status layout(Area area) throws FOPException { + // should always be overridden + return new Status(Status.OK); + } + + /** + * returns the name of the formatting object + * @return the name of this formatting objects + */ + public String getName() { + return this.name; + } + + /** + * + */ + protected void start() { + // do nothing by default + } + + /** + * + */ + protected void end() { + // do nothing by default + } + + /** + * lets outside sources access the property list + * first used by PageNumberCitation to find the "id" property + * @param name - the name of the desired property to obtain + * @return the property + */ + public Property getProperty(String name) + { + return(properties.get(name)); + } + + + + /** + * removes property id + * @param idReferences the id to remove + */ + public void removeID(IDReferences idReferences) + { + idReferences.removeID( ((FObj)this).properties.get("id").getString()); + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) + { + FONode child= (FONode)children.elementAt(i); + if ((child instanceof FObj)) + { + ((FObj)child).removeID(idReferences); + } + } + } + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/FObjMixed.java b/fop-0_14_0_regions/src/org/apache/fop/fo/FObjMixed.java new file mode 100644 index 000000000..35f412736 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/FObjMixed.java @@ -0,0 +1,114 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; + +/** + * base class for representation of mixed content formatting objects + * and their processing + */ +public class FObjMixed extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new FObjMixed(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new FObjMixed.Maker(); + } + + protected FObjMixed(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + } + + protected void addCharacters(char data[], int start, int length) { + children.addElement(new FOText(data,start,length,this)); + } + + public Status layout(Area area) throws FOPException { + + if(this.properties != null) { + Property prop = this.properties.get("id"); + if(prop != null) { + String id = prop.getString(); + + if ( this.marker == START ) { + if(area.getIDReferences() != null) + area.getIDReferences().createID(id); + this.marker = 0; + } + + if ( this.marker == 0 ) { + if(area.getIDReferences() != null) + area.getIDReferences().configureID(id,area); + } + } + } + + int numChildren = this.children.size(); + for ( int i = this.marker; i < numChildren; i++ ) { + FONode fo = (FONode) children.elementAt(i); + Status status; + if ( (status = fo.layout(area)).isIncomplete() ) { + this.marker = i; + return status; + } + } + return new Status(Status.OK); + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/Property.java b/fop-0_14_0_regions/src/org/apache/fop/fo/Property.java new file mode 100644 index 000000000..5645b2df4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/Property.java @@ -0,0 +1,91 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +public class Property { + + public static class Maker { + + public boolean isInherited() { return false; } + + public Property make(PropertyList propertyList, String value) throws FOPException { + return null; + } + + public Property make(PropertyList propertyList) throws FOPException { // default + return null; + } + + public Property compute(PropertyList propertyList) { // compute + return null; + } + } + protected PropertyList propertyList; + + public Length getLength() { return null; } + public String getString() { return null; } + public ColorType getColorType() { return null; } + public int getEnum() { return 0; } + + public static double toDouble(String s) { + double d; + try { + d = Double.valueOf(s).doubleValue(); + } catch (NumberFormatException e) { + d = Double.NaN; + } + return d; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyList.java b/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyList.java new file mode 100644 index 000000000..ad84046f7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyList.java @@ -0,0 +1,101 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +import java.util.Hashtable; +import org.apache.fop.messaging.MessageHandler; + +import org.apache.fop.apps.FOPException; + +public class PropertyList extends Hashtable { + private PropertyListBuilder builder; + private PropertyList parentPropertyList = null; + String namespace = ""; + String element = ""; + + public PropertyList(PropertyList parentPropertyList, String space, String el) { + this.parentPropertyList = parentPropertyList; + this.namespace = space; + this.element = el; + } + + public Property get(String propertyName) { + + if (builder == null) + MessageHandler.errorln("OH OH, builder has not been set"); + Property p = (Property)super.get(propertyName); + + if (p == null) { // if not explicit + p = this.builder.computeProperty(this,namespace, element, propertyName); + if (p == null) { // else inherit + if ((this.parentPropertyList != null)&&(this.builder.isInherited(namespace, element, propertyName))) { // check for parent + p = this.parentPropertyList.get(propertyName); // retrieve parent's value + } else { // default + try { + p = this.builder.makeProperty(this,namespace, element,propertyName); + } catch (FOPException e) { + // don't know what to do here + } + } + } + } + return p; + } + + public void setBuilder(PropertyListBuilder builder) { + this.builder = builder; + } + + public String getNameSpace() + { + return namespace; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListBuilder.java b/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListBuilder.java new file mode 100644 index 000000000..820b74b8a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListBuilder.java @@ -0,0 +1,171 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +import org.apache.fop.fo.properties.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.svg.*; +import org.apache.fop.datatypes.*; + +import org.apache.fop.apps.FOPException; + +import org.xml.sax.Attributes; + +import java.util.Hashtable; + +public class PropertyListBuilder { + + private Hashtable propertyListTable; + private Hashtable elementTable; + + public PropertyListBuilder() { + this.propertyListTable = new Hashtable(); + this.elementTable = new Hashtable(); + } + + public void addList(Hashtable list) + { + propertyListTable = list; // should add all + } + + public void addElementList(String element, Hashtable list) + { + elementTable.put(element, list); + } + + public Property computeProperty(PropertyList propertyList, String space, String element, String propertyName) { + + Property p = null; + Property.Maker propertyMaker = findMaker(space, element, propertyName); + if (propertyMaker != null) { + p = propertyMaker.compute(propertyList); + } else { + MessageHandler.errorln("WARNING: property " + propertyName + " ignored"); + } + return p; + } + + public boolean isInherited(String space, String element, String propertyName) { + boolean b; + + Property.Maker propertyMaker = findMaker(space, element, propertyName); + if (propertyMaker != null) { + b = propertyMaker.isInherited(); + } else { + //MessageHandler.errorln("WARNING: Unknown property " + propertyName); + b = true; + } + return b; + } + + public PropertyList makeList(String elementName, Attributes attributes, PropertyList parentPropertyList) throws FOPException { + int index = elementName.indexOf("^"); + String space = "http://www.w3.org/TR/1999/XSL/Format"; + if(index != -1) { + space = elementName.substring(0, index); + } + + PropertyList par = null; + if(parentPropertyList != null && space.equals(parentPropertyList.getNameSpace())) { + par = parentPropertyList; + } +// System.out.println(elementName.substring(index + 1)); + PropertyList p = new PropertyList(par, space, elementName.substring(index + 1)); + p.setBuilder(this); + Hashtable table; + table = (Hashtable)elementTable.get(elementName.substring(index + 1)); + for (int i = 0; i < attributes.getLength(); i++) { + String attributeName = attributes.getQName(i); + Property.Maker propertyMaker = null; + if(table != null) { + propertyMaker = (Property.Maker)table.get(attributeName); + } + if(propertyMaker == null) { + propertyMaker = (Property.Maker)propertyListTable.get(attributeName); + } + if (propertyMaker != null) { + p.put(attributeName,propertyMaker.make(p,attributes.getValue(i))); + } else { + //MessageHandler.errorln("WARNING: property " + attributeName + " ignored"); + } + } + + return p; + } + + public Property makeProperty(PropertyList propertyList, String space, String element, String propertyName) throws FOPException { + + Property p = null; + + Property.Maker propertyMaker = findMaker(space, element, propertyName); + if (propertyMaker != null) { + p = propertyMaker.make(propertyList); + } else { + MessageHandler.errorln("WARNING: property " + propertyName + " ignored"); + } + return p; + } + + protected Property.Maker findMaker(String space, String elementName, String propertyName) + { + Hashtable propertyTable; + Property.Maker propertyMaker = null; + propertyTable = (Hashtable)elementTable.get(elementName); + if(propertyTable != null) { + propertyMaker = (Property.Maker)propertyTable.get(propertyName); + } + if(propertyMaker == null) { + propertyMaker = (Property.Maker)propertyListTable.get(propertyName); + } + return propertyMaker; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListMapping.java b/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListMapping.java new file mode 100644 index 000000000..23d3c889a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/PropertyListMapping.java @@ -0,0 +1,56 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +public interface PropertyListMapping { + + public void addToBuilder(TreeBuilder builder); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/SVGTreeBuilder.java b/fop-0_14_0_regions/src/org/apache/fop/fo/SVGTreeBuilder.java new file mode 100644 index 000000000..4a9091c29 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/SVGTreeBuilder.java @@ -0,0 +1,305 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.dom.svg.*; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.pagination.Root; + +// SAX +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.SAXException; +import org.xml.sax.InputSource; +import org.xml.sax.Attributes; + +import org.w3c.dom.svg.*; + +// Java +import java.util.Hashtable; +import java.util.Stack; +import java.io.IOException; + +// NOTE: This class is here since a number of FObj methods that +// are called are protected. This should probably be fixed. +/** + * SAX Handler that builds the formatting object tree. + */ +public class SVGTreeBuilder extends DefaultHandler implements TreeBuilder { + + /** + * table mapping element names to the makers of objects + * representing formatting objects + */ + protected Hashtable fobjTable = new Hashtable(); + + /** + * class that builds a property list for each formatting object + */ + protected Hashtable propertylistTable = new Hashtable(); + + /** + * current formatting object being handled + */ + protected FObj currentFObj = null; + + /** + * the root of the formatting object tree + */ + protected FObj rootFObj = null; + + /** + * set of names of formatting objects encountered but unknown + */ + protected Hashtable unknownFOs = new Hashtable(); + + // namespace implementation ideas pinched from John Cowan +/* protected static class NSMap { + String prefix; + String uri; + int level; + + NSMap(String prefix, String uri, int level) { + this.prefix = prefix; + this.uri = uri; + this.level = level; + } + } + + protected int level = 0; + protected Stack namespaceStack = new Stack(); + + { + namespaceStack.push(new NSMap("xml", + "http://www.w3.org/XML/1998/namespace", + -1)); + namespaceStack.push(new NSMap("", "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd", -1)); + } + + protected String findURI(String prefix) { + for (int i = namespaceStack.size() - 1; i >= 0; i--) { + NSMap nsMap = (NSMap) (namespaceStack.elementAt(i)); + if (prefix.equals(nsMap.prefix)) return nsMap.uri; + } + return null; + } + + protected String mapName(String name) + throws SAXException { + int colon = name.indexOf(':'); + String prefix = ""; + String localPart = name; + if (colon != -1) { + prefix = name.substring(0, colon); + localPart = name.substring(colon + 1); + } + String uri = findURI(prefix); + if (uri == null) { + if (prefix.equals("")) { + return "http://www.w3.org/TR/2000/CR-SVG-20000802/DTD/svg-20000802.dtd^" + name; + } else { + throw new SAXException(new FOPException("Unknown namespace prefix " + prefix)); + } + } + return uri + "^" + localPart; + }*/ + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addMapping(String namespaceURI, String localName, + FObj.Maker maker) { + this.fobjTable.put(namespaceURI + "^" + localName, maker); + } + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addPropertyList(String namespaceURI, Hashtable list) { + PropertyListBuilder plb; + plb = (PropertyListBuilder)this.propertylistTable.get(namespaceURI); + if(plb == null) { + plb = new PropertyListBuilder(); + plb.addList(list); + this.propertylistTable.put(namespaceURI, plb); + } else { + plb.addList(list); + } + } + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addElementPropertyList(String namespaceURI, String localName, Hashtable list) { + PropertyListBuilder plb; + plb = (PropertyListBuilder)this.propertylistTable.get(namespaceURI); + if(plb == null) { + plb = new PropertyListBuilder(); + plb.addElementList(localName, list); + this.propertylistTable.put(namespaceURI, plb); + } else { + plb.addElementList(localName, list); + } + } + + /** SAX Handler for characters */ + public void characters(char data[], int start, int length) { + currentFObj.addCharacters(data, start, start + length); + } + + /** SAX Handler for the end of an element */ + public void endElement( + String uri, String localName, String rawName) { + currentFObj.end(); + currentFObj = (FObj) currentFObj.getParent(); +/* level--; + while (((NSMap) namespaceStack.peek()).level > level) { + namespaceStack.pop(); + }*/ + } + + /** SAX Handler for the start of the document */ + public void startDocument() { + MessageHandler.logln("building svg tree"); + } + + /** SAX Handler for the start of an element */ + public void startElement(String uri, + String localName, String rawName, Attributes attlist) + throws SAXException { + /* the formatting object started */ + FObj fobj; + if(uri.equals("")) { + uri = "http://www.w3.org/2000/svg"; + } + + /* the maker for the formatting object started */ + FObj.Maker fobjMaker; + +/* level++; + int length = attlist.getLength(); + for (int i = 0; i < length; i++) { + String att = attlist.getQName(i); + if (att.equals("xmlns")) { + namespaceStack.push( new NSMap("", + attlist.getValue(i), + level)); + } else if (att.startsWith("xmlns:")) { + String value = attlist.getValue(i); + namespaceStack.push(new NSMap(att.substring(6), value, + level)); + } + }*/ + +// String fullName = mapName(rawName); + String fullName = uri + "^" + localName; + fobjMaker = (FObj.Maker) fobjTable.get(fullName); + PropertyListBuilder currentListBuilder = (PropertyListBuilder)this.propertylistTable.get(uri); + + if (fobjMaker == null) { + if (!this.unknownFOs.containsKey(fullName)) { + this.unknownFOs.put(fullName, ""); + MessageHandler.errorln("WARNING: Unknown formatting object " + + fullName); + } + fobjMaker = new FObjMixed.Maker(); // fall back + } + + try { + PropertyList list = null; + if(currentListBuilder != null) { + list = currentListBuilder.makeList(fullName, attlist, + (currentFObj == null) ? null : currentFObj.properties); + } + fobj = fobjMaker.make(currentFObj, list); + } catch (FOPException e) { + throw new SAXException(e); + } + + if (rootFObj == null) { + rootFObj = fobj; + if (!fobj.getName().equals("svg:svg")) { + throw new SAXException(new FOPException("Root element must" + + " be svg, not " + + fobj.getName())); + } + } else { + currentFObj.addChild(fobj); + } + + currentFObj = fobj; + } + + /** + */ + public SVGDocument getSVGDocument() + { + SVGDocumentImpl doc = new SVGDocumentImpl(); + SVGSVGElement svg = (SVGSVGElement)((org.apache.fop.svg.SVG)rootFObj).createGraphic(); + doc.appendChild(svg); + return doc; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/StandardElementMapping.java b/fop-0_14_0_regions/src/org/apache/fop/fo/StandardElementMapping.java new file mode 100644 index 000000000..f1f967301 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/StandardElementMapping.java @@ -0,0 +1,109 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +import org.apache.fop.fo.flow.*; +import org.apache.fop.fo.pagination.*; + +public class StandardElementMapping implements ElementMapping { + + public void addToBuilder(TreeBuilder builder) { + + String uri = "http://www.w3.org/1999/XSL/Format"; + + builder.addMapping(uri, "root", Root.maker()); + builder.addMapping(uri, "layout-master-set", + LayoutMasterSet.maker()); + builder.addMapping(uri, "simple-page-master", + SimplePageMaster.maker()); + builder.addMapping(uri, "region-body", RegionBody.maker()); + builder.addMapping(uri, "region-before", RegionBefore.maker()); + builder.addMapping(uri, "region-after", RegionAfter.maker()); + builder.addMapping(uri, "page-sequence", PageSequence.maker()); + builder.addMapping(uri, "page-sequence-master", + PageSequenceMaster.maker()); + builder.addMapping(uri, "single-page-master-reference", + SinglePageMasterReference.maker()); + builder.addMapping(uri, "repeatable-page-master-reference", + RepeatablePageMasterReference.maker()); + builder.addMapping(uri, "conditional-page-master-reference", + ConditionalPageMasterReference.maker()); + builder.addMapping(uri, "repeatable-page-master-alternatives", + RepeatablePageMasterAlternatives.maker()); + builder.addMapping(uri, "flow", Flow.maker()); + builder.addMapping(uri, "static-content", + StaticContent.maker()); + builder.addMapping(uri, "block", Block.maker()); + builder.addMapping(uri, "block-container", BlockContainer.maker()); + builder.addMapping(uri, "list-block", ListBlock.maker()); + builder.addMapping(uri, "list-item", ListItem.maker()); + builder.addMapping(uri, "list-item-label", + ListItemLabel.maker()); + builder.addMapping(uri, "list-item-body", ListItemBody.maker()); + builder.addMapping(uri, "page-number", PageNumber.maker()); + builder.addMapping(uri, "page-number-citation", PageNumberCitation.maker()); + builder.addMapping(uri, "display-sequence", + DisplaySequence.maker()); + builder.addMapping(uri, "inline", + Inline.maker()); + builder.addMapping(uri, "external-graphic", + ExternalGraphic.maker()); + builder.addMapping(uri, "table", Table.maker()); + builder.addMapping(uri, "table-column", TableColumn.maker()); + builder.addMapping(uri, "table-body", TableBody.maker()); + builder.addMapping(uri, "table-row", TableRow.maker()); + builder.addMapping(uri, "table-cell", TableCell.maker()); + builder.addMapping(uri, "simple-link", SimpleLink.maker()); + builder.addMapping(uri, "instream-foreign-object", InstreamForeignObject.maker()); + builder.addMapping(uri, "leader", Leader.maker()); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/StandardPropertyListMapping.java b/fop-0_14_0_regions/src/org/apache/fop/fo/StandardPropertyListMapping.java new file mode 100644 index 000000000..47beac469 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/StandardPropertyListMapping.java @@ -0,0 +1,172 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +import org.apache.fop.fo.properties.*; + +import java.util.Hashtable; + +public class StandardPropertyListMapping implements PropertyListMapping { + + public void addToBuilder(TreeBuilder builder) { + + String uri = "http://www.w3.org/1999/XSL/Format"; + Hashtable propertyTable = new Hashtable(); + + propertyTable.put("end-indent",EndIndent.maker()); + propertyTable.put("master-name",MasterName.maker()); + propertyTable.put("page-master-first",PageMasterFirst.maker()); + propertyTable.put("page-master-repeating",PageMasterRepeating.maker()); + propertyTable.put("page-master-odd",PageMasterOdd.maker()); + propertyTable.put("page-master-even",PageMasterEven.maker()); + propertyTable.put("margin-top",MarginTop.maker()); + propertyTable.put("margin-bottom",MarginBottom.maker()); + propertyTable.put("margin-left",MarginLeft.maker()); + propertyTable.put("margin-right",MarginRight.maker()); + propertyTable.put("extent",Extent.maker()); + propertyTable.put("page-width",PageWidth.maker()); + propertyTable.put("page-height",PageHeight.maker()); + propertyTable.put("flow-name",FlowName.maker()); + propertyTable.put("font-family",FontFamily.maker()); + propertyTable.put("font-style",FontStyle.maker()); + propertyTable.put("font-weight",FontWeight.maker()); + propertyTable.put("font-size",FontSize.maker()); + propertyTable.put("line-height",LineHeight.maker()); + propertyTable.put("text-align",TextAlign.maker()); + propertyTable.put("text-align-last",TextAlignLast.maker()); + propertyTable.put("space-before.optimum",SpaceBeforeOptimum.maker()); + propertyTable.put("space-after.optimum",SpaceAfterOptimum.maker()); + propertyTable.put("start-indent",StartIndent.maker()); + propertyTable.put("end-indent",EndIndent.maker()); + propertyTable.put("provisional-distance-between-starts",ProvisionalDistanceBetweenStarts.maker()); + propertyTable.put("provisional-label-separation",ProvisionalLabelSeparation.maker()); + propertyTable.put("rule-thickness",RuleThickness.maker()); + propertyTable.put("color",Color.maker()); + propertyTable.put("wrap-option",WrapOption.maker()); + propertyTable.put("white-space-treatment",WhiteSpaceTreatment.maker()); + propertyTable.put("break-before",BreakBefore.maker()); + propertyTable.put("break-after",BreakAfter.maker()); + propertyTable.put("text-indent",TextIndent.maker()); + propertyTable.put("src",Src.maker()); + propertyTable.put("column-width",ColumnWidth.maker()); + propertyTable.put("keep-with-next",KeepWithNext.maker()); + propertyTable.put("background-color",BackgroundColor.maker()); + propertyTable.put("padding-top",PaddingTop.maker()); + propertyTable.put("padding-bottom",PaddingBottom.maker()); + propertyTable.put("padding-left",PaddingLeft.maker()); + propertyTable.put("padding-right",PaddingRight.maker()); + propertyTable.put("external-destination",ExternalDestination.maker()); + propertyTable.put("internal-destination",InternalDestination.maker()); + + propertyTable.put("border-after-color",BorderAfterColor.maker()); + propertyTable.put("border-after-style",BorderAfterStyle.maker()); + propertyTable.put("border-after-width",BorderAfterWidth.maker()); + propertyTable.put("border-before-color",BorderBeforeColor.maker()); + propertyTable.put("border-before-style",BorderBeforeStyle.maker()); + propertyTable.put("border-before-width",BorderBeforeWidth.maker()); + propertyTable.put("border-bottom",BorderBottom.maker()); + propertyTable.put("border-bottom-color",BorderBottomColor.maker()); + propertyTable.put("border-bottom-style",BorderBottomStyle.maker()); + propertyTable.put("border-bottom-width",BorderBottomWidth.maker()); + propertyTable.put("border-color",BorderColor.maker()); + propertyTable.put("border-end-color",BorderEndColor.maker()); + propertyTable.put("border-end-style",BorderEndStyle.maker()); + propertyTable.put("border-end-width",BorderEndWidth.maker()); + propertyTable.put("border-left",BorderLeft.maker()); + propertyTable.put("border-left-color",BorderLeftColor.maker()); + propertyTable.put("border-left-style",BorderLeftStyle.maker()); + propertyTable.put("border-left-width",BorderLeftWidth.maker()); + propertyTable.put("border-right",BorderRight.maker()); + propertyTable.put("border-right-color",BorderRightColor.maker()); + propertyTable.put("border-right-style",BorderRightStyle.maker()); + propertyTable.put("border-right-width",BorderRightWidth.maker()); + propertyTable.put("border-start-color",BorderStartColor.maker()); + propertyTable.put("border-start-color",BorderStartColor.maker()); + propertyTable.put("border-start-width",BorderStartWidth.maker()); + propertyTable.put("border-style",BorderStyle.maker()); + propertyTable.put("border-top",BorderTop.maker()); + propertyTable.put("border-top-color",BorderTopColor.maker()); + propertyTable.put("border-top-style",BorderTopStyle.maker()); + propertyTable.put("border-top-style",BorderTopStyle.maker()); + propertyTable.put("border-width",BorderWidth.maker()); + propertyTable.put("bottom",Bottom.maker()); + propertyTable.put("height",Height.maker()); + propertyTable.put("left",Left.maker()); + propertyTable.put("padding",Padding.maker()); + propertyTable.put("padding-after",PaddingAfter.maker()); + propertyTable.put("padding-before",PaddingBefore.maker()); + propertyTable.put("padding-end",PaddingEnd.maker()); + propertyTable.put("padding-start",PaddingStart.maker()); + propertyTable.put("position",Position.maker()); + propertyTable.put("right",Right.maker()); + propertyTable.put("top",Top.maker()); + propertyTable.put("width",Width.maker()); + propertyTable.put("initial-page-number",InitialPageNumber.maker()); + propertyTable.put("ref-id",RefId.maker()); // used by page-number-citation + propertyTable.put("id",Id.maker()); // attribute for objects, used by page-number-citation + propertyTable.put("maximum-repeats",MaximumRepeats.maker()); + propertyTable.put("page-position",PagePosition.maker()); + propertyTable.put("odd-or-even",OddOrEven.maker()); + propertyTable.put("blank-or-not-blank",BlankOrNotBlank.maker()); + propertyTable.put("content-width",ContentWidth.maker()); + propertyTable.put("content-height",ContentHeight.maker()); + propertyTable.put("leader-pattern",LeaderPattern.maker()); + propertyTable.put("leader-length",LeaderLength.maker()); + propertyTable.put("rule-style",RuleStyle.maker()); + propertyTable.put("scaling",Scaling.maker()); + propertyTable.put("vertical-align",VerticalAlign.maker()); + propertyTable.put("overflow",Overflow.maker()); + propertyTable.put("region-name",RegionName.maker()); + + builder.addPropertyList(uri, propertyTable); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/Status.java b/fop-0_14_0_regions/src/org/apache/fop/fo/Status.java new file mode 100644 index 000000000..2f75c884c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/Status.java @@ -0,0 +1,84 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo; + +/** + * classes representating the status of laying out a formatting object + */ +public class Status { + + protected int code; + + public final static int OK = 1; + public final static int AREA_FULL_NONE = 2; + public final static int AREA_FULL_SOME = 3; + public final static int FORCE_PAGE_BREAK = 4; + public final static int FORCE_PAGE_BREAK_EVEN = 5; + public final static int FORCE_PAGE_BREAK_ODD = 6; + public final static int KEEP_WITH_NEXT = 7; + + public Status(int code) { + this.code = code; + } + + public int getCode() { + return this.code; + } + + public boolean isIncomplete() { + return ((this.code != OK) && (this.code != KEEP_WITH_NEXT)); + } + + public boolean laidOutNone() { + return (this.code == AREA_FULL_NONE); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/TreeBuilder.java b/fop-0_14_0_regions/src/org/apache/fop/fo/TreeBuilder.java new file mode 100644 index 000000000..66391b904 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/TreeBuilder.java @@ -0,0 +1,102 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +// FOP +import org.apache.fop.layout.AreaTree; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.pagination.Root; + +// SAX +import org.xml.sax.helpers.DefaultHandler; +import org.xml.sax.SAXException; +import org.xml.sax.InputSource; +import org.xml.sax.Attributes; + +// Java +import java.util.Hashtable; +import java.util.Stack; +import java.io.IOException; + +/** + */ +public interface TreeBuilder { + + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addMapping(String namespaceURI, String localName, FObj.Maker maker); + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addPropertyList(String namespaceURI, Hashtable list); + + /** + * add a mapping from element name to maker. + * + * @param namespaceURI namespace URI of formatting object element + * @param localName local name of formatting object element + * @param maker Maker for class representing formatting object + */ + public void addElementPropertyList(String namespaceURI, String localName, Hashtable list); + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/XTElementMapping.java b/fop-0_14_0_regions/src/org/apache/fop/fo/XTElementMapping.java new file mode 100644 index 000000000..2095a91d1 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/XTElementMapping.java @@ -0,0 +1,56 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +public interface XTElementMapping { + + public void addToBuilder(XTFOTreeBuilder builder); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/XTFOTreeBuilder.java b/fop-0_14_0_regions/src/org/apache/fop/fo/XTFOTreeBuilder.java new file mode 100644 index 000000000..898138eb1 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/XTFOTreeBuilder.java @@ -0,0 +1,172 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo; + +// FOP +import org.apache.fop.layout.AreaTree; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.pagination.Root; + +// SAX +import org.xml.sax.SAXException; +import org.xml.sax.Attributes; +import org.xml.sax.helpers.AttributesImpl; +import org.xml.sax.DocumentHandler; +import org.xml.sax.AttributeList; + +// Java +import java.util.Hashtable; +import java.util.Stack; +import java.io.IOException; + +/** + * SAX Handler that builds the formatting object tree. + */ +//public class XTFOTreeBuilder extends HandlerBase { +public class XTFOTreeBuilder extends FOTreeBuilder + implements DocumentHandler { + + // namespace implementation ideas pinched from John Cowan + protected static class NSMap { + String prefix; + String uri; + int level; + + NSMap(String prefix, String uri, int level) { + this.prefix = prefix; + this.uri = uri; + this.level = level; + } + } + + protected int level = 0; + protected String m_uri = null; + protected String m_localPart = null; + protected Stack namespaceStack = new Stack(); + + { + namespaceStack.push(new NSMap("xml", + "http://www.w3.org/XML/1998/namespace", + -1)); + namespaceStack.push(new NSMap("", "", -1)); + } + + protected String findURI(String prefix) { + for (int i = namespaceStack.size() - 1; i >= 0; i--) { + NSMap nsMap = (NSMap) (namespaceStack.elementAt(i)); + if (prefix.equals(nsMap.prefix)) return nsMap.uri; + } + return null; + } + + protected String mapName(String name) + throws SAXException { + + int colon = name.indexOf(':'); + String prefix = ""; + m_localPart = name; + if (colon != -1) { + prefix = name.substring(0, colon); + m_localPart = name.substring(colon + 1); + } + m_uri = findURI(prefix); + if (m_uri == null) { + if (prefix.equals("")) { + return name; + } else { + throw new SAXException(new FOPException("Unknown namespace prefix " + prefix)); + } + } + return m_uri + "^" + m_localPart; + } + + /** SAX1 Handler for the end of an element */ + public void endElement(String rawName) throws SAXException { + mapName(rawName); + super.endElement(m_uri, m_localPart, rawName); + level--; + while (((NSMap) namespaceStack.peek()).level > level) { + namespaceStack.pop(); + } + } + + /** SAX1 Handler for the start of an element */ + public void startElement(String rawName, AttributeList attlist) + throws SAXException { + + // SAX2 version of AttributeList + AttributesImpl newAttrs = new AttributesImpl(); + + level++; + int length = attlist.getLength(); + for (int i = 0; i < length; i++) { + String att = attlist.getName(i); + if (att.equals("xmlns")) { + namespaceStack.push( new NSMap("", + attlist.getValue(i), + level)); + } else if (att.startsWith("xmlns:")) { + String value = attlist.getValue(i); + namespaceStack.push(new NSMap(att.substring(6), value, + level)); + } else { + mapName(att); + newAttrs.addAttribute(m_uri, m_localPart, att, + attlist.getType(i), attlist.getValue(i)); + } + + } + + mapName(rawName); + super.startElement(m_uri, m_localPart, rawName, newAttrs); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Block.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Block.java new file mode 100644 index 000000000..2fd245f90 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Block.java @@ -0,0 +1,304 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +public class Block extends FObjMixed { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Block(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new Block.Maker(); + } + + FontState fs; + int align; + int alignLast; + int breakBefore; + int breakAfter; + int lineHeight; + int startIndent; + int endIndent; + int spaceBefore; + int spaceAfter; + int textIndent; + int keepWithNext; + ColorType backgroundColor; + int paddingTop; + int paddingBottom; + int paddingLeft; + int paddingRight; + + String id; + + ColorType borderColor; + int borderWidth; + int borderStyle; + + BlockArea blockArea; + + // this may be helpful on other FOs too + boolean anythingLaidOut = false; + + public Block(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:block"; + } + + public Status layout(Area area) throws FOPException { + // MessageHandler.error(" b:LAY[" + marker + "] "); + + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.align = this.properties.get("text-align").getEnum(); + this.alignLast = + this.properties.get("text-align-last").getEnum(); + this.breakBefore = + this.properties.get("break-before").getEnum(); + this.breakAfter = + this.properties.get("break-after").getEnum(); + this.lineHeight = + this.properties.get("line-height").getLength().mvalue(); + this.startIndent = + this.properties.get("start-indent").getLength().mvalue(); + this.endIndent = + this.properties.get("end-indent").getLength().mvalue(); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.textIndent = + this.properties.get("text-indent").getLength().mvalue(); + this.keepWithNext = + this.properties.get("keep-with-next").getEnum(); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.paddingTop = + this.properties.get("padding").getLength().mvalue(); + this.paddingLeft = this.paddingTop; + this.paddingRight = this.paddingTop; + this.paddingBottom = this.paddingTop; + if (this.paddingTop == 0) { + this.paddingTop = + this.properties.get("padding-top").getLength().mvalue(); + this.paddingLeft = + this.properties.get("padding-left").getLength().mvalue(); + this.paddingBottom = + this.properties.get("padding-bottom").getLength().mvalue(); + this.paddingRight = + this.properties.get("padding-right").getLength().mvalue(); + } + this.borderColor = + this.properties.get("border-color").getColorType(); + this.borderWidth = + this.properties.get("border-width").getLength().mvalue(); + this.borderStyle = + this.properties.get("border-style").getEnum(); + + this.id = + this.properties.get("id").getString(); + + if (area instanceof BlockArea) { + area.end(); + } + if (this.isInLabel) { + startIndent += bodyIndent; + endIndent += (area.getAllocationWidth() + - distanceBetweenStarts - startIndent) + + labelSeparation; + } + + if (this.isInListBody) { + startIndent += bodyIndent + distanceBetweenStarts; + } + + area.getIDReferences().createID(id); + + this.marker = 0; + + if (breakBefore == BreakBefore.PAGE) { + return new Status(Status.FORCE_PAGE_BREAK); + } + + if (breakBefore == BreakBefore.ODD_PAGE) { + return new Status(Status.FORCE_PAGE_BREAK_ODD); + } + + if (breakBefore == BreakBefore.EVEN_PAGE) { + return new Status(Status.FORCE_PAGE_BREAK_EVEN); + } + } + + if ((spaceBefore != 0) && (this.marker ==0)) { + area.addDisplaySpace(spaceBefore); + } + + if (anythingLaidOut) { + this.textIndent = 0; + } + + if ( marker==0 ) { + area.getIDReferences().configureID(id,area); + } + + this.blockArea = + new BlockArea(fs, area.getAllocationWidth(), + area.spaceLeft(), + startIndent, + endIndent, + textIndent, align, alignLast, lineHeight); + blockArea.setPage(area.getPage()); + blockArea.setBackgroundColor(backgroundColor); + blockArea.setPadding(paddingTop, paddingLeft, paddingBottom, + paddingRight); + blockArea.setBorderStyle(borderStyle, borderStyle, borderStyle, borderStyle); + blockArea.setBorderWidth(borderWidth, borderWidth, borderWidth, borderWidth); + blockArea.setBorderColor(borderColor, borderColor, borderColor, borderColor); + blockArea.start(); + + blockArea.setAbsoluteHeight(area.getAbsoluteHeight()); + blockArea.setIDReferences(area.getIDReferences()); + + blockArea.setTableCellXOffset(area.getTableCellXOffset()); + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FONode fo = (FONode) children.elementAt(i); + if (this.isInListBody) { + fo.setIsInListBody(); + fo.setDistanceBetweenStarts(this.distanceBetweenStarts); + fo.setBodyIndent(this.bodyIndent); + } + Status status; + if ((status = fo.layout(blockArea)).isIncomplete()) { + this.marker = i; + if ((i != 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + status = new Status(Status.AREA_FULL_SOME); + } + //blockArea.end(); + area.addChild(blockArea); + area.increaseHeight(blockArea.getHeight()); + area.setAbsoluteHeight(blockArea.getAbsoluteHeight()); + anythingLaidOut = true; + return status; + } + anythingLaidOut = true; + } + + blockArea.end(); + area.addChild(blockArea); + + /* should this be combined into above? */ + area.increaseHeight(blockArea.getHeight()); + + area.setAbsoluteHeight(blockArea.getAbsoluteHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + if (area instanceof BlockArea) { + area.start(); + } + + if (breakAfter == BreakAfter.PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK); + } + + if (breakAfter == BreakAfter.ODD_PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK_ODD); + } + + if (breakAfter == BreakAfter.EVEN_PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK_EVEN); + } + + if (keepWithNext == KeepWithNext.TRUE) { + return new Status(Status.KEEP_WITH_NEXT); + } + + //MessageHandler.error(" b:OK" + marker + " "); + return new Status(Status.OK); + } + + public int getAreaHeight() { + return blockArea.getHeight(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/BlockContainer.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/BlockContainer.java new file mode 100644 index 000000000..848acc2dd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/BlockContainer.java @@ -0,0 +1,224 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.fo.pagination.PageSequence; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.datatypes.*; + +// Java +import java.util.Hashtable; +import java.util.Enumeration; + +public class BlockContainer extends FObj { + + FontState fs; + ColorType backgroundColor; + int paddingTop; + int paddingBottom; + int paddingLeft; + int paddingRight; + int position; + + int top; + int bottom; + int left; + int right; + int width; + int height; + + ColorType borderColor; + int borderWidth; + int borderStyle; + + AreaContainer areaContainer; + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new BlockContainer(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new BlockContainer.Maker(); + } + + PageSequence pageSequence; + + protected BlockContainer(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:block-container"; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == START) { + this.marker = 0; + + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.paddingTop = + this.properties.get("padding").getLength().mvalue(); + this.paddingLeft = this.paddingTop; + this.paddingRight = this.paddingTop; + this.paddingBottom = this.paddingTop; + if (this.paddingTop == 0) { + this.paddingTop = + this.properties.get("padding-top").getLength().mvalue(); + this.paddingLeft = + this.properties.get("padding-left").getLength().mvalue(); + this.paddingBottom = + this.properties.get("padding-bottom").getLength().mvalue(); + this.paddingRight = + this.properties.get("padding-right").getLength().mvalue(); + } + + this.position = + this.properties.get("position").getEnum(); + this.top = + this.properties.get("top").getLength().mvalue(); + this.bottom = + this.properties.get("bottom").getLength().mvalue(); + this.left = + this.properties.get("left").getLength().mvalue(); + this.right = + this.properties.get("right").getLength().mvalue(); + this.width = + this.properties.get("width").getLength().mvalue(); + this.height = + this.properties.get("height").getLength().mvalue(); + + this.borderColor = + this.properties.get("border-color").getColorType(); + this.borderWidth = + this.properties.get("border-width").getLength().mvalue(); + this.borderStyle = + this.properties.get("border-style").getEnum(); + + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + } + + boolean prevChildMustKeepWithNext = false; + + AreaContainer container = (AreaContainer)area; + if ((this.width == 0) && (this.height == 0)) { + width = right - left; + height = bottom - top; + } + this.areaContainer = + new AreaContainer(fs, container.getXPosition() + left, container.getYPosition() - top, width, height, + position); + + areaContainer.setPage(area.getPage()); + areaContainer.setBackgroundColor(backgroundColor); + areaContainer.setPadding(paddingTop, paddingLeft, paddingBottom, + paddingRight); + areaContainer.setBorderStyle(borderStyle, borderStyle, borderStyle, borderStyle); + areaContainer.setBorderWidth(borderWidth, borderWidth, borderWidth, borderWidth); + areaContainer.setBorderColor(borderColor, borderColor, borderColor, borderColor); + areaContainer.start(); + + areaContainer.setAbsoluteHeight(area.getAbsoluteHeight()); + areaContainer.setIDReferences(area.getIDReferences()); + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FObj fo = (FObj) children.elementAt(i); + Status status; + if ((status = fo.layout(areaContainer)).isIncomplete()) { + /* + if ((prevChildMustKeepWithNext) && (status.laidOutNone())) { + this.marker = i - 1; + FObj prevChild = (FObj) children.elementAt(this.marker); + prevChild.removeAreas(); + prevChild.resetMarker(); + return new Status(Status.AREA_FULL_SOME); + // should probably return AREA_FULL_NONE if first + // or perhaps an entirely new status code + } else { + this.marker = i; + return status; + } + */ + } + if (status.getCode() == Status.KEEP_WITH_NEXT) { + prevChildMustKeepWithNext = true; + } + } + area.setAbsoluteHeight(areaContainer.getAbsoluteHeight()); + + areaContainer.end(); + if (position == Position.ABSOLUTE) + areaContainer.setHeight(height); + area.addChild(areaContainer); + + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/DisplaySequence.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/DisplaySequence.java new file mode 100644 index 000000000..79adfd79d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/DisplaySequence.java @@ -0,0 +1,99 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class DisplaySequence extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new DisplaySequence(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new DisplaySequence.Maker(); + } + + public DisplaySequence(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:display-sequence"; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == START) { + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + this.marker = 0; + } + // this is such common code, perhaps it should be in the super class + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FObj fo = (FObj) children.elementAt(i); + Status status; + if ((status = fo.layout(area)).isIncomplete()) { + this.marker = i; + } + return status; + } + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ExternalGraphic.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ExternalGraphic.java new file mode 100644 index 000000000..6df3a7a8a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ExternalGraphic.java @@ -0,0 +1,230 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +/* Modified by Eric SCHAEFFER */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; +import org.apache.fop.image.*; + +// Java +import java.util.Enumeration; +import java.util.Hashtable; +import java.net.URL; +import java.net.MalformedURLException; + +public class ExternalGraphic extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new ExternalGraphic(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new ExternalGraphic.Maker(); + } + + FontState fs; + int align; + int startIndent; + int endIndent; + int spaceBefore; + int spaceAfter; + String src; + int height; + int width; + String id; + + ImageArea imageArea; + + public ExternalGraphic(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:external-graphic"; + } + + public Status layout(Area area) throws FOPException { + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + // FIXME + this.align = this.properties.get("text-align").getEnum(); + + this.startIndent = + this.properties.get("start-indent").getLength().mvalue(); + this.endIndent = + this.properties.get("end-indent").getLength().mvalue(); + + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + + this.src = this.properties.get("src").getString(); + + this.width = + this.properties.get("width").getLength().mvalue(); + + this.height = + this.properties.get("height").getLength().mvalue(); + this.id = this.properties.get("id").getString(); + + area.getIDReferences().createID(id); + + if (area instanceof BlockArea) { + area.end(); + } + + if (this.isInLabel) { + startIndent += bodyIndent; + endIndent += (area.getAllocationWidth() + - distanceBetweenStarts - startIndent) + + labelSeparation; + } + + if (this.isInListBody) { + startIndent += bodyIndent + distanceBetweenStarts; + } + + if (this.isInTableCell) { + startIndent += forcedStartOffset; + endIndent = area.getAllocationWidth() - forcedWidth - + forcedStartOffset; + } + + this.marker = 0; + } + + try { + FopImage img = FopImageFactory.Make(src); + // if width / height needs to be computed + if ((width == 0) || (height == 0)) { + // aspect ratio + double imgWidth = img.getWidth(); + double imgHeight = img.getHeight(); + if ((width == 0) && (height == 0)) { + width = (int) ((imgWidth * 1000d) / 2d); + height = (int) ((imgHeight * 1000d) / 2d); + } else if (height == 0) { + height = (int) ((imgHeight * ((double) width)) / imgWidth); + } else if (width == 0) { + width = (int) ((imgWidth * ((double) height)) / imgHeight); + } +//MessageHandler.errorln("DisplayGraphic: imgW=" + imgWidth + " imgH=" + imgHeight + " w=" + width + " h=" + height); + } + + if (area.spaceLeft() < (height + spaceBefore)) { + return new Status(Status.AREA_FULL_NONE); + } + + this.imageArea = new ImageArea( + fs, + img, + area.getAllocationWidth(), + width, + height, + startIndent, + endIndent, + align + ); + + if ((spaceBefore != 0) && (this.marker == 0)) { + area.addDisplaySpace(spaceBefore); + } + + if (marker == 0) { + // configure id + area.getIDReferences().configureID(id,area); + } + + imageArea.start(); + imageArea.end(); + area.addChild(imageArea); + area.increaseHeight(imageArea.getHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + } catch (MalformedURLException urlex) { + // bad URL +MessageHandler.errorln("Error while creating area : " + urlex.getMessage()); + } catch (FopImageException imgex) { + // image error +MessageHandler.errorln("Error while creating area : " + imgex.getMessage()); + } + + if (area instanceof BlockArea) { + area.start(); + } + + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Flow.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Flow.java new file mode 100644 index 000000000..d7072635b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Flow.java @@ -0,0 +1,156 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.fo.pagination.PageSequence; +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Hashtable; +import java.util.Enumeration; + +public class Flow extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Flow(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new Flow.Maker(); + } + + PageSequence pageSequence; + protected String flowName; + protected Status currentStatus; + + protected Flow(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:flow"; + + currentStatus = new Status(Status.AREA_FULL_NONE); + + if (parent.getName().equals("fo:page-sequence")) { + this.pageSequence = (PageSequence) parent; + } else { + throw new FOPException("flow must be child of " + + "page-sequence, not " + + parent.getName()); + } + flowName = this.properties.get("flow-name").getString(); + if (flowName.equals("")) + { + throw new FOPException("A 'flow-name' is required for fo:flow"); + } + + pageSequence.setFlow(flowName, this); + } + + public Status layout(Area area) throws FOPException { + if (this.marker == START) { + this.marker = 0; + } + + boolean prevChildMustKeepWithNext = false; + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FObj fo = (FObj) children.elementAt(i); + Status status; + if ((status = fo.layout(area)).isIncomplete()) { + if ((prevChildMustKeepWithNext) && (status.laidOutNone())) { + this.marker = i - 1; + FObj prevChild = (FObj) children.elementAt(this.marker); + prevChild.removeAreas(); + prevChild.resetMarker(); + prevChild.removeID(area.getIDReferences()); + return new Status(Status.AREA_FULL_SOME); + // should probably return AREA_FULL_NONE if first + // or perhaps an entirely new status code + } else { + this.marker = i; + return status; + } + } + if (status.getCode() == Status.KEEP_WITH_NEXT) { + prevChildMustKeepWithNext = true; + } + else { + prevChildMustKeepWithNext = false; + } + + } + return new Status(Status.OK); + } + + public Status getCurrentStatus() + { + return currentStatus; + } + + public void setCurrentStatus(Status currentStatus) + { + this.currentStatus = currentStatus; + } + + public String getFlowName() + { + return flowName; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Inline.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Inline.java new file mode 100644 index 000000000..6a168d93d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Inline.java @@ -0,0 +1,85 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class Inline extends FObjMixed { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Inline(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new Inline.Maker(); + } + + public Inline(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:inline"; + + if (parent.getName().equals("fo:flow")) { + throw new FOPException("fo:inline can't be directly" + + " under flow"); + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/InlineGraphic.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/InlineGraphic.java new file mode 100644 index 000000000..e94836f0e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/InlineGraphic.java @@ -0,0 +1,230 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +/* Modified by Eric SCHAEFFER */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; +import org.apache.fop.image.*; + +// Java +import java.util.Enumeration; +import java.util.Hashtable; +import java.net.URL; +import java.net.MalformedURLException; + +public class InlineGraphic extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new InlineGraphic(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new InlineGraphic.Maker(); + } + + FontState fs; + int align; + int startIndent; + int endIndent; + int spaceBefore; + int spaceAfter; + String href; + int height; + int width; + String id; + + ImageArea imageArea; + + public InlineGraphic(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:inline-graphic"; + } + + public Status layout(Area area) throws FOPException { + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + // FIXME + this.align = this.properties.get("text-align").getEnum(); + + this.startIndent = + this.properties.get("start-indent").getLength().mvalue(); + this.endIndent = + this.properties.get("end-indent").getLength().mvalue(); + + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + + this.href = this.properties.get("href").getString(); + + this.width = + this.properties.get("width").getLength().mvalue(); + + this.height = + this.properties.get("height").getLength().mvalue(); + this.id = this.properties.get("id").getString(); + + area.getIDReferences().createID(id); + + if (area instanceof BlockArea) { + area.end(); + } + + if (this.isInLabel) { + startIndent += bodyIndent; + endIndent += (area.getAllocationWidth() + - distanceBetweenStarts - startIndent) + + labelSeparation; + } + + if (this.isInListBody) { + startIndent += bodyIndent + distanceBetweenStarts; + } + + if (this.isInTableCell) { + startIndent += forcedStartOffset; + endIndent = area.getAllocationWidth() - forcedWidth - + forcedStartOffset; + } + + this.marker = 0; + } + + try { + FopImage img = FopImageFactory.Make(href); + // if width / height needs to be computed + if ((width == 0) || (height == 0)) { + // aspect ratio + double imgWidth = img.getWidth(); + double imgHeight = img.getHeight(); + if ((width == 0) && (height == 0)) { + width = (int) ((imgWidth * 1000d) / 2d); + height = (int) ((imgHeight * 1000d) / 2d); + } else if (height == 0) { + height = (int) ((imgHeight * ((double) width)) / imgWidth); + } else if (width == 0) { + width = (int) ((imgWidth * ((double) height)) / imgHeight); + } +//MessageHandler.errorln("DisplayGraphic: imgW=" + imgWidth + " imgH=" + imgHeight + " w=" + width + " h=" + height); + } + + if (area.spaceLeft() < (height + spaceBefore)) { + return new Status(Status.AREA_FULL_NONE); + } + + this.imageArea = new ImageArea( + fs, + img, + area.getAllocationWidth(), + width, + height, + startIndent, + endIndent, + align + ); + + if ((spaceBefore != 0) && (this.marker == 0)) { + area.addDisplaySpace(spaceBefore); + } + + if (marker == 0) { + // configure id + area.getIDReferences().configureID(id,area); + } + + imageArea.start(); + imageArea.end(); + area.addChild(imageArea); + area.increaseHeight(imageArea.getHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + } catch (MalformedURLException urlex) { + // bad URL +MessageHandler.errorln("Error while creating area : " + urlex.getMessage()); + } catch (FopImageException imgex) { + // image error +MessageHandler.errorln("Error while creating area : " + imgex.getMessage()); + } + + if (area instanceof BlockArea) { + area.start(); + } + + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/InstreamForeignObject.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/InstreamForeignObject.java new file mode 100644 index 000000000..1a8a19ca7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/InstreamForeignObject.java @@ -0,0 +1,295 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class InstreamForeignObject extends FObj { + /** + * inner class for making SVG objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make an SVG object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the SVG object + */ + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new InstreamForeignObject(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG objects + */ + public static FObj.Maker maker() { + return new InstreamForeignObject.Maker(); + } + + FontState fs; + int breakBefore; + int breakAfter; + int scaling; + int width; + int height; + int contwidth; + int contheight; + boolean wauto; + boolean hauto; + boolean cwauto; + boolean chauto; + int spaceBefore; + int spaceAfter; + int startIndent; + int endIndent; + + ForeignObjectArea areaCurrent; + + /** + * constructs an instream-foreign-object object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + public InstreamForeignObject(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:instream-foreign-object"; + } + + /** + * layout this formatting object. + * + * @param area the area to layout the object into + * + * @return the status of the layout + */ + public Status layout(Area area) throws FOPException { + + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + /* retrieve properties */ + String id = this.properties.get("id").getString(); + String fontFamily = this.properties.get("font-family").getString(); + String fontStyle = this.properties.get("font-style").getString(); + String fontWeight = this.properties.get("font-weight").getString(); + int fontSize = this.properties.get("font-size").getLength().mvalue(); + int align = this.properties.get("text-align").getEnum(); + int valign = this.properties.get("vertical-align").getEnum(); + int overflow = this.properties.get("overflow").getEnum(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + this.breakBefore = this.properties.get("break-before").getEnum(); + this.breakAfter = this.properties.get("break-after").getEnum(); + this.width = this.properties.get("width").getLength().mvalue(); + this.height = this.properties.get("height").getLength().mvalue(); + this.contwidth = this.properties.get("content-width").getLength().mvalue(); + this.contheight = this.properties.get("content-height").getLength().mvalue(); + this.wauto = this.properties.get("width").getLength().isAuto(); + this.hauto = this.properties.get("height").getLength().isAuto(); + this.cwauto = this.properties.get("content-width").getLength().isAuto(); + this.chauto = this.properties.get("content-height").getLength().isAuto(); + + this.startIndent = + this.properties.get("start-indent").getLength().mvalue(); + this.endIndent = + this.properties.get("end-indent").getLength().mvalue(); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + + this.scaling = this.properties.get("scaling").getEnum(); + + area.getIDReferences().createID(id); + /* if is embedded in a block area */ + if (area instanceof BlockArea) { + /* temporarily end the block area */ + area.end(); + } + if(this.areaCurrent == null) { + this.areaCurrent = + new ForeignObjectArea(fs, area.getAllocationWidth(), area.spaceLeft()); + + this.areaCurrent.start(); + areaCurrent.setWidth(this.width); + areaCurrent.setHeight(this.height); + areaCurrent.setContentWidth(this.contwidth); + areaCurrent.setContentHeight(this.contheight); + areaCurrent.setScaling(this.scaling); + areaCurrent.setAlign(align); + areaCurrent.setVerticalAlign(valign); + areaCurrent.setOverflow(overflow); + areaCurrent.setSizeAuto(wauto, hauto); + areaCurrent.setContentSizeAuto(cwauto, chauto); + + // this means that children can get the fontstate + areaCurrent.setPage(area.getPage()); + + int numChildren = this.children.size(); + if(numChildren > 1) { + throw new FOPException("Only one child element is allowed in an instream-foreign-object"); + } + /* layout foreign object */ + if(this.children.size() > 0) { + FONode fo = (FONode) children.elementAt(0); + Status status; + // currently FONode must be an SVG + if ((status = fo.layout(this.areaCurrent)).isIncomplete()) { + return status; + } + + /* finish off the foreign object area */ + this.areaCurrent.end(); + } + } + + this.marker = 0; + + if (breakBefore == BreakBefore.PAGE || ((spaceBefore + areaCurrent.getEffectiveHeight()) > area.spaceLeft())) { + return new Status(Status.FORCE_PAGE_BREAK); + } + + if (breakBefore == BreakBefore.ODD_PAGE) { + return new Status(Status.FORCE_PAGE_BREAK_ODD); + } + + if (breakBefore == BreakBefore.EVEN_PAGE) { + return new Status(Status.FORCE_PAGE_BREAK_EVEN); + } + } + + if (this.isInLabel) { + startIndent += bodyIndent; +/* endIndent += (areaCurrent.getEffectiveWidth() + - distanceBetweenStarts - startIndent) + + labelSeparation;*/ + } + + if (this.isInListBody) { + startIndent += bodyIndent + distanceBetweenStarts; + } + + if (this.isInTableCell) { + startIndent += forcedStartOffset; +/* endIndent = areaCurrent.getEffectiveWidth() - forcedWidth - + forcedStartOffset;*/ + } + + areaCurrent.setStartIndent(startIndent); +// areaCurrent.setEndIndent(endIndent); + + /* if there is a space-before */ + if (spaceBefore != 0) { + /* add a display space */ + area.addDisplaySpace(spaceBefore); + } + + /* add the SVG area to the containing area */ + area.addChild(areaCurrent); + + areaCurrent.setPage(area.getPage()); + + /* increase the height of the containing area accordingly */ + area.increaseHeight(areaCurrent.getEffectiveHeight()); + + /* if there is a space-after */ + if (spaceAfter != 0) { + /* add a display space */ + area.addDisplaySpace(spaceAfter); + } + + /* if is embedded in a block area */ + if (area instanceof BlockArea) { + /* re-start the block area */ + area.start(); + } + + if (breakAfter == BreakAfter.PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK); + } + + if (breakAfter == BreakAfter.ODD_PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK_ODD); + } + + if (breakAfter == BreakAfter.EVEN_PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK_EVEN); + } + + /* return status */ + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Leader.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Leader.java new file mode 100644 index 000000000..0f07a6ffa --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Leader.java @@ -0,0 +1,183 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.RuleArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +/** + * This is just a basic implementation mostly based on the code of display-rule + * It only supports the property leader-pattern="rule", nothing else, not even + * leader-pattern="space" + * + */ + +public class Leader extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Leader(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new Leader.Maker(); + } + + public Leader(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:leader"; + } + + public Status layout(Area area) throws FOPException { + + String fontFamily = this.properties.get("font-family").getString(); + String fontStyle = this.properties.get("font-style").getString(); + String fontWeight = this.properties.get("font-weight").getString(); + int fontSize = this.properties.get("font-size").getLength().mvalue(); + + FontState fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + int align = this.properties.get("text-align").getEnum(); + int startIndent = + this.properties.get("start-indent").getLength().mvalue(); + int endIndent = + this.properties.get("end-indent").getLength().mvalue(); + int spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + int spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + int ruleThickness = + this.properties.get("rule-thickness").getLength().mvalue(); + int ruleLength = this.properties.get("leader-length").getLength().mvalue(); + int leaderPattern = this.properties.get("leader-pattern").getEnum(); + + + ColorType c = this.properties.get("color").getColorType(); + float red = c.red(); + float green = c.green(); + float blue = c.blue(); + + if (area instanceof BlockArea) { + area.end(); + } + + if (spaceBefore != 0) { + area.addDisplaySpace(spaceBefore); + } + + if (this.isInLabel) { + startIndent += bodyIndent; + endIndent += (area.getAllocationWidth() - + distanceBetweenStarts - startIndent) + + labelSeparation; + } + + if (this.isInListBody) { + startIndent += bodyIndent + distanceBetweenStarts; + } + + if (this.isInTableCell) { + startIndent += forcedStartOffset; + endIndent += area.getAllocationWidth() - forcedWidth - + forcedStartOffset; + } + + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + + switch (leaderPattern) { + case LeaderPattern.SPACE: + ruleThickness = 0; + MessageHandler.errorln("leader-pattern=\"space\" not supported by this version of Fop"); + break; + case LeaderPattern.RULE: + break; + case LeaderPattern.DOTS: + MessageHandler.errorln("leader-pattern=\"dots\" not supported by this version of Fop"); + break; + case LeaderPattern.USECONTENT: + MessageHandler.errorln("leader-pattern=\"use-content\" not supported by this version of Fop"); + break; + } + RuleArea ruleArea = new RuleArea(fs, + area.getAllocationWidth(), + area.spaceLeft(), + startIndent, endIndent, + align, ruleThickness, + ruleLength, red, green, + blue); + + area.addChild(ruleArea); + area.increaseHeight(ruleArea.getHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + if (area instanceof BlockArea) { + area.start(); + } + + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListBlock.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListBlock.java new file mode 100644 index 000000000..91e927cb6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListBlock.java @@ -0,0 +1,208 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class ListBlock extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new ListBlock(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new ListBlock.Maker(); + } + + FontState fs; + int align; + int alignLast; + int breakBefore; + int breakAfter; + int lineHeight; + int startIndent; + int endIndent; + int spaceBefore; + int spaceAfter; + int provisionalDistanceBetweenStarts; + int provisionalLabelSeparation; + int spaceBetweenListRows = 0; + ColorType backgroundColor; + + public ListBlock(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:list-block"; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + this.align = this.properties.get("text-align").getEnum(); + this.alignLast = + this.properties.get("text-align-last").getEnum(); + this.lineHeight = + this.properties.get("line-height").getLength().mvalue(); + this.startIndent = + this.properties.get("start-indent").getLength().mvalue(); + this.endIndent = + this.properties.get("end-indent").getLength().mvalue(); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.provisionalDistanceBetweenStarts = + this.properties.get("provisional-distance-between-starts").getLength().mvalue(); + this.provisionalLabelSeparation = + this.properties.get("provisional-label-separation").getLength().mvalue(); + this.spaceBetweenListRows = 0; // not used at present + this.backgroundColor = + this.properties.get("background-color").getColorType(); + + this.marker = 0; + + if (area instanceof BlockArea) { + area.end(); + } + + if (spaceBefore != 0) { + area.addDisplaySpace(spaceBefore); + } + + if (this.isInListBody) { + startIndent += bodyIndent + distanceBetweenStarts; + bodyIndent = startIndent; + } + + if (this.isInTableCell) { + startIndent += forcedStartOffset; + endIndent += area.getAllocationWidth() - forcedWidth - + forcedStartOffset; + } + + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + } + + BlockArea blockArea = + new BlockArea(fs, area.getAllocationWidth(), + area.spaceLeft(), startIndent, endIndent, 0, + align, alignLast, lineHeight); + blockArea.setPage(area.getPage()); + blockArea.setBackgroundColor(backgroundColor); + blockArea.start(); + + blockArea.setAbsoluteHeight(area.getAbsoluteHeight()); + blockArea.setIDReferences(area.getIDReferences()); + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + if (!(children.elementAt(i) instanceof ListItem)) { + MessageHandler.errorln("WARNING: This version of FOP requires list-items inside list-blocks"); + return new Status(Status.OK); + } + ListItem listItem = (ListItem) children.elementAt(i); + listItem.setDistanceBetweenStarts(this.provisionalDistanceBetweenStarts); + listItem.setLabelSeparation(this.provisionalLabelSeparation); + listItem.setBodyIndent(this.bodyIndent); + Status status; + if ((status = listItem.layout(blockArea)).isIncomplete()) { + this.marker = i; + blockArea.end(); + area.addChild(blockArea); + area.increaseHeight(blockArea.getHeight()); + area.setAbsoluteHeight(blockArea.getAbsoluteHeight()); + return status; + } + } + + blockArea.end(); + area.addChild(blockArea); + area.increaseHeight(blockArea.getHeight()); + area.setAbsoluteHeight(blockArea.getAbsoluteHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + if (area instanceof BlockArea) { + area.start(); + } + + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItem.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItem.java new file mode 100644 index 000000000..541687fea --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItem.java @@ -0,0 +1,208 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.BlockArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class ListItem extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new ListItem(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new ListItem.Maker(); + } + + FontState fs; + int align; + int alignLast; + int breakBefore; + int breakAfter; + int lineHeight; + int startIndent; + int endIndent; + int spaceBefore; + int spaceAfter; + String id; + + public ListItem(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:list-item"; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + this.align = this.properties.get("text-align").getEnum(); + this.alignLast = + this.properties.get("text-align-last").getEnum(); + this.lineHeight = + this.properties.get("line-height").getLength().mvalue(); + this.startIndent = + this.properties.get("start-indent").getLength().mvalue(); + this.endIndent = + this.properties.get("end-indent").getLength().mvalue(); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.id = + this.properties.get("id").getString(); + + area.getIDReferences().createID(id); + + this.marker = 0; + } + + /* not sure this is needed given we know area is from list block */ + if (area instanceof BlockArea) { + area.end(); + } + + if (spaceBefore != 0) { + area.addDisplaySpace(spaceBefore); + } + + startIndent += this.bodyIndent; + + BlockArea blockArea = + new BlockArea(fs, area.getAllocationWidth(), + area.spaceLeft(), startIndent, endIndent, + 0, align, alignLast, lineHeight); + blockArea.setPage(area.getPage()); + blockArea.start(); + + blockArea.setAbsoluteHeight(area.getAbsoluteHeight()); + blockArea.setIDReferences(area.getIDReferences()); + + int numChildren = this.children.size(); + if (numChildren != 2) { + throw new FOPException("list-item must have exactly two children"); + } + ListItemLabel label = (ListItemLabel) children.elementAt(0); + ListItemBody body = (ListItemBody) children.elementAt(1); + + label.setDistanceBetweenStarts(this.distanceBetweenStarts); + label.setLabelSeparation(this.labelSeparation); + label.setBodyIndent(this.bodyIndent); + + body.setDistanceBetweenStarts(this.distanceBetweenStarts); + body.setBodyIndent(this.bodyIndent); + + /* this doesn't actually do anything */ + body.setLabelSeparation(this.labelSeparation); + + Status status; + + // what follows doesn't yet take into account whether the + // body failed completely or only got some text in + + if (this.marker == 0) { + // configure id + area.getIDReferences().configureID(id,area); + + status = label.layout(blockArea); + if (status.isIncomplete()) { + return status; + } + } + + status = body.layout(blockArea); + if (status.isIncomplete()) { + blockArea.end(); + area.addChild(blockArea); + area.increaseHeight(blockArea.getHeight()); + area.setAbsoluteHeight(blockArea.getAbsoluteHeight()); + this.marker = 1; + return status; + } + + blockArea.end(); + area.addChild(blockArea); + area.increaseHeight(blockArea.getHeight()); + area.setAbsoluteHeight(blockArea.getAbsoluteHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + /* not sure this is needed given we know area is from list block */ + if (area instanceof BlockArea) { + area.start(); + } + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemBody.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemBody.java new file mode 100644 index 000000000..b98b33db4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemBody.java @@ -0,0 +1,109 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class ListItemBody extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new ListItemBody(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new ListItemBody.Maker(); + } + + public ListItemBody(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:list-item-body"; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == START) { + this.marker = 0; + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + } + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FObj fo = (FObj) children.elementAt(i); + fo.setIsInListBody(); + fo.setDistanceBetweenStarts(this.distanceBetweenStarts); + fo.setLabelSeparation(this.labelSeparation); + fo.setBodyIndent(this.bodyIndent); + Status status; + if ((status = fo.layout(area)).isIncomplete()) { + this.marker = i; + if ((i == 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + return new Status(Status.AREA_FULL_NONE); + } else { + return new Status(Status.AREA_FULL_SOME); + } + } + } + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemLabel.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemLabel.java new file mode 100644 index 000000000..b06eb7d73 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/ListItemLabel.java @@ -0,0 +1,105 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class ListItemLabel extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new ListItemLabel(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new ListItemLabel.Maker(); + } + + public ListItemLabel(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:list-item-label"; + } + + public Status layout(Area area) throws FOPException { + int numChildren = this.children.size(); + + if (numChildren != 1) { + throw new FOPException("list-item-label must have exactly one block in this version of FOP"); + } + + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + + Block block = (Block) children.elementAt(0); + + block.setIsInLabel(); + block.setDistanceBetweenStarts(this.distanceBetweenStarts); + block.setLabelSeparation(this.labelSeparation); + block.setBodyIndent(this.bodyIndent); + + Status status; + status = block.layout(area); + area.addDisplaySpace(-block.getAreaHeight()); + return status; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumber.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumber.java new file mode 100644 index 000000000..95bebb675 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumber.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.datatypes.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class PageNumber extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new PageNumber(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new PageNumber.Maker(); + } + + FontState fs; + float red; + float green; + float blue; + int wrapOption; + int whiteSpaceTreatment; + + public PageNumber(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:page-number"; + } + + public Status layout(Area area) throws FOPException { + if (!(area instanceof BlockArea)) { + MessageHandler.errorln("WARNING: page-number outside block area"); + return new Status(Status.OK); + } + if (this.marker == START) { + String fontFamily = this.properties.get("font-family").getString(); + String fontStyle = this.properties.get("font-style").getString(); + String fontWeight = this.properties.get("font-weight").getString(); + int fontSize = this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + ColorType c = this.properties.get("color").getColorType(); + this.red = c.red(); + this.green = c.green(); + this.blue = c.blue(); + + this.wrapOption = this.properties.get("wrap-option").getEnum(); + this.whiteSpaceTreatment = this.properties.get("white-space-treatment").getEnum(); + + this.marker = 0; + + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + } + + String p = Integer.toString(area.getPage().getNumber()); + this.marker = ((BlockArea) area).addText(fs, red, green, blue, + wrapOption, + null, + whiteSpaceTreatment, + p.toCharArray(), 0, + p.length()); + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumberCitation.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumberCitation.java new file mode 100644 index 000000000..c437ed334 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/PageNumberCitation.java @@ -0,0 +1,214 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.pagination.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; + + +/** +* 6.6.11 fo:page-number-citation +* +* Common Usage: +* The fo:page-number-citation is used to reference the page-number for the page containing the first normal area returned by +* the cited formatting object. +* +* NOTE: +* It may be used to provide the page-numbers in the table of contents, cross-references, and index entries. +* +* Areas: +* The fo:page-number-citation formatting object generates and returns a single normal inline-area. +* Constraints: +* +* The cited page-number is the number of the page containing, as a descendant, the first normal area returned by the +* formatting object with an id trait matching the ref-id trait of the fo:page-number-citation (the referenced formatting +* object). +* +* The cited page-number string is obtained by converting the cited page-number in accordance with the number to string +* conversion properties specified on the ancestor fo:page-sequence of the referenced formatting object. +* +* The child areas of the generated inline-area are the same as the result of formatting a result-tree fragment consisting of +* fo:character flow objects; one for each character in the cited page-number string and with only the "character" property +* specified. +* +* Contents: +* +* EMPTY +* +* The following properties apply to this formatting object: +* +* [7.3 Common Accessibility Properties] +* [7.5 Common Aural Properties] +* [7.6 Common Border, Padding, and Background Properties] +* [7.7 Common Font Properties] +* [7.10 Common Margin Properties-Inline] +* [7.11.1 "alignment-adjust"] +* [7.11.2 "baseline-identifier"] +* [7.11.3 "baseline-shift"] +* [7.11.5 "dominant-baseline"] +* [7.36.2 "id"] +* [7.17.4 "keep-with-next"] +* [7.17.5 "keep-with-previous"] +* [7.14.2 "letter-spacing"] +* [7.13.4 "line-height"] +* [7.13.5 "line-height-shift-adjustment"] +* [7.36.5 "ref-id"] +* [7.18.4 "relative-position"] +* [7.36.6 "score-spaces"] +* [7.14.4 "text-decoration"] +* [7.14.5 "text-shadow"] +* [7.14.6 "text-transform"] +* [7.14.8 "word-spacing"] +*/ +public class PageNumberCitation extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new PageNumberCitation(parent, propertyList); + } + } + + public static FObj.Maker maker() + { + return new PageNumberCitation.Maker(); + } + + FontState fs; + float red; + float green; + float blue; + int wrapOption; + int whiteSpaceTreatment; + Area area; + String pageNumber; + String refId; + String id; + + + public PageNumberCitation(FObj parent, PropertyList propertyList) + { + super(parent, propertyList); + this.name = "fo:page-number-citation"; + } + + + public Status layout(Area area) throws FOPException + { + if ( !(area instanceof BlockArea) ) { + MessageHandler.errorln("WARNING: page-number-citation outside block area"); + return new Status(Status.OK); + } + + IDReferences idReferences = area.getIDReferences(); + this.area = area; + if ( this.marker == START ) { + String fontFamily = this.properties.get("font-family").getString(); + String fontStyle = this.properties.get("font-style").getString(); + String fontWeight = this.properties.get("font-weight").getString(); + int fontSize = this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, fontStyle, fontWeight, fontSize); + + ColorType c = this.properties.get("color").getColorType(); + this.red = c.red(); + this.green = c.green(); + this.blue = c.blue(); + + this.wrapOption = this.properties.get("wrap-option").getEnum(); + this.whiteSpaceTreatment = this.properties.get("white-space-treatment").getEnum(); + + this.refId = this.properties.get("ref-id").getString(); + + if ( this.refId.equals("") ) { + throw new FOPException("page-number-citation must contain \"ref-id\""); + } + + // create id + this.id = this.properties.get("id").getString(); + idReferences.createID(id); + + this.marker = 0; + } + + if ( marker == 0 ) { + idReferences.configureID(id,area); + } + + + pageNumber=idReferences.getPageNumber(refId); + + if ( pageNumber!=null ) { // if we already know the page number + this.marker = ((BlockArea) area).addText(fs, red, green, blue, wrapOption, null, whiteSpaceTreatment, pageNumber.toCharArray(), 0, pageNumber.length()); + } + else { // add pageNumberCitation to area to be resolved during rendering + this.marker = ((BlockArea) area).addPageNumberCitation(fs, red, green, blue, wrapOption, null, whiteSpaceTreatment, refId); + } + + + if ( this.marker == -1 ) { + return new Status(Status.OK); + } + else { + return new Status(Status.AREA_FULL_NONE); + } + + } + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/SimpleLink.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/SimpleLink.java new file mode 100644 index 000000000..64e5f0a05 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/SimpleLink.java @@ -0,0 +1,149 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +/* this class contributed by Arved Sandstrom with minor modifications + by James Tauber */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.datatypes.ColorType; + +// Java +import java.util.Enumeration; +import java.awt.Rectangle; + +public class SimpleLink extends FObjMixed { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new SimpleLink(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new SimpleLink.Maker(); + } + + public SimpleLink(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:simple-link"; + + if (parent.getName().equals("fo:flow")) { + throw new FOPException("simple-link can't be directly" + + " under flow"); + } + } + + public Status layout(Area area) throws FOPException { + String destination; + int linkType; + + if ( !(destination = this.properties.get("internal-destination").getString()).equals("")) + { + linkType=LinkSet.INTERNAL; + } + else if ( !(destination = this.properties.get("external-destination").getString()).equals("") ) + { + linkType=LinkSet.EXTERNAL; + } + else + { + throw new FOPException("internal-destination or external-destination must be specified in simple-link"); + } + + if (this.marker == START) { + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + this.marker = 0; + } + + // new LinkedArea to gather up inlines + LinkSet ls = new LinkSet(destination, area, linkType); + + Page p = area.getPage(); + + // assumption - AS + // should be able to retrieve this from somewhere - JT + AreaContainer ac = p.getBody(); + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FONode fo = (FONode) children.elementAt(i); + fo.setLinkSet(ls); + + Status status; + if ((status = fo.layout(area)).isIncomplete()) { + this.marker = i; + return status; + } + } + + ls.applyAreaContainerOffsets(ac, area); + + // pass on command line + String mergeLinks = System.getProperty( "links.merge" ); + if ((null != mergeLinks) && !mergeLinks.equalsIgnoreCase("no")) { + ls.mergeLinks(); + } + + p.addLinkSet(ls); + + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/StaticContent.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/StaticContent.java new file mode 100644 index 000000000..dcc829a64 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/StaticContent.java @@ -0,0 +1,141 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.fo.pagination.PageSequence; +import org.apache.fop.layout.Area; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Enumeration; + +public class StaticContent extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new StaticContent(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new StaticContent.Maker(); + } + + PageSequence pageSequence; + String regionClass; + + protected StaticContent(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:static-content"; + + if (parent.getName().equals("fo:page-sequence")) { + this.pageSequence = (PageSequence) parent; + } else { + throw new FOPException("static-content must be child of " + + "fo:page-sequence, not " + + parent.getName()); + } + String flowName = this.properties.get("flow-name").getString(); + if (flowName.equals("")) + { + throw new FOPException("A 'flow-name' is required for " + + "fo:static-content"); + } + + regionClass = pageSequence.setStaticContent(flowName, this); + } + + public Status layout(Area area) throws FOPException { + + int numChildren = this.children.size(); + // Set area absolute height so that link rectangles will be drawn correctly in xsl-before and xsl-after + /* + String flowName = this.properties.get("flow-name").getString(); + if(flowName.equals("xsl-region-before")) + { + area.setAbsoluteHeight(-area.getMaxHeight()); + } + else if(flowName.equals("xsl-region-after")) + { + area.setAbsoluteHeight(area.getPage().getBody().getMaxHeight()); + } + */ + if(regionClass.equals("before")) + { + area.setAbsoluteHeight(-area.getMaxHeight()); + } + else if(regionClass.equals("after")) + { + area.setAbsoluteHeight(area.getPage().getBody().getMaxHeight()); + } + + for (int i = 0; i < numChildren; i++) { + FObj fo = (FObj) children.elementAt(i); + + Status status; + if ((status = fo.layout(area)).isIncomplete()) { + this.marker = i; + if ((i != 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + status = new Status(Status.AREA_FULL_SOME); + } + return(status); + } +// fo.layout(area); + } + resetMarker(); + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Table.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Table.java new file mode 100644 index 000000000..1da227493 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/Table.java @@ -0,0 +1,275 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Vector; + +public class Table extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Table(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new Table.Maker(); + } + + FontState fs; + int breakBefore; + int breakAfter; + int spaceBefore; + int spaceAfter; + ColorType backgroundColor; + int width; + int height; + ColorType borderColor; + int borderWidth; + int borderStyle; + String id; + + Vector columns = new Vector(); + int currentColumnNumber = 0; + + AreaContainer areaContainer; + + public Table(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:table"; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.breakBefore = + this.properties.get("break-before").getEnum(); + this.breakAfter = + this.properties.get("break-after").getEnum(); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.width = + this.properties.get("width").getLength().mvalue(); + this.height = + this.properties.get("height").getLength().mvalue(); + + this.borderColor = + this.properties.get("border-color").getColorType(); + this.borderWidth = + this.properties.get("border-width").getLength().mvalue(); + this.borderStyle = + this.properties.get("border-style").getEnum(); + this. id = + this.properties.get("id").getString(); + + if (area instanceof BlockArea) { + area.end(); + } + + area.getIDReferences().createID(id); + + this.marker = 0; + + if (breakBefore == BreakBefore.PAGE) { + return new Status(Status.FORCE_PAGE_BREAK); + } + + if (breakBefore == BreakBefore.ODD_PAGE) { + return new Status(Status.FORCE_PAGE_BREAK_ODD); + } + + if (breakBefore == BreakBefore.EVEN_PAGE) { + return new Status(Status.FORCE_PAGE_BREAK_EVEN); + } + } + + if ((spaceBefore != 0) && (this.marker ==0)) { + area.addDisplaySpace(spaceBefore); + } + + if ( marker==0 ) { + // configure id + area.getIDReferences().configureID(id,area); + } + + this.areaContainer = + new AreaContainer(fs, 0, 0, area.getAllocationWidth(), + area.spaceLeft(), Position.STATIC); + areaContainer.setPage(area.getPage()); + areaContainer.setBackgroundColor(backgroundColor); + areaContainer.setBorderStyle(borderStyle, borderStyle, borderStyle, borderStyle); + areaContainer.setBorderWidth(borderWidth, borderWidth, borderWidth, borderWidth); + areaContainer.setBorderColor(borderColor, borderColor, borderColor, borderColor); + areaContainer.start(); + + areaContainer.setAbsoluteHeight(area.getAbsoluteHeight()); + areaContainer.setIDReferences(area.getIDReferences()); + + // added by Eric Schaeffer + currentColumnNumber = 0; + int offset = 0; + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FONode fo = (FONode) children.elementAt(i); + if (fo instanceof TableColumn) { + TableColumn c = (TableColumn) fo; + int num = c.getColumnNumber(); + if (num == 0) { + num = currentColumnNumber + 1; + } + currentColumnNumber = num; + if (num > columns.size()) { + columns.setSize(num); + } + columns.setElementAt(c, num-1); + c.setColumnOffset(offset); + fo.layout(areaContainer); + offset += c.getColumnWidth(); + } else if (fo instanceof TableBody) { + if (columns.size() == 0) { + MessageHandler.errorln("WARNING: current implementation of tables requires a table-column for each column, indicating column-width"); + return new Status(Status.OK); + } + + ((TableBody) fo).setColumns(columns); + + Status status; + if ((status = fo.layout(areaContainer)).isIncomplete()) { + this.marker = i; + if ((i != 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + status = new Status(Status.AREA_FULL_SOME); + } + //areaContainer.end(); + area.addChild(areaContainer); + area.increaseHeight(areaContainer.getHeight()); + area.setAbsoluteHeight(areaContainer.getAbsoluteHeight()); + return status; + } + } + } + if (height != 0) + areaContainer.setHeight(height); + + for (int i = 0; i < numChildren; i++) { + FONode fo = (FONode) children.elementAt(i); + if (fo instanceof TableColumn) { + ((TableColumn)fo).setHeight(areaContainer.getHeight()); + } + } + + areaContainer.end(); + area.addChild(areaContainer); + + /* should this be combined into above? */ + area.increaseHeight(areaContainer.getHeight()); + + area.setAbsoluteHeight(areaContainer.getAbsoluteHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + if (area instanceof BlockArea) { + area.start(); + } + + if (breakAfter == BreakAfter.PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK); + } + + if (breakAfter == BreakAfter.ODD_PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK_ODD); + } + + if (breakAfter == BreakAfter.EVEN_PAGE) { + this.marker = BREAK_AFTER; + return new Status(Status.FORCE_PAGE_BREAK_EVEN); + } + + return new Status(Status.OK); + } + + public int getAreaHeight() { + return areaContainer.getHeight(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableBody.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableBody.java new file mode 100644 index 000000000..d5139c948 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableBody.java @@ -0,0 +1,197 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Vector; + +public class TableBody extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new TableBody(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new TableBody.Maker(); + } + + FontState fs; + int spaceBefore; + int spaceAfter; + ColorType backgroundColor; + String id; + + Vector columns; + + AreaContainer areaContainer; + + public TableBody(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:table-body"; + } + + public void setColumns(Vector columns) { + this.columns = columns; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.id = + this.properties.get("id").getString(); + + area.getIDReferences().createID(id); + + if (area instanceof BlockArea) { + area.end(); + } + + //if (this.isInListBody) { + //startIndent += bodyIndent + distanceBetweenStarts; + //} + + this.marker = 0; + + } + + if ((spaceBefore != 0) && (this.marker ==0)) { + area.addDisplaySpace(spaceBefore); + } + + if ( marker==0 ) { + // configure id + area.getIDReferences().configureID(id,area); + } + + this.areaContainer = + new AreaContainer(fs, -area.borderWidthLeft, -area.borderWidthTop, area.getAllocationWidth(), + area.spaceLeft(), Position.RELATIVE); + areaContainer.setPage(area.getPage()); + areaContainer.setBackgroundColor(backgroundColor); + areaContainer.start(); + + areaContainer.setAbsoluteHeight(area.getAbsoluteHeight()); + areaContainer.setIDReferences(area.getIDReferences()); + + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + TableRow row = (TableRow) children.elementAt(i); + + row.setColumns(columns); + + Status status; + if ((status = row.layout(areaContainer)).isIncomplete()) { + this.marker = i; + if ((i != 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + status = new Status(Status.AREA_FULL_SOME); + } + area.addChild(areaContainer); + //areaContainer.end(); + + area.increaseHeight(areaContainer.getHeight()); + area.setAbsoluteHeight(areaContainer.getAbsoluteHeight()); + return status; + } + } + area.addChild(areaContainer); + areaContainer.end(); + + /* should this be combined into above? */ + area.increaseHeight(areaContainer.getHeight()); + + area.setAbsoluteHeight(areaContainer.getAbsoluteHeight()); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + if (area instanceof BlockArea) { + area.start(); + } + + return new Status(Status.OK); + } + + public int getAreaHeight() { + return areaContainer.getHeight(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableCell.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableCell.java new file mode 100644 index 000000000..24eec8ebe --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableCell.java @@ -0,0 +1,223 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.datatypes.*; + +public class TableCell extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new TableCell(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new TableCell.Maker(); + } + + int spaceBefore; + int spaceAfter; + ColorType backgroundColor; + + FontState fs; + ColorType borderColor; + int borderWidth; + int borderStyle; + int paddingTop; + int paddingBottom; + int paddingLeft; + int paddingRight; + int position; + String id; + + protected int startOffset; + protected int width; + protected int height = 0; + + AreaContainer areaContainer; + + public TableCell(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:table-cell"; + } + + public void setStartOffset(int offset) { + startOffset = offset; + } + + public void setWidth(int width) { + this.width = width; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.borderColor = + this.properties.get("border-color").getColorType(); + this.borderWidth = + this.properties.get("border-width").getLength().mvalue(); + this.borderStyle = + this.properties.get("border-style").getEnum(); + this.paddingTop = + this.properties.get("padding").getLength().mvalue(); + this.paddingLeft = this.paddingTop; + this.paddingRight = this.paddingTop; + this.paddingBottom = this.paddingTop; + if (this.paddingTop == 0) { + this.paddingTop = + this.properties.get("padding-top").getLength().mvalue(); + this.paddingLeft = + this.properties.get("padding-left").getLength().mvalue(); + this.paddingBottom = + this.properties.get("padding-bottom").getLength().mvalue(); + this.paddingRight = + this.properties.get("padding-right").getLength().mvalue(); + } + + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.id = + this.properties.get("id").getString(); + + if (area instanceof BlockArea) { + area.end(); + } + + //if (this.isInListBody) { + //startIndent += bodyIndent + distanceBetweenStarts; + //} + + area.getIDReferences().createID(id); + + this.marker = 0; + + } + + if ((spaceBefore != 0) && (this.marker ==0)) { + area.addDisplaySpace(spaceBefore); + } + + if ( marker==0 ) { + // configure id + area.getIDReferences().configureID(id,area); + } + + this.areaContainer = + new AreaContainer(fs, startOffset - area.borderWidthLeft, + - area.borderWidthTop, + width, area.spaceLeft(), Position.RELATIVE); + areaContainer.setPage(area.getPage()); + areaContainer.setPadding(paddingTop, paddingLeft, paddingBottom, + paddingRight); + areaContainer.setBackgroundColor(backgroundColor); + areaContainer.setBorderStyle(borderStyle, borderStyle, borderStyle, borderStyle); + areaContainer.setBorderWidth(borderWidth, borderWidth, borderWidth, borderWidth); + areaContainer.setBorderColor(borderColor, borderColor, borderColor, borderColor); + areaContainer.start(); + + areaContainer.setAbsoluteHeight(area.getAbsoluteHeight()); + areaContainer.setIDReferences(area.getIDReferences()); + areaContainer.setTableCellXOffset(startOffset); + int numChildren = this.children.size(); + for (int i = this.marker; i < numChildren; i++) { + FObj fo = (FObj) children.elementAt(i); + fo.setIsInTableCell(); + fo.forceWidth(width); + Status status; + if ((status = fo.layout(areaContainer)).isIncomplete()) { + this.marker = i; + if ((i == 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + return new Status(Status.AREA_FULL_NONE); + } else { + return new Status(Status.AREA_FULL_SOME); + } + } + } + areaContainer.end(); + area.addChild(areaContainer); + + return new Status(Status.OK); + } + + public int getHeight() { + return areaContainer.getHeight(); + } + + public void setHeight(int height) { + areaContainer.setMaxHeight(height); + areaContainer.setHeight(height); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableColumn.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableColumn.java new file mode 100644 index 000000000..2efa937cb --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableColumn.java @@ -0,0 +1,153 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.datatypes.*; + +public class TableColumn extends FObj { + + FontState fs; + ColorType backgroundColor; + ColorType borderColor; + int borderWidth; + int borderStyle; + int columnWidth; + int columnOffset; + + AreaContainer areaContainer; + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new TableColumn(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new TableColumn.Maker(); + } + + public TableColumn(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:table-column"; + } + + public int getColumnWidth() { + return columnWidth; + } + + public int getColumnNumber() { + return 0; // not implemented yet + } + + public Status layout(Area area) throws FOPException { + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.borderColor = + this.properties.get("border-color").getColorType(); + this.borderWidth = + this.properties.get("border-width").getLength().mvalue(); + this.borderStyle = + this.properties.get("border-style").getEnum(); + this.columnWidth = + this.properties.get("column-width").getLength().mvalue(); + + // initialize id + String id = this.properties.get("id").getString(); + area.getIDReferences().initializeID(id,area); + } + + this.areaContainer = + new AreaContainer(fs, columnOffset - area.borderWidthLeft, -area.borderWidthTop, columnWidth, + area.getHeight(), Position.RELATIVE); + areaContainer.setPage(area.getPage()); + areaContainer.setBackgroundColor(backgroundColor); + areaContainer.setBorderStyle(borderStyle, borderStyle, borderStyle, borderStyle); + areaContainer.setBorderWidth(borderWidth, borderWidth, borderWidth, borderWidth); + areaContainer.setBorderColor(borderColor, borderColor, borderColor, borderColor); + areaContainer.setHeight(area.getHeight()); + area.addChild(areaContainer); + + return new Status(Status.OK); + } + + public void setColumnOffset(int columnOffset) { + this.columnOffset = columnOffset; + } + + public void setHeight(int height) { + areaContainer.setMaxHeight(height); + areaContainer.setHeight(height); + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableRow.java b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableRow.java new file mode 100644 index 000000000..764cda7e6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/flow/TableRow.java @@ -0,0 +1,239 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.flow; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.layout.*; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Vector; + +public class TableRow extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new TableRow(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new TableRow.Maker(); + } + + FontState fs; + int spaceBefore; + int spaceAfter; + ColorType backgroundColor; + String id; + + ColorType borderColor; + int borderWidth; + int borderStyle; + + int widthOfCellsSoFar = 0; + int largestCellHeight = 0; + + Vector columns; + + AreaContainer areaContainer; + + public TableRow(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "fo:table-row"; + } + + public void setColumns(Vector columns) { + this.columns = columns; + } + + public Status layout(Area area) throws FOPException { + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + String fontFamily = + this.properties.get("font-family").getString(); + String fontStyle = + this.properties.get("font-style").getString(); + String fontWeight = + this.properties.get("font-weight").getString(); + int fontSize = + this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + this.spaceBefore = + this.properties.get("space-before.optimum").getLength().mvalue(); + this.spaceAfter = + this.properties.get("space-after.optimum").getLength().mvalue(); + this.backgroundColor = + this.properties.get("background-color").getColorType(); + this.borderColor = + this.properties.get("border-color").getColorType(); + this.borderWidth = + this.properties.get("border-width").getLength().mvalue(); + this.borderStyle = + this.properties.get("border-style").getEnum(); + this.id= + this.properties.get("id").getString(); + + if (area instanceof BlockArea) { + area.end(); + } + + area.getIDReferences().createID(id); + + this.marker = 0; + + } + + if ((spaceBefore != 0) && (this.marker ==0)) { + area.addDisplaySpace(spaceBefore); + } + + if ( marker==0 ) { + // configure id + area.getIDReferences().configureID(id,area); + } + + this.areaContainer = + new AreaContainer(fs, -area.borderWidthLeft, -area.borderWidthTop, + area.getAllocationWidth(), + area.spaceLeft(), Position.RELATIVE); + areaContainer.setPage(area.getPage()); + areaContainer.setBackgroundColor(backgroundColor); + areaContainer.setBorderStyle(borderStyle, borderStyle, borderStyle, borderStyle); + areaContainer.setBorderWidth(borderWidth, borderWidth, borderWidth, borderWidth); + areaContainer.setBorderColor(borderColor, borderColor, borderColor, borderColor); + areaContainer.start(); + + areaContainer.setAbsoluteHeight(area.getAbsoluteHeight()); + areaContainer.setIDReferences(area.getIDReferences()); + + int numChildren = this.children.size(); + if (numChildren != columns.size()) { + MessageHandler.errorln("WARNING: Number of children under table-row not equal to number of table-columns"); + return new Status(Status.OK); + } + + // added by Eric Schaeffer + widthOfCellsSoFar = 0; + largestCellHeight = 0; + + for (int i = this.marker; i < numChildren; i++) { + TableCell cell = (TableCell) children.elementAt(i); + + //if (this.isInListBody) { + //fo.setIsInListBody(); + //fo.setDistanceBetweenStarts(this.distanceBetweenStarts); + //fo.setBodyIndent(this.bodyIndent); + //} + + cell.setStartOffset(widthOfCellsSoFar); + int width = ((TableColumn) columns.elementAt(i)).getColumnWidth(); + + cell.setWidth(width); + widthOfCellsSoFar += width; + + Status status; + if ((status = cell.layout(areaContainer)).isIncomplete()) { + this.marker = i; + if ((i != 0) && (status.getCode() == Status.AREA_FULL_NONE)) { + status = new Status(Status.AREA_FULL_SOME); + } + + area.removeChild(areaContainer); + this.resetMarker(); + this.removeID(area.getIDReferences()); + + return status; + } + + int h = cell.getHeight(); + if (h > largestCellHeight) { + largestCellHeight = h; + } + } + for (int i = 0; i < numChildren; i++) { + TableCell cell = (TableCell)children.elementAt(i); + cell.setHeight(largestCellHeight); + } + + area.addChild(areaContainer); + areaContainer.end(); + area.addDisplaySpace(largestCellHeight); + + // bug fix from Eric Schaeffer + //area.increaseHeight(largestCellHeight); + + if (spaceAfter != 0) { + area.addDisplaySpace(spaceAfter); + } + + if (area instanceof BlockArea) { + area.start(); + } + + return new Status(Status.OK); + } + + public int getAreaHeight() { + return areaContainer.getHeight(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java new file mode 100644 index 000000000..ea02d3758 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/ConditionalPageMasterReference.java @@ -0,0 +1,195 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +public class ConditionalPageMasterReference extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new ConditionalPageMasterReference(parent,propertyList); + } + } + + public static FObj.Maker maker() { + return new ConditionalPageMasterReference.Maker(); + } + + private String masterName; + private RepeatablePageMasterAlternatives repeatablePageMasterAlternatives; + + private int pagePosition; + private int oddOrEven; + private int blankOrNotBlank; + + public ConditionalPageMasterReference(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:conditional-page-master-reference"; + + if (parent.getName().equals("fo:repeatable-page-master-alternatives")) { + this.repeatablePageMasterAlternatives = + (RepeatablePageMasterAlternatives) parent; + setMasterName( this.properties.get("master-name").getString() ); + if (getMasterName().equals("")) { + System.err.println("WARNING: conditional-page-master-reference" + + "does not have a master-name and so is being ignored"); + } else { + this.repeatablePageMasterAlternatives.addConditionalPageMasterReference(this); + } + + setPagePosition( this.properties.get("page-position").getEnum() ); + setOddOrEven( this.properties.get("odd-or-even").getEnum() ); + setBlankOrNotBlank( this.properties.get("blank-or-not-blank").getEnum() ); + + } else { + throw new FOPException("fo:conditional-page-master-reference must be child " + + "of fo:repeatable-page-master-alternatives, not " + + parent.getName()); + } + } + + protected boolean isValid( int currentPageNumber, boolean thisIsFirstPage, + boolean isEmptyPage ) + { + // page-position + boolean okOnPagePosition = true; // default is 'any' + switch (getPagePosition()) { + case PagePosition.FIRST: + if (!thisIsFirstPage) + okOnPagePosition = false; + break; + case PagePosition.LAST: + // how the hell do you know at this point? + MessageHandler.log( "LAST PagePosition NYI" ); + okOnPagePosition = true; + break; + case PagePosition.REST: + if (thisIsFirstPage) + okOnPagePosition = false; + break; + case PagePosition.ANY: + okOnPagePosition = true; + } + + // odd or even + boolean okOnOddOrEven = true; // default is 'any' + int ooe = getOddOrEven(); + boolean isOddPage = ((currentPageNumber % 2) == 1) ? true : false; + if ((OddOrEven.ODD == ooe) && !isOddPage) + { + okOnOddOrEven = false; + } + if ((OddOrEven.EVEN == ooe) && isOddPage) { + okOnOddOrEven = false; + } + + // experimental check for blank-or-not-blank + boolean okOnBlankOrNotBlank = true; // default is 'any' + int bnb = getBlankOrNotBlank(); + if ((BlankOrNotBlank.BLANK == bnb) && !isEmptyPage) + { + okOnBlankOrNotBlank = false; + } + else if ((BlankOrNotBlank.NOT_BLANK == bnb) && isEmptyPage) + { + okOnBlankOrNotBlank = false; + } + + return (okOnOddOrEven && okOnPagePosition && okOnBlankOrNotBlank); + } + + protected void setPagePosition( int pagePosition ) + { + this.pagePosition = pagePosition; + } + + protected int getPagePosition() + { + return this.pagePosition; + } + + protected void setOddOrEven( int oddOrEven ) + { + this.oddOrEven = oddOrEven; + } + + protected int getOddOrEven() + { + return this.oddOrEven; + } + + protected void setBlankOrNotBlank( int blankOrNotBlank ) + { + this.blankOrNotBlank = blankOrNotBlank; + } + + protected int getBlankOrNotBlank() + { + return this.blankOrNotBlank; + } + + public void setMasterName( String masterName ) + { + this.masterName = masterName; + } + + public String getMasterName() + { + return this.masterName; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/LayoutMasterSet.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/LayoutMasterSet.java new file mode 100644 index 000000000..7ee676647 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/LayoutMasterSet.java @@ -0,0 +1,243 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.flow.Flow; +import org.apache.fop.fo.properties.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.layout.PageMaster; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Hashtable; +import java.util.Enumeration; +import java.util.Vector; + +public class LayoutMasterSet extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new LayoutMasterSet(parent,propertyList); + } + } + + public static FObj.Maker maker() { + return new LayoutMasterSet.Maker(); + } + + private Hashtable simplePageMasters; + private Hashtable pageSequenceMasters; + private Root root; + private String currentPageMasterName; + private Hashtable allRegions; + private PageSequenceMaster lastPageSequenceMaster; + + protected LayoutMasterSet(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:layout-master-set"; + + this.simplePageMasters = new Hashtable(); + this.pageSequenceMasters = new Hashtable(); + this.allRegions = new Hashtable(); + + if (parent.getName().equals("fo:root")) { + this.root = (Root)parent; + root.setLayoutMasterSet(this); + } else { + throw + new FOPException("fo:layout-master-set must be child of fo:root, not " + + parent.getName()); + } + } + + public PageMaster getNextPageMaster( String pageSequenceName, + int currentPageNumber, boolean thisIsFirstPage, boolean isEmptyPage ) + throws FOPException + { + PageMaster pm = null; + + PageSequenceMaster psm = getPageSequenceMaster( pageSequenceName ); + if (null != psm) + { + pm = psm.getNextPageMaster( currentPageNumber, thisIsFirstPage, + isEmptyPage ); + lastPageSequenceMaster = psm; + // call in this sequence + currentPageMasterName = psm.getNextPageMasterName(); + } else { + SimplePageMaster spm = getSimplePageMaster( pageSequenceName ); + if (null == spm) + { + throw new FOPException( "'master-name' for 'fo:page-sequence'" + + "matches no 'simple-page-master' or 'page-sequence-master'" ); + } + currentPageMasterName = spm.getMasterName(); + pm = spm.getNextPageMaster(); + } + return pm; + } + + protected void addSimplePageMaster( + String masterName, SimplePageMaster simplePageMaster) + throws FOPException { + // check against duplication of master-name + if (existsName(masterName)) + throw new FOPException( "'master-name' must be unique" + + "across page-masters and page-sequence-masters" ); + + this.simplePageMasters.put(masterName, simplePageMaster); + } + + protected SimplePageMaster getSimplePageMaster(String masterName) { + return (SimplePageMaster)this.simplePageMasters.get(masterName); + } + + protected void addPageSequenceMaster( + String masterName, PageSequenceMaster pageSequenceMaster) + throws FOPException { + // check against duplication of master-name + if (existsName(masterName)) + throw new FOPException( "'master-name' must be unique " + + "across page-masters and page-sequence-masters" ); + this.pageSequenceMasters.put(masterName, pageSequenceMaster); + } + + protected PageSequenceMaster getPageSequenceMaster(String masterName) { + return (PageSequenceMaster)this.pageSequenceMasters.get(masterName); + } + + private boolean existsName( String masterName ) + { + if (simplePageMasters.containsKey(masterName) || + pageSequenceMasters.containsKey(masterName)) + return true; + else + return false; + } + + public Vector findPageMasterNames( String flowName ) + { + Vector results = new Vector(); + for (Enumeration e = simplePageMasters.elements(); e.hasMoreElements(); ) + { + SimplePageMaster spm = (SimplePageMaster)e.nextElement(); + if (spm.getRegions().containsKey(flowName)) + { + results.addElement(spm.getMasterName()); + } + } + return results; + } + + public String regionNameMapsTo( String pageMasterName, String flowName) + { + SimplePageMaster spm = (SimplePageMaster)simplePageMasters.get(pageMasterName); + Hashtable regions = spm.getRegions(); + return (String)regions.get(flowName); + } + + public String getCurrentPageMasterName() + { + return currentPageMasterName; + } + + public void checkRegionNames() throws FOPException + { + // Section 7.33.15 check to see that if a region-name is a + // duplicate, that it maps to the same region-class. + for (Enumeration spm = simplePageMasters.elements(); spm.hasMoreElements(); ) + { + SimplePageMaster simplePageMaster = (SimplePageMaster)spm.nextElement(); + Hashtable spmRegions = simplePageMaster.getRegions(); + for (Enumeration e = spmRegions.keys(); e.hasMoreElements(); ) + { + String regionName = (String)e.nextElement(); + String regionClass = (String)spmRegions.get(regionName); + if (allRegions.containsKey(regionName)) + { + String localClass = (String)allRegions.get(regionName); + if (!localClass.equals(regionClass)) + { + throw new FOPException("Duplicate region-names must map " + + "to the same region-class"); + } + } + allRegions.put(regionName,regionClass); + } + } + } + + public void resetPageMasters() + { + for (Enumeration e = pageSequenceMasters.elements(); e.hasMoreElements(); ) + { + ((PageSequenceMaster)e.nextElement()).reset(); + } + + } + + public boolean isFlowForMasterNameDone( String masterName ) + { + // parameter is master-name of PMR; we need to locate PM + // referenced by this, and determine whether flow(s) are OK + SimplePageMaster spm = getSimplePageMaster( masterName ); + PageSequence ps = this.root.getCurrentPageSequence(); + Flow flow = ps.getFlow( masterName ); + if ((null == flow) || flow.getCurrentStatus().isIncomplete()) + return false; + else + return true; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequence.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequence.java new file mode 100644 index 000000000..b0dea539a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequence.java @@ -0,0 +1,422 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.fo.flow.Flow; +import org.apache.fop.fo.flow.StaticContent; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.AreaContainer; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.layout.Page; +import org.apache.fop.layout.PageMaster; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Hashtable; +import java.util.Vector; +import java.util.Enumeration; + +public class PageSequence extends FObj +{ + + public static class Maker extends FObj.Maker + { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new PageSequence(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new PageSequence.Maker(); + } + + static final int EXPLICIT = 0; + static final int AUTO = 1; + static final int AUTO_EVEN = 2; + static final int AUTO_ODD = 3; + + protected Root root; + // protected Flow flow; + // (001008) language in spec suggests that page sequence must have at + // least one flow, but may have more. The contents BNF in section + // 6.4.5 of the spec is likely incorrect. + protected Hashtable flows; + // protected Title title; + + protected Hashtable beforeStaticContents; + protected Hashtable afterStaticContents; + protected LayoutMasterSet layoutMasterSet; + protected String masterName; + + // used for mapping regions <=> static contents in correct SPM + protected String currentPageMasterName; + + protected Hashtable flowNames; + + protected Page currentPage; + protected int currentPageNumber = 0; + protected static int runningPageNumberCounter = 0; //keeps count of page number from previous PageSequence + protected int pageNumberType; // specifies page numbering type (auto|auto-even|auto-odd|explicit) + protected boolean thisIsFirstPage; // used to determine whether to calculate auto, auto-even, auto-odd + + protected PageSequence(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:page-sequence"; + + // region support + flowNames = new Hashtable(); // all 'flow-name's in this page sequence + beforeStaticContents = new Hashtable(); + afterStaticContents = new Hashtable(); + flows = new Hashtable(); // all Flow's in this page sequence + + if ( parent.getName().equals("fo:root") ) + { + this.runningPageNumberCounter=0; //else not initialized correctly + this.root = (Root) parent; + this.root.addPageSequence(this); + } + else + { + throw + new FOPException("page-sequence must be child of root, not " + + parent.getName()); + } + + layoutMasterSet = root.getLayoutMasterSet(); + // best time to run some checks on LayoutMasterSet + layoutMasterSet.checkRegionNames(); + + thisIsFirstPage=true; // we are now on the first page of the page sequence + InitialPageNumber ipn = (InitialPageNumber) this.properties.get("initial-page-number"); + String ipnValue=ipn.getString(); + + if ( ipnValue.equals("auto") ) + { + pageNumberType=AUTO; + } + else if ( ipnValue.equals("auto-even") ) + { + pageNumberType=AUTO_EVEN; + } + else if ( ipnValue.equals("auto-odd") ) + { + pageNumberType=AUTO_ODD; + } + else + { + pageNumberType=EXPLICIT; + try + { + int pageStart = new Integer(ipnValue).intValue(); + this.currentPageNumber = (pageStart > 0) ? pageStart - 1 : 0; + } + catch ( NumberFormatException nfe ) + { + throw new FOPException("\""+ipnValue+"\" is not a valid value for initial-page-number"); + } + } + + masterName = ((MasterName) this.properties.get("master-name")).getString(); + } + + protected Page makePage(AreaTree areaTree, int firstAvailPageNumber, + boolean isFirstPage, boolean isEmptyPage) + throws FOPException { + // layout this page sequence + + // while there is still stuff in the flow, ask the + // layoutMasterSet for a new page + + // page number is 0-indexed + PageMaster pageMaster = + this.layoutMasterSet.getNextPageMaster( + masterName, firstAvailPageNumber, isFirstPage, isEmptyPage ); + + // store the current 'master-name' for access by format() + currentPageMasterName = this.layoutMasterSet.getCurrentPageMasterName(); + + // a legal alternative is to use the last sub-sequence + // specification. That's not done here. + if ( pageMaster == null ) + { + throw new FOPException("page masters exhausted"); + } + return pageMaster.makePage(areaTree); + } + + public void format(AreaTree areaTree) throws FOPException { + Status status = new Status(Status.OK); + + this.layoutMasterSet.resetPageMasters(); + + do + { + // makePage() moved to after the page-number computations, + // but store the page-number at this point for that method, + // since we want the 'current' current page-number... + int firstAvailPageNumber = this.runningPageNumberCounter; + boolean tempIsFirstPage = false; + + if ( thisIsFirstPage ) + { + tempIsFirstPage = thisIsFirstPage; + if ( pageNumberType==AUTO ) + { + this.currentPageNumber=this.runningPageNumberCounter; + } + else if ( pageNumberType==AUTO_ODD ) + { + this.currentPageNumber=this.runningPageNumberCounter; + if ( this.currentPageNumber % 2== 1 ) + { + this.currentPageNumber++; + } + } + else if ( pageNumberType==AUTO_EVEN ) + { + this.currentPageNumber=this.runningPageNumberCounter; + if ( this.currentPageNumber % 2 == 0 ) + { + this.currentPageNumber++; + } + } + thisIsFirstPage=false; + } + this.currentPageNumber++; + + // deliberately moved down here so page-number calculations + // are complete; + // compute flag for 'blank-or-not-blank' + boolean isEmptyPage = false; + if ( (status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) && + ((currentPageNumber % 2) == 1) ) + { + isEmptyPage = true; + } + else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) && + ((currentPageNumber % 2) == 0) ) + { + isEmptyPage = true; + } + else + { + isEmptyPage = false; + } + + currentPage = makePage(areaTree, firstAvailPageNumber, tempIsFirstPage, isEmptyPage); + + currentPage.setNumber(this.currentPageNumber); + this.runningPageNumberCounter=this.currentPageNumber; + + MessageHandler.log(" [" + currentPageNumber); + if ( (!this.beforeStaticContents.isEmpty()) && + (currentPage.getBefore() != null) ) + { + AreaContainer beforeArea = currentPage.getBefore(); + beforeArea.setIDReferences(areaTree.getIDReferences()); + // locate the correct fo:static-content from the "beforeStaticContents" + // Hashtable, using the "currentPageMasterName" as the key. + StaticContent before = + (StaticContent)this.beforeStaticContents.get(currentPageMasterName); + if (null == before) + MessageHandler.errorln("No static-content found for region-before " + + "in page-master '" + currentPageMasterName + "'"); + else + before.layout(beforeArea); + } + if ( (!this.beforeStaticContents.isEmpty()) && + (currentPage.getAfter() != null) ) + { + AreaContainer afterArea = currentPage.getAfter(); + afterArea.setIDReferences(areaTree.getIDReferences()); + // locate the correct fo:static-content from the "afterStaticContents" + // Hashtable, using the "currentPageMasterName" as the key. + StaticContent after = + (StaticContent)this.afterStaticContents.get(currentPageMasterName); + if (null == after) + MessageHandler.errorln("No static-content found for region-after " + + "in page-master '" + currentPageMasterName + "'"); + else + after.layout(afterArea); + } + if ( (status.getCode() == Status.FORCE_PAGE_BREAK_EVEN) && + ((currentPageNumber % 2) == 1) ) + { + } + else if ( (status.getCode() == Status.FORCE_PAGE_BREAK_ODD) && + ((currentPageNumber % 2) == 0) ) + { + } + else + { + AreaContainer bodyArea = currentPage.getBody(); + bodyArea.setIDReferences(areaTree.getIDReferences()); + // locate the correct fo:flow from the "flows" + // Hashtable, using the "currentPageMasterName" as the key. + Flow flow = + (Flow)this.flows.get(currentPageMasterName); + if (null == flow) + MessageHandler.errorln("No flow found for region-body " + + "in page-master '" + currentPageMasterName + "'"); + else + { + status = flow.layout(bodyArea); + flow.setCurrentStatus(status); + } + } + MessageHandler.log("]"); + areaTree.addPage(currentPage); + } while ( flowsAreIncomplete() ); + MessageHandler.errorln(""); + } + + public void setFlow(String name, Flow flow) + throws FOPException { + + if (flowNames.containsKey(name)) + { + throw new FOPException("flow-names must be unique within an fo:page-sequence"); + } + + // store the Flow against the SimplePageMaster(s) that contain(s) it + Vector pageMasterNames = this.layoutMasterSet.findPageMasterNames(name); + if (pageMasterNames.isEmpty()) + { + MessageHandler.errorln("flow-name maps to no region(s) in page-masters"); + } + else + { + for (Enumeration e = pageMasterNames.elements(); e.hasMoreElements(); ) + { + String pageMasterName = (String)e.nextElement(); + if (this.layoutMasterSet.regionNameMapsTo(pageMasterName,name).equals("fo:region-body")) + { + flows.put(pageMasterName,flow); + flowNames.put(name,"body"); + } + else + { + MessageHandler.errorln("Flow flow-name does not map to fo:region-body"); + flowNames.put(name,"unsupported"); + } + } + } + } + + public String setStaticContent(String name, StaticContent staticContent) + throws FOPException { + + // region class that static content maps to + String regionClass = null; + + // store the flow name + if (flowNames.containsKey(name)) + { + throw new FOPException("flow-names must be unique within an fo:page-sequence"); + } + + // store the StaticContent against the SimplePageMaster(s) that contain(s) it + Vector pageMasterNames = this.layoutMasterSet.findPageMasterNames(name); + if (pageMasterNames.isEmpty()) + { + MessageHandler.errorln("flow-name maps to no region(s) in page-masters"); + } + else + { + for (Enumeration e = pageMasterNames.elements(); e.hasMoreElements(); ) + { + String pageMasterName = (String)e.nextElement(); + if (this.layoutMasterSet.regionNameMapsTo(pageMasterName,name).equals("fo:region-before")) + { + beforeStaticContents.put(pageMasterName,staticContent); + regionClass = "before"; + } + else if (this.layoutMasterSet.regionNameMapsTo(pageMasterName,name).equals("fo:region-after")) + { + afterStaticContents.put(pageMasterName,staticContent); + regionClass = "after"; + } + else + { + MessageHandler.errorln("StaticContent flow-name maps to unsupported region"); + regionClass = "unsupported"; + } + flowNames.put(name,regionClass); + } + } + return regionClass; + } + + public boolean flowsAreIncomplete() + { + boolean isIncomplete = false; + for (Enumeration e = flows.elements(); e.hasMoreElements(); ) + { + Flow flow = (Flow)e.nextElement(); + Status status = flow.getCurrentStatus(); + isIncomplete |= status.isIncomplete(); + } + + return isIncomplete; + } + + public Flow getFlow( String flowName ) + { + return (Flow)flows.get( flowName ); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequenceMaster.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequenceMaster.java new file mode 100644 index 000000000..2d6cf2b2c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/PageSequenceMaster.java @@ -0,0 +1,183 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.PageMaster; +import org.apache.fop.layout.Region; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +// Java +import java.util.Vector; +import java.util.Enumeration; + +public class PageSequenceMaster extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new PageSequenceMaster(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new PageSequenceMaster.Maker(); + } + + LayoutMasterSet layoutMasterSet; + Vector subSequenceSpecifiers; + SubSequenceSpecifier currentPmr; + private int ssIndex; + + // SimplePageMasters are not exposed outside this class. Hence, this + // variable tracks the current master-name for the last SPM. + String currentPageMasterName; + + // The terminology may be confusing. A 'page-sequence-master' consists + // of a sequence of what the XSL spec refers to as + // 'sub-sequence-specifiers'. These are, in fact, simple or complex + // references to page-masters. So the methods use the former + // terminology ('sub-sequence-specifiers', or SSS), + // but the actual FO's are MasterReferences. + protected PageSequenceMaster(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:page-sequence-master"; + + subSequenceSpecifiers = new Vector(); + ssIndex = 0; + + if (parent.getName().equals("fo:layout-master-set")) { + this.layoutMasterSet = (LayoutMasterSet) parent; + String pm = this.properties.get("master-name").getString(); + if (pm.equals("")) { + System.err.println("WARNING: page-sequence-master does not have " + + "a page-master-name and so is being ignored"); + } else { + this.layoutMasterSet.addPageSequenceMaster(pm, this); + } + } else { + throw new FOPException("fo:page-sequence-master must be child " + + "of fo:layout-master-set, not " + + parent.getName()); + } + } + + protected void addSubsequenceSpecifier( SubSequenceSpecifier pageMasterReference ) + { + subSequenceSpecifiers.addElement( pageMasterReference ); + } + + protected SubSequenceSpecifier getNextSubsequenceSpecifier() + { + if (ssIndex == subSequenceSpecifiers.size()) + return null; + SubSequenceSpecifier pmr = (SubSequenceSpecifier)subSequenceSpecifiers.elementAt( ssIndex ); + ssIndex++; + return pmr; + } + + public PageMaster getNextPageMaster( int currentPageNumber, boolean thisIsFirstPage, + boolean isEmptyPage ) + { + if (null == currentPmr) + { + currentPmr = getNextSubsequenceSpecifier(); + } + + String nextPageMaster = + currentPmr.getNextPageMaster( currentPageNumber, thisIsFirstPage, isEmptyPage ); + + if (null == nextPageMaster) + { + currentPmr = getNextSubsequenceSpecifier(); + nextPageMaster = + currentPmr.getNextPageMaster( currentPageNumber, thisIsFirstPage, isEmptyPage ); + } + + SimplePageMaster spm = this.layoutMasterSet.getSimplePageMaster( nextPageMaster ); + currentPageMasterName = spm.getMasterName(); // store for outside access + + return spm.getPageMaster(); + } + + /** + * Return the 'master-name' for the last SimplePageMaster + * processed in this class + * @returns String master name for last SPM + */ + public String getNextPageMasterName() + { + return currentPageMasterName; + } + + public void reset() + { + for (Enumeration e = subSequenceSpecifiers.elements(); e.hasMoreElements(); ) + { + ((SubSequenceSpecifier)e.nextElement()).reset(); + } + ssIndex = 0; + } + + public boolean isFlowForMasterNameDone( String masterName ) + { + // parameter is master-name of PMR; we need to locate PM + // referenced by this, and determine whether flow(s) are OK + if (this.layoutMasterSet.isFlowForMasterNameDone( masterName )) + return true; + else + return false; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionAfter.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionAfter.java new file mode 100644 index 000000000..a18054ea4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionAfter.java @@ -0,0 +1,129 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Region; +import org.apache.fop.apps.FOPException; + +public class RegionAfter extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) throws FOPException { + return new RegionAfter(parent,propertyList); + } + } + + public static FObj.Maker maker() { + return new RegionAfter.Maker(); + } + + SimplePageMaster layoutMaster; + String regionName; + + protected RegionAfter(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:region-after"; + + // regions may have name, or default + if (null == this.properties.get("region-name")) + regionName = "xsl-region-after"; + else if (this.properties.get("region-name").getString().equals("")) + regionName = "xsl-region-after"; + else + { + regionName = this.properties.get("region-name").getString(); + // check that name is OK. Not very pretty. + if (regionName.equals( "xsl-region-before" ) || regionName.equals( "xsl-region-start" ) + || regionName.equals( "xsl-region-end" ) || regionName.equals( "xsl-region-body" ) + || regionName.equals( "xsl-before-float-separator" ) + || regionName.equals( "xsl-footnote-separator" )) + { + throw new FOPException("region-name '" + regionName + + "' for fo:region-after not permitted."); + } + } + + if (parent.getName().equals("fo:simple-page-master")) { + this.layoutMaster = (SimplePageMaster) parent; + this.layoutMaster.setRegionAfter(this); + } else { + throw new FOPException("region-after must be child " + + "of simple-page-master, not " + + parent.getName()); + } + } + + Region makeRegion(int allocationRectangleXPosition, + int allocationRectangleYPosition, + int allocationRectangleWidth, + int allocationRectangleHeight) { + int marginTop = this.properties.get("margin-top").getLength().mvalue(); + int marginBottom = this.properties.get("margin-bottom").getLength().mvalue(); + int marginLeft = this.properties.get("margin-left").getLength().mvalue(); + int marginRight = this.properties.get("margin-right").getLength().mvalue(); + int extent = this.properties.get("extent").getLength().mvalue(); + + return new Region(allocationRectangleXPosition + marginLeft, + allocationRectangleYPosition - + allocationRectangleHeight + extent, + allocationRectangleWidth - marginLeft - + marginRight,extent); + } + + public String getRegionName() + { + return regionName; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBefore.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBefore.java new file mode 100644 index 000000000..d8df30b0d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBefore.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Region; +import org.apache.fop.apps.FOPException; + +public class RegionBefore extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) throws FOPException { + return new RegionBefore(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new RegionBefore.Maker(); + } + + SimplePageMaster layoutMaster; + String regionName; + + protected RegionBefore(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:region-before"; + + // regions may have name, or default + if (null == this.properties.get("region-name")) + regionName = "xsl-region-before"; + else if (this.properties.get("region-name").getString().equals("")) + regionName = "xsl-region-before"; + else + { + regionName = this.properties.get("region-name").getString(); + // check that name is OK. Not very pretty. + if (regionName.equals( "xsl-region-after" ) || regionName.equals( "xsl-region-start" ) + || regionName.equals( "xsl-region-end" ) || regionName.equals( "xsl-region-body" ) + || regionName.equals( "xsl-before-float-separator" ) + || regionName.equals( "xsl-footnote-separator" )) + { + throw new FOPException("region-name '" + regionName + + "' for fo:region-before not permitted."); + } + } + + if (parent.getName().equals("fo:simple-page-master")) { + this.layoutMaster = (SimplePageMaster) parent; + this.layoutMaster.setRegionBefore(this); + } else { + throw new FOPException("region-before must be child of " + + "simple-page-master, not " + + parent.getName()); + } + } + + Region makeRegion(int allocationRectangleXPosition, + int allocationRectangleYPosition, + int allocationRectangleWidth, + int allocationRectangleHeight) { + int marginTop = this.properties.get("margin-top").getLength().mvalue(); + int marginBottom = this.properties.get("margin-bottom").getLength().mvalue(); + int marginLeft = this.properties.get("margin-left").getLength().mvalue(); + int marginRight = this.properties.get("margin-right").getLength().mvalue(); + int extent = this.properties.get("extent").getLength().mvalue(); + + return new Region(allocationRectangleXPosition + marginLeft, + allocationRectangleYPosition - marginTop, + allocationRectangleWidth - marginLeft - + marginRight, extent); + } + + public String getRegionName() + { + return regionName; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBody.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBody.java new file mode 100644 index 000000000..d6c2f1d43 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RegionBody.java @@ -0,0 +1,126 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Region; +import org.apache.fop.apps.FOPException; + +public class RegionBody extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) throws FOPException { + return new RegionBody(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new RegionBody.Maker(); + } + + String regionName; + + protected RegionBody(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:region-body"; + + // regions may have name, or default + if (null == this.properties.get("region-name")) + regionName = "xsl-region-body"; + else if (this.properties.get("region-name").getString().equals("")) + regionName = "xsl-region-body"; + else + { + regionName = this.properties.get("region-name").getString(); + // check that name is OK. Not very pretty. + if (regionName.equals( "xsl-region-before" ) || regionName.equals( "xsl-region-start" ) + || regionName.equals( "xsl-region-end" ) || regionName.equals( "xsl-region-after" ) + || regionName.equals( "xsl-before-float-separator" ) + || regionName.equals( "xsl-footnote-separator" )) + { + throw new FOPException("region-name '" + regionName + + "' for fo:region-body not permitted."); + } + } + + if (parent.getName().equals("fo:simple-page-master")) { + ((SimplePageMaster) parent).setRegionBody(this); + } else { + throw new FOPException("region-body must be child of " + + "simple-page-master, not " + + parent.getName()); + } + } + + Region makeRegion(int allocationRectangleXPosition, + int allocationRectangleYPosition, + int allocationRectangleWidth, + int allocationRectangleHeight) { + int marginTop = this.properties.get("margin-top").getLength().mvalue(); + int marginBottom = this.properties.get("margin-bottom").getLength().mvalue(); + int marginLeft = this.properties.get("margin-left").getLength().mvalue(); + int marginRight = this.properties.get("margin-right").getLength().mvalue(); + + return new Region(allocationRectangleXPosition + marginLeft, + allocationRectangleYPosition - marginTop, + allocationRectangleWidth - marginLeft - + marginRight, allocationRectangleHeight - + marginTop - marginBottom); + } + + public String getRegionName() + { + return regionName; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java new file mode 100644 index 000000000..38a2678c2 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterAlternatives.java @@ -0,0 +1,171 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +import org.apache.fop.fo.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +// Java +import java.util.Vector; + +public class RepeatablePageMasterAlternatives extends FObj + implements SubSequenceSpecifier { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new RepeatablePageMasterAlternatives(parent,propertyList); + } + } + + public static FObj.Maker maker() { + return new RepeatablePageMasterAlternatives.Maker(); + } + + private PageSequenceMaster pageSequenceMaster; + + private int maximumRepeats; + private int numberConsumed = 0; + + private int BOUNDED = 1; + private int UNBOUNDED = 0; + private int boundedness; + + private Vector conditionalPageMasterRefs; + + public RepeatablePageMasterAlternatives(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:repeatable-page-master-alternatives"; + + conditionalPageMasterRefs = new Vector(); + + if (parent.getName().equals("fo:page-sequence-master")) { + this.pageSequenceMaster = (PageSequenceMaster) parent; + this.pageSequenceMaster.addSubsequenceSpecifier(this); + } else { + throw new FOPException("fo:repeatable-page-master-alternatives" + + "must be child of fo:page-sequence-master, not " + + parent.getName()); + } + + String mr = this.properties.get("maximum-repeats").getString(); + if (!mr.equals("no-limit")) + { + try { + setMaximumRepeats( Integer.parseInt( mr ) ); + this.boundedness = BOUNDED; + } catch (NumberFormatException nfe) { + throw new FOPException( "Invalid number for " + + "'maximum-repeats' property" ); + } + + } else { + this.boundedness = UNBOUNDED; // unbounded + } + + } + + public String getNextPageMaster( int currentPageNumber, boolean thisIsFirstPage, + boolean isEmptyPage ) { + + String pm = null; + + if (this.boundedness == BOUNDED ) { + if (numberConsumed < getMaximumRepeats()) { + numberConsumed++; + } else { + return null; + } + } + + for (int i = 0; i < conditionalPageMasterRefs.size(); i++) + { + ConditionalPageMasterReference cpmr = + (ConditionalPageMasterReference)conditionalPageMasterRefs.elementAt(i); + + // 0-indexed page number + if (cpmr.isValid(currentPageNumber + 1, thisIsFirstPage, isEmptyPage )) + { + pm = cpmr.getMasterName(); + break; + } + } + + if ((pm != null) && this.pageSequenceMaster.isFlowForMasterNameDone( pm )) + pm = null; + + return pm; + } + + private void setMaximumRepeats( int maximumRepeats) + { + this.maximumRepeats = + (maximumRepeats < 0) ? 0 : maximumRepeats; + } + + private int getMaximumRepeats() + { + return this.maximumRepeats; + } + + public void addConditionalPageMasterReference( + ConditionalPageMasterReference cpmr) + { + this.conditionalPageMasterRefs.addElement( cpmr ); + } + + public void reset() + { + numberConsumed = 0; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java new file mode 100644 index 000000000..db289617c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/RepeatablePageMasterReference.java @@ -0,0 +1,163 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +import org.apache.fop.fo.*; +import org.apache.fop.apps.FOPException; + +public class RepeatablePageMasterReference extends FObj + implements SubSequenceSpecifier { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new RepeatablePageMasterReference(parent,propertyList); + } + } + + public static FObj.Maker maker() { + return new RepeatablePageMasterReference.Maker(); + } + + private String masterName; + private PageSequenceMaster pageSequenceMaster; + + private int maximumRepeats; + private int numberConsumed = 0; + + private int BOUNDED = 1; + private int UNBOUNDED = 0; + private int boundedness; + + public RepeatablePageMasterReference(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:repeatable-page-master-reference"; + + if (parent.getName().equals("fo:page-sequence-master")) { + this.pageSequenceMaster = (PageSequenceMaster) parent; + setMasterName( this.properties.get("master-name").getString() ); + if (getMasterName().equals("")) { + System.err.println("WARNING: repeatable-page-master-reference" + + "does not have a master-name and so is being ignored"); + } else { + this.pageSequenceMaster.addSubsequenceSpecifier(this); + } + } else { + throw new FOPException("fo:repeatable-page-master-reference must be" + + "child of fo:page-sequence-master, not " + + parent.getName()); + } + + String mr = this.properties.get("maximum-repeats").getString(); + if (!mr.equals("no-limit")) + { + try { + setMaximumRepeats( Integer.parseInt( mr ) ); + this.boundedness = BOUNDED; + } catch (NumberFormatException nfe) { + throw new FOPException( "Invalid number for " + + "'maximum-repeats' property" ); + } + + } else { + this.boundedness = UNBOUNDED; // unbounded + } + + } + + public String getNextPageMaster( int currentPageNumber, + boolean thisIsFirstPage, boolean isEmptyPage ) { + + String pm = getMasterName(); + + if (this.boundedness == BOUNDED) + { + if (numberConsumed < getMaximumRepeats()) { + numberConsumed++; + } else { + pm = null; + } + } + + // is flow OK? + if ((pm != null) && this.pageSequenceMaster.isFlowForMasterNameDone( pm )) + pm = null; + + return pm; + } + + private void setMaximumRepeats( int maximumRepeats) + { + this.maximumRepeats = + (maximumRepeats < 0) ? 0 : maximumRepeats; + } + + private int getMaximumRepeats() + { + return this.maximumRepeats; + } + + public void setMasterName( String masterName ) + { + this.masterName = masterName; + } + + public String getMasterName() + { + return masterName; + } + + public void reset() + { + numberConsumed = 0; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/Root.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/Root.java new file mode 100644 index 000000000..8eb2721e5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/Root.java @@ -0,0 +1,132 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.flow.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.apps.FOPException; + +// Java +import java.util.Vector; +import java.util.Enumeration; + +public class Root extends FObj { + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) throws FOPException { + return new Root(parent, propertyList); + } + } + + public static FObj.Maker maker() + { + return new Root.Maker(); + } + + LayoutMasterSet layoutMasterSet; + Vector pageSequences; + PageSequence currentPageSequence; + + protected Root(FObj parent, PropertyList propertyList) throws FOPException + { + super(parent, propertyList); + this.name = "fo:root"; + + pageSequences = new Vector(); + if (parent != null) + { + throw new FOPException("root must be root element"); + } + } + + + public void addPageSequence(PageSequence pageSequence) + { + this.pageSequences.addElement(pageSequence); + } + + + public LayoutMasterSet getLayoutMasterSet() + { + return this.layoutMasterSet; + } + + + public void format(AreaTree areaTree) throws FOPException + { +// MessageHandler.errorln(" Root[" + marker + "] "); + if(layoutMasterSet == null) + { + throw new FOPException("No layout master set."); + } + + Enumeration e = pageSequences.elements(); + while (e.hasMoreElements()) + { + currentPageSequence = (PageSequence) e.nextElement(); + currentPageSequence.format(areaTree); + } + + } + + + public void setLayoutMasterSet(LayoutMasterSet layoutMasterSet) { + this.layoutMasterSet = layoutMasterSet; + } + + public PageSequence getCurrentPageSequence() + { + return currentPageSequence; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SimplePageMaster.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SimplePageMaster.java new file mode 100644 index 000000000..e553611d8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SimplePageMaster.java @@ -0,0 +1,198 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.PageMaster; +import org.apache.fop.layout.Region; +import org.apache.fop.apps.FOPException; + +import java.util.Hashtable; + +public class SimplePageMaster extends FObj { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new SimplePageMaster(parent, propertyList); + } + } + + public static FObj.Maker maker() { + return new SimplePageMaster.Maker(); + } + + RegionBody regionBody; + RegionBefore regionBefore; + RegionAfter regionAfter; + private Hashtable regions; + private String masterName; + + LayoutMasterSet layoutMasterSet; + PageMaster pageMaster; + + protected SimplePageMaster(FObj parent, PropertyList propertyList) + throws FOPException { + super(parent, propertyList); + this.name = "fo:simple-page-master"; + + this.regions = new Hashtable(); + + if (parent.getName().equals("fo:layout-master-set")) { + this.layoutMasterSet = (LayoutMasterSet) parent; + String pm = this.properties.get("master-name").getString(); + if (pm.equals("")) { + MessageHandler.errorln("WARNING: simple-page-master does not have " + + "a master-name and so is being ignored"); + } else { + this.layoutMasterSet.addSimplePageMaster(pm, this); + this.masterName = pm; + } + } else { + throw new FOPException("fo:simple-page-master must be child " + + "of fo:layout-master-set, not " + + parent.getName()); + } + } + + protected void end() { + int pageWidth = this.properties.get("page-width").getLength().mvalue(); + int pageHeight = this.properties.get("page-height").getLength().mvalue(); + + int marginTop = this.properties.get("margin-top").getLength().mvalue(); + int marginBottom = this.properties.get("margin-bottom").getLength().mvalue(); + int marginLeft = this.properties.get("margin-left").getLength().mvalue(); + int marginRight = this.properties.get("margin-right").getLength().mvalue(); + + int contentRectangleXPosition = marginLeft; + int contentRectangleYPosition = pageHeight - marginTop; + int contentRectangleWidth = pageWidth - marginLeft - marginRight; + int contentRectangleHeight = pageHeight - marginTop - marginBottom; + + this.pageMaster = new PageMaster(pageWidth, pageHeight); + this.pageMaster.addBody(this.regionBody.makeRegion(contentRectangleXPosition, + contentRectangleYPosition,contentRectangleWidth,contentRectangleHeight)); + + if (this.regionBefore != null) + this.pageMaster.addBefore(this.regionBefore.makeRegion(contentRectangleXPosition, + contentRectangleYPosition,contentRectangleWidth,contentRectangleHeight)); + if (this.regionAfter != null) + this.pageMaster.addAfter(this.regionAfter.makeRegion(contentRectangleXPosition, + contentRectangleYPosition,contentRectangleWidth,contentRectangleHeight)); + } + + public PageMaster getPageMaster() { + return this.pageMaster; + } + + public PageMaster getNextPageMaster() { + return this.pageMaster; + } + + protected void setRegionAfter(RegionAfter region) + throws FOPException { + if (regions.containsKey(region.getRegionName())) + { + throw new FOPException("region names must be unique" + + " within simple-page-master '" + + getMasterName() + "'"); + } + else + { + regions.put(region.getRegionName(), region.getName()); + } + this.regionAfter = region; + } + + protected void setRegionBefore(RegionBefore region) + throws FOPException { + if (regions.containsKey(region.getRegionName())) + { + throw new FOPException("region names must be unique" + + " within simple-page-master '" + + getMasterName() + "'"); + } + else + { + regions.put(region.getRegionName(), region.getName()); + } + this.regionBefore = region; + } + + protected void setRegionBody(RegionBody region) + throws FOPException { + if (regions.containsKey(region.getRegionName())) + { + throw new FOPException("region names must be unique" + + " within simple-page-master '" + + getMasterName() + "'"); + } + else + { + regions.put(region.getRegionName(), region.getName()); + } + this.regionBody = region; + } + + public Hashtable getRegions() + { + return regions; + } + + public String getMasterName() + { + return masterName; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SinglePageMasterReference.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SinglePageMasterReference.java new file mode 100644 index 000000000..b5f180034 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SinglePageMasterReference.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.fo.pagination; + +import org.apache.fop.fo.*; +import org.apache.fop.apps.FOPException; +import org.apache.fop.messaging.MessageHandler; + +public class SinglePageMasterReference extends FObj + implements SubSequenceSpecifier { + + public static class Maker extends FObj.Maker { + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new SinglePageMasterReference(parent,propertyList); + } + } + + public static FObj.Maker maker() { + return new SinglePageMasterReference.Maker(); + } + + private String masterName; + private PageSequenceMaster pageSequenceMaster; + + private static final int FIRST = 0; + private static final int DONE = 1; + + private int state; + + public SinglePageMasterReference(FObj parent, PropertyList propertyList) + throws FOPException { + + super(parent, propertyList); + this.name = "fo:single-page-master-reference"; + + if (parent.getName().equals("fo:page-sequence-master")) { + this.pageSequenceMaster = (PageSequenceMaster) parent; + setMasterName( this.properties.get("master-name").getString() ); + + if (getMasterName().equals("")) { + MessageHandler.error("WARNING: single-page-master-reference" + + "does not have a master-name and so is being ignored"); + } else { + this.pageSequenceMaster.addSubsequenceSpecifier(this); + } + } else { + throw new FOPException("fo:page-sequence-master must be child " + + "of fo:layout-master-set, not " + + parent.getName()); + } + + this.state = FIRST; + } + + public String getNextPageMaster( int currentPageNumber, boolean thisIsFirstPage, + boolean isEmptyPage) { + if (this.state == FIRST) + { + this.state = DONE; + return getMasterName(); + } + else + return null; + } + + public void setMasterName( String masterName ) + { + this.masterName = masterName; + } + + public String getMasterName() + { + return this.masterName; + } + + public void reset() + { + this.state = FIRST; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SubSequenceSpecifier.java b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SubSequenceSpecifier.java new file mode 100644 index 000000000..e7ae2cdbb --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/fo/pagination/SubSequenceSpecifier.java @@ -0,0 +1,63 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.fo.pagination; + +/** Classes that implement this interface can be added to a PageSequenceMaster, + * and are capable of looking up an appropriate PageMaster. + */ +public interface SubSequenceSpecifier +{ + public String getNextPageMaster( int currentPageNumber, + boolean thisIsFirstPage, boolean isEmptyPage ); + + public void reset(); +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/AbstractFopImage.java b/fop-0_14_0_regions/src/org/apache/fop/image/AbstractFopImage.java new file mode 100644 index 000000000..eaaf896ea --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/AbstractFopImage.java @@ -0,0 +1,296 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image; + +// Java +import java.util.Hashtable; +import java.net.URL; + +// FOP +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.pdf.PDFColor; +import org.apache.fop.pdf.PDFFilter; +import org.apache.fop.image.analyser.ImageReaderFactory; +import org.apache.fop.image.analyser.ImageReader; + +/** + * Base class to implement the FopImage interface. + * @author Eric SCHAEFFER + * @see FopImage + */ +public abstract class AbstractFopImage implements FopImage { + /** + * Image width (in pixel). + */ + protected int m_width = 0; + /** + * Image height (in pixel). + */ + protected int m_height = 0; + /** + * Image URL. + */ + protected URL m_href = null; + /** + * ImageReader object (to obtain image header informations). + */ + protected ImageReader m_imageReader = null; + /** + * Image color space (org.apache.fop.datatypes.ColorSpace). + */ + protected ColorSpace m_colorSpace = null; + /** + * Bits per pixel. + */ + protected int m_bitsPerPixel = 0; + /** + * Image data (uncompressed). + */ + protected byte[] m_bitmaps = null; + /** + * Image data size. + */ + protected int m_bitmapsSize = 0; + /** + * Image transparency. + */ + protected boolean m_isTransparent = false; + /** + * Transparent color (org.apache.fop.pdf.PDFColor). + */ + protected PDFColor m_transparentColor = null; + + /** + * Constructor. + * Construct a new FopImage object and initialize its default properties: + *
    + *
  • image width + *
  • image height + *
+ * The image data isn't kept in memory. + * @param href image URL + * @return a new FopImage object + * @exception FopImageException an error occured during initialization + */ + public AbstractFopImage(URL href) throws FopImageException { + this.m_href = href; + try { + this.m_imageReader = ImageReaderFactory.Make(this.m_href.openStream()); + } catch (Exception e) { + throw new FopImageException(e.getMessage()); + } + this.m_width = this.m_imageReader.getWidth(); + this.m_height = this.m_imageReader.getHeight(); + } + + /** + * Constructor. + * Construct a new FopImage object and initialize its default properties: + *
    + *
  • image width + *
  • image height + *
+ * The image data isn't kept in memory. + * @param href image URL + * imgReader ImageReader object + * @return a new FopImage object + * @exception FopImageException an error occured during initialization + */ + public AbstractFopImage(URL href, ImageReader imgReader) { + this.m_href = href; + this.m_imageReader = imgReader; + this.m_width = this.m_imageReader.getWidth(); + this.m_height = this.m_imageReader.getHeight(); + } + + /** + * Load image data and initialize its properties. + * Subclasses need to implement this method. + * @exception FopImageException an error occured during loading + */ + abstract protected void loadImage() throws FopImageException; + + /** + * Return the image URL. + * @return the image URL (as String) + */ + public String getURL() { + return this.m_href.toString(); + } + + /** + * Return the image width. + * @return the image width + * @exception FopImageException an error occured during property retriaval + */ + public int getWidth() throws FopImageException { + if (this.m_width == 0) + this.loadImage(); + + return this.m_width; + } + + /** + * Return the image height. + * @return the image height + * @exception FopImageException an error occured during property retriaval + */ + public int getHeight() throws FopImageException { + if (this.m_height == 0) + this.loadImage(); + + return this.m_height; + } + + /** + * Return the image color space. + * @return the image color space (org.apache.fop.datatypes.ColorSpace) + * @exception FopImageException an error occured during property retriaval + */ + public ColorSpace getColorSpace() throws FopImageException { + if (this.m_colorSpace == null) + this.loadImage(); + + return this.m_colorSpace; + } + + /** + * Return the number of bits per pixel. + * @return number of bits per pixel + * @exception FopImageException an error occured during property retriaval + */ + public int getBitsPerPixel() throws FopImageException { + if (this.m_bitsPerPixel == 0) + this.loadImage(); + + return this.m_bitsPerPixel; + } + + /** + * Return the image transparency. + * @return true if the image is transparent + * @exception FopImageException an error occured during property retriaval + */ + public boolean isTransparent() throws FopImageException { + return this.m_isTransparent; + } + + /** + * Return the transparent color. + * @return the transparent color (org.apache.fop.pdf.PDFColor) + * @exception FopImageException an error occured during property retriaval + */ + public PDFColor getTransparentColor() throws FopImageException { + return this.m_transparentColor; + } + + /** + * Return the image data (uncompressed). + * @return the image data + * @exception FopImageException an error occured during loading + */ + public byte[] getBitmaps() throws FopImageException { + if (this.m_bitmaps == null) + this.loadImage(); + + return this.m_bitmaps; + } + + /** + * Return the image data size (uncompressed). + * @return the image data size + * @exception FopImageException an error occured during loading + */ + public int getBitmapsSize() throws FopImageException { + if (this.m_bitmapsSize == 0) + this.loadImage(); + + return this.m_bitmapsSize; + } + + /** + * Return the original image data (compressed). + * @return the original image data + * @exception FopImageException an error occured during loading + */ + public byte[] getRessourceBytes() throws FopImageException { + return null; + } + + /** + * Return the original image data size (compressed). + * @return the original image data size + * @exception FopImageException an error occured during loading + */ + public int getRessourceBytesSize() throws FopImageException { + return 0; + } + + /** + * Return the original image compression type. + * @return the original image compression type (org.apache.fop.pdf.PDFFilter) + * @exception FopImageException an error occured during loading + */ + public PDFFilter getPDFFilter() throws FopImageException { + return null; + } + + /** + * Free all ressource. + */ + public void close() { + /* For the moment, only release the bitmaps (image areas + can share the same FopImage object) + Thus, even if it had been called, other properties + are still available. + */ + //this.m_width = 0; + //this.m_height = 0; + //this.m_href = null; + //this.m_colorSpace = null; + //this.m_bitsPerPixel = 0; + this.m_bitmaps = null; + this.m_bitmapsSize = 0; + //this.m_isTransparent = false; + //this.m_transparentColor = null; + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/BmpImage.java b/fop-0_14_0_regions/src/org/apache/fop/image/BmpImage.java new file mode 100644 index 000000000..6c9ac0005 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/BmpImage.java @@ -0,0 +1,248 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +/** + * FopImage object for BMP images. + * @author Art WELCH + * @see AbstractFopImage + * @see FopImage + */ + +package org.apache.fop.image; + +//Java +import java.net.URL; +import java.io.InputStream; +import java.io.IOException; + +// FOP +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.pdf.PDFColor; +import org.apache.fop.image.analyser.ImageReader; + +public class BmpImage extends AbstractFopImage +{ + public BmpImage(URL href) throws FopImageException { + super(href); + } + + public BmpImage(URL href, ImageReader imgReader) { + super(href, imgReader); + } + + protected void loadImage() throws FopImageException + { + int wpos=18; + int hpos=22; //offset positioning for w and height in bmp files + int [] headermap = new int[54]; + int filepos = 0; + InputStream file = null; + byte palette[] = null; + try + { + file = this.m_href.openStream(); + boolean eof=false; + while ((!eof) && (filepos<54) ) + { + int input =file.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 = file.read(); + if ( input == -1 ) + eof = true; + else if ( count2 >= 0 ) + { + palette[countr * 3 + count2] = (byte)(input & 0xFF); + } + count2--; + filepos++; + } + countr++; + } + } + } + catch (IOException e) + { + throw new FopImageException("Error while loading image " + this.m_href.toString() + " : " + e.getClass() + " - " + e.getMessage()); + } + // gets h & w from headermap + this.m_width = headermap[wpos]+headermap[wpos+1]*256+headermap[wpos+2]*256*256+headermap[wpos+3]*256*256*256; + this.m_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.m_bitsPerPixel=headermap[28]; + this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); + int bytes; + if ( this.m_bitsPerPixel == 1 ) + bytes = (this.m_width + 7) / 8; + else if ( this.m_bitsPerPixel == 24 ) + bytes = this.m_width * 3; + else if ( this.m_bitsPerPixel == 4 || this.m_bitsPerPixel == 8 ) + bytes = this.m_width / (8 / this.m_bitsPerPixel); + else + throw new FopImageException("Image (" + this.m_href.toString() + ") has " + this.m_bitsPerPixel + " which is not a supported BMP format."); + if ( (bytes & 0x03) != 0 ) + { + bytes |= 0x03; + bytes++; + } + + // Should take care of the ColorSpace and bitsPerPixel + this.m_bitmapsSize = this.m_width * this.m_height * 3; + this.m_bitmaps = new byte[this.m_bitmapsSize]; + + int[] temp = new int[bytes * this.m_height]; + try + { + int input; + int count=0; + file.skip((long)(imagestart - filepos)); + while ( (input = file.read()) != -1 ) + temp[count++]=input; + file.close(); + } + catch (IOException e) + { + throw new FopImageException("Error while loading image " + this.m_href.toString() + " : " + e.getClass() + " - " + e.getMessage()); + } + + for ( int i = 0 ; i < this.m_height ; i++) + { + int x = 0; + int j = 0; + while ( j < bytes ) + { + int p = temp[(this.m_height - i - 1) * bytes + j]; + + if ( this.m_bitsPerPixel == 24 && x < this.m_width ) + { + int countr = 2; + do + { + this.m_bitmaps[3 * (i * this.m_width + x) + countr] = (byte)(temp[(this.m_height - i - 1) * bytes + j] & 0xFF); + j++; + } while ( --countr >= 0 ); + x++; + } + else if ( this.m_bitsPerPixel == 1 ) + { + for ( int countr = 0 ; countr < 8 && x < this.m_width ; countr++ ) + { + if ( (p & 0x80) != 0 ) + { + this.m_bitmaps[3 * (i * this.m_width + x)] = (byte)0xFF; + this.m_bitmaps[3 * (i * this.m_width + x) + 1] = (byte)0xFF; + this.m_bitmaps[3 * (i * this.m_width + x) + 2] = (byte)0xFF; + } + else + { + this.m_bitmaps[3 * (i * this.m_width + x)] = (byte)0; + this.m_bitmaps[3 * (i * this.m_width + x) + 1] = (byte)0; + this.m_bitmaps[3 * (i * this.m_width + x) + 2] = (byte)0; + } + p <<= 1; + x++; + } + j++; + } + else if ( this.m_bitsPerPixel == 4 ) + { + for ( int countr = 0 ; countr < 2 && x < this.m_width ; countr++ ) + { + int pal = ((p & 0xF0) >> 4) * 3; + this.m_bitmaps[3 * (i * this.m_width + x)] = palette[pal]; + this.m_bitmaps[3 * (i * this.m_width + x) + 1] = palette[pal + 1]; + this.m_bitmaps[3 * (i * this.m_width + x) + 2] = palette[pal + 2]; + p <<= 4; + x++; + } + j++; + } + else if ( this.m_bitsPerPixel == 8 ) + { + if ( x < this.m_width ) + { + p *= 3; + this.m_bitmaps[3 * (i * this.m_width + x)] = palette[p]; + this.m_bitmaps[3 * (i * this.m_width + x) + 1] = palette[p + 1]; + this.m_bitmaps[3 * (i * this.m_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 + // m_bitsPerPixel to 8. If I do not do this Acrobat is unable to read the resultant PDF, + // so we will hardcode this... + this.m_bitsPerPixel = 8; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/FopImage.java b/fop-0_14_0_regions/src/org/apache/fop/image/FopImage.java new file mode 100644 index 000000000..a3719a36b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/FopImage.java @@ -0,0 +1,105 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +//Author: Eric SCHAEFFER +//Description: represent an image object + +package org.apache.fop.image; + +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.pdf.PDFColor; +import org.apache.fop.pdf.PDFFilter; + +public interface FopImage { + // Init the object. + // If href protocol isn't file://, can load the entire image + // and keep it in memory. + // Should cache the input stream, and load data when needed. +// public FopImage(URL href) throws FopImageException; + + // Get image general properties. + // Methods throw exception because they can retrieve data + // when needed. + + // Ressource location + public String getURL(); + + // image size + public int getWidth() throws FopImageException; + public int getHeight() throws FopImageException; + + // DeviceGray, DeviceRGB, or DeviceCMYK + public ColorSpace getColorSpace() throws FopImageException; + + // bits per pixel + public int getBitsPerPixel() throws FopImageException; + + // For transparent images + public boolean isTransparent() throws FopImageException; + public PDFColor getTransparentColor() throws FopImageException; + + // get the image bytes, and bytes properties + + // get uncompressed image bytes + public byte[] getBitmaps() throws FopImageException; +// width * (bitsPerPixel / 8) * height, no ? + public int getBitmapsSize() throws FopImageException; + + // get compressed image bytes + // I don't know if we really need it, nor if it + // should be changed... + public byte[] getRessourceBytes() throws FopImageException; + public int getRessourceBytesSize() throws FopImageException; + // return null if no corresponding PDFFilter + public PDFFilter getPDFFilter() throws FopImageException; + + // release memory + public void close(); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/FopImageConsumer.java b/fop-0_14_0_regions/src/org/apache/fop/image/FopImageConsumer.java new file mode 100644 index 000000000..843fd7e7c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/FopImageConsumer.java @@ -0,0 +1,184 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +//Author: Eric SCHAEFFER +//Description: implement ImageConsumer for FopImage classes + +package org.apache.fop.image; + +// Java +import java.util.Hashtable; +import org.apache.fop.messaging.MessageHandler; +import java.awt.image.*; +import java.awt.*; + +import java.lang.reflect.Array; + +// CONSUMER CLASS +public class FopImageConsumer implements ImageConsumer { + protected int width = -1; + protected int height = -1; + protected Integer imageStatus = new Integer(-1); + protected int hints = 0; + protected Hashtable properties = null; + protected ColorModel cm = null; + protected ImageProducer ip = null; + + public FopImageConsumer(ImageProducer iprod) { + this.ip = iprod; + } + + public void imageComplete(int status) { +/* +MessageHandler.error("Status "); +if (status == ImageConsumer.COMPLETESCANLINES) { + MessageHandler.errorln("CompleteScanLines"); +} else if (status == ImageConsumer.IMAGEABORTED) { + MessageHandler.errorln("ImageAborted"); +} else if (status == ImageConsumer.IMAGEERROR) { + MessageHandler.errorln("ImageError"); +} else if (status == ImageConsumer.RANDOMPIXELORDER) { + MessageHandler.errorln("RandomPixelOrder"); +} else if (status == ImageConsumer.SINGLEFRAME) { + MessageHandler.errorln("SingleFrame"); +} else if (status == ImageConsumer.SINGLEFRAMEDONE) { + MessageHandler.errorln("SingleFrameDone"); +} else if (status == ImageConsumer.SINGLEPASS) { + MessageHandler.errorln("SinglePass"); +} else if (status == ImageConsumer.STATICIMAGEDONE) { + MessageHandler.errorln("StaticImageDone"); +} else if (status == ImageConsumer.TOPDOWNLEFTRIGHT) { + MessageHandler.errorln("TopDownLeftRight"); +} +*/ + synchronized(this.imageStatus) { + // Need to stop status if image done + if (this.imageStatus.intValue() != ImageConsumer.STATICIMAGEDONE) + this.imageStatus = new Integer(status); + } + } + + public void setColorModel(ColorModel model) { +//MessageHandler.errorln("setColorModel: " + model); + this.cm = model; + } + + public void setDimensions(int width, int height) { +//MessageHandler.errorln("setDimension: w=" + width + " h=" + height); + this.width = width; + this.height = height; + } + + public void setHints(int hintflags) { +//MessageHandler.errorln("setHints: " + hintflags); + this.hints = hintflags; + } + + public void setProperties(Hashtable props) { +//MessageHandler.errorln("setProperties: " + props); + this.properties = props; + } + + public void setPixels(int x, int y, int w, int h, + ColorModel model, byte[] pixels,int off, + int scansize) {} + + public void setPixels(int x, int y, int w, int h, + ColorModel model, int[] pixels, int off, + int scansize) {} + + public boolean isImageReady() throws 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 (this.imageStatus.intValue() == ImageConsumer.STATICIMAGEDONE) + return true; + + return false; + } + } + + public int getWidth() { + return this.width; + } + + public int getHeight() { + return this.height; + } + + public ColorModel getColorModel() { + return this.cm; + } + + 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) { + throw new Exception("Image grabbing interrupted : " + intex.getMessage()); + } + return tmpMap; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/FopImageException.java b/fop-0_14_0_regions/src/org/apache/fop/image/FopImageException.java new file mode 100644 index 000000000..15d9fc982 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/FopImageException.java @@ -0,0 +1,66 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +//Author: Eric SCHAEFFER +//Description: Image Exception + +package org.apache.fop.image; + +public class FopImageException extends Exception { + + public FopImageException() { + super(); + } + + public FopImageException(String message) { + super(message); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/FopImageFactory.java b/fop-0_14_0_regions/src/org/apache/fop/image/FopImageFactory.java new file mode 100644 index 000000000..abcd1b4dc --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/FopImageFactory.java @@ -0,0 +1,177 @@ +/*-- $Id$ -- + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image; + +// Java +import java.io.IOException; +import java.net.URL; +import java.net.MalformedURLException; +import java.lang.reflect.Constructor; +import java.util.Hashtable; + +// FOP +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.image.analyser.ImageReaderFactory; +import org.apache.fop.image.analyser.ImageReader; + +/** + * create FopImage objects (with a configuration file - not yet implemented). + * @author Eric SCHAEFFER + */ +public class FopImageFactory { + + private static Hashtable m_urlMap = new Hashtable(); + + /** + * create an FopImage objects. + * @param href image URL as a String + * @return a new FopImage object + * @exception java.net.MalformedURLException bad URL + * @exception FopImageException an error occured during construction + */ + public static FopImage Make(String href) + throws MalformedURLException, FopImageException { + + // Get the absolute URL + URL absoluteURL = null; + // try { + absoluteURL = new URL(href); + /* + } + catch (MalformedURLException e) { + // maybe relative + URL context_url = null; + try { + context_url = new URL(); // how to get the context URL ? + try { + absoluteURL = new URL(context_url, ref); + } + catch (MalformedURLException e_abs) { + // not found + MessageHandler.errorln( + "Invalid Image URL : " + + e_abs.getMessage() + + "(base URL " + context_url.toString() + ")" + ); + return null; + } + } + catch (MalformedURLException e_context) { + // pb context url + MessageHandler.errorln("Invalid Image URL - error on relative URL : " + e_context.getMessage()); + return null; + } + } + */ + + // check if already created + FopImage imageObject = + (FopImage) m_urlMap.get(absoluteURL.toString()); + if (imageObject != null) + return imageObject; + + // If not, check image type + ImageReader imgReader = null; + try { + imgReader = + ImageReaderFactory.Make(absoluteURL.openStream()); + } catch (Exception e) { + throw new FopImageException( + "Error while recovering Image Informations (" + + absoluteURL.toString() + ") : " + e.getMessage()); + } + if (imgReader == null) + throw new FopImageException("No ImageReader for this type of image (" + + absoluteURL.toString() + ")"); + // Associate mime-type to FopImage class + String imgMimeType = imgReader.getMimeType(); + String imgClassName = null; + if ("image/gif".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.GifJpegImage"; + } else if ("image/jpeg".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.GifJpegImage"; + } else if ("image/bmp".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.BmpImage"; + } else if ("image/png".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.JimiImage"; + } else if ("image/tga".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.JimiImage"; + } else if ("image/tiff".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.JimiImage"; + } else if ("image/svg-xml".equals(imgMimeType)) { + imgClassName = "org.apache.fop.image.SVGImage"; + } + if (imgClassName == null) + throw new FopImageException("Unsupported image type (" + + absoluteURL.toString() + ") : " + imgMimeType); + + // load the right image class + // return new + Object imageInstance = null; + Class imageClass = null; + try { + imageClass = Class.forName(imgClassName); + Class[] imageConstructorParameters = new Class[2]; + imageConstructorParameters[0] = Class.forName("java.net.URL"); + imageConstructorParameters[1] = Class.forName("org.apache.fop.image.analyser.ImageReader"); + Constructor imageConstructor = + imageClass.getDeclaredConstructor( + imageConstructorParameters); + Object[] initArgs = new Object[2]; + initArgs[0] = absoluteURL; + initArgs[1] = imgReader; + imageInstance = imageConstructor.newInstance(initArgs); + } catch (Exception ex) { + throw new FopImageException( + "Error creating FopImage object (" + + absoluteURL.toString() + ") : " + ex.getMessage()); + } + if (! (imageInstance instanceof org.apache.fop.image.FopImage)) { + throw new FopImageException( + "Error creating FopImage object (" + + absoluteURL.toString() + ") : " + "class " + + imageClass.getName() + " doesn't implement org.apache.fop.image.FopImage interface"); + } + m_urlMap.put(absoluteURL.toString(), imageInstance); + return (FopImage) imageInstance; + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/GifJpegImage.java b/fop-0_14_0_regions/src/org/apache/fop/image/GifJpegImage.java new file mode 100644 index 000000000..3b86c2fdf --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/GifJpegImage.java @@ -0,0 +1,173 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image; + +// Java +import java.net.URL; +import java.awt.image.ImageProducer; +import java.awt.image.ColorModel; +import java.awt.image.IndexColorModel; + +// FOP +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.pdf.PDFColor; +import org.apache.fop.image.analyser.ImageReader; + +/** + * FopImage object for GIF or JPEG images, using Java native classes. + * @author Eric SCHAEFFER + * @see AbstractFopImage + * @see FopImage + */ +public class GifJpegImage extends AbstractFopImage { + public GifJpegImage(URL href) throws FopImageException { + super(href); + } + + public GifJpegImage(URL href, ImageReader imgReader) { + super(href, imgReader); + } + + protected void loadImage() throws FopImageException { + int[] tmpMap = null; + try { + ImageProducer ip = (ImageProducer) this.m_href.getContent(); + FopImageConsumer consumer = new FopImageConsumer(ip); + ip.startProduction(consumer); + + while (! consumer.isImageReady()) { + Thread.sleep(500); + } + this.m_height = consumer.getHeight(); + this.m_width = consumer.getWidth(); + + try { + tmpMap = consumer.getImage(); + } catch (Exception ex) { + throw new FopImageException( + "Image grabbing interrupted : " + + ex.getMessage()); + } + + ColorModel cm = consumer.getColorModel(); + this.m_bitsPerPixel = 8; + //this.m_bitsPerPixel = cm.getPixelSize(); + this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); + if (cm.hasAlpha()) { + int transparencyType = cm.getTransparency(); // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT + if (transparencyType == java.awt.Transparency.OPAQUE) { + this.m_isTransparent = false; + } else if (transparencyType == + java.awt.Transparency.BITMASK) { + if (cm instanceof IndexColorModel) { + this.m_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.m_isTransparent = true; + this.m_transparentColor = new PDFColor( + (int)(reds[i] & 0xFF), + (int)(greens[i] & 0xFF), + (int)(blues[i] & 0xFF)); + break; + } + } + } else { + // TRANSLUCENT + /* + this.m_isTransparent = false; + for (int i = 0; i < this.m_width * this.m_height; i++) { + if (cm.getAlpha(tmpMap[i]) == 0) { + this.m_isTransparent = true; + this.m_transparentColor = new PDFColor(cm.getRed(tmpMap[i]), cm.getGreen(tmpMap[i]), cm.getBlue(tmpMap[i])); + break; + } + } + */ + // use special API... + this.m_isTransparent = false; + } + } else { + this.m_isTransparent = false; + } + } else { + this.m_isTransparent = false; + } + } catch (Exception ex) { + throw new FopImageException("Error while loading image " + + this.m_href.toString() + " : " + ex.getClass() + + " - " + ex.getMessage()); + } + + + // Should take care of the ColorSpace and bitsPerPixel + this.m_bitmapsSize = this.m_width * this.m_height * 3; + this.m_bitmaps = new byte[this.m_bitmapsSize]; + for (int i = 0; i < this.m_height; i++) { + for (int j = 0; j < this.m_width; j++) { + int p = tmpMap[i * this.m_width + j]; + int r = (p >> 16) & 0xFF; + int g = (p >> 8) & 0xFF; + int b = (p) & 0xFF; + this.m_bitmaps[3 * (i * this.m_width + j)] = + (byte)(r & 0xFF); + this.m_bitmaps[3 * (i * this.m_width + j) + 1] = + (byte)(g & 0xFF); + this.m_bitmaps[3 * (i * this.m_width + j) + 2] = + (byte)(b & 0xFF); + } + } + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/ImageArea.java b/fop-0_14_0_regions/src/org/apache/fop/image/ImageArea.java new file mode 100644 index 000000000..9ff0698e2 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/ImageArea.java @@ -0,0 +1,107 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +/* modified by JKT to integrate into 0.12.0 */ + +package org.apache.fop.image; + +import org.apache.fop.layout.*; +import org.apache.fop.render.Renderer; + +import java.util.Vector; +import java.util.Enumeration; + +public class ImageArea extends Area { + + protected int xOffset = 0; + protected FopImage image; + + public ImageArea(FontState fontState, FopImage img, + int AllocationWidth, int width, int height, + int startIndent, int endIndent, int align) { + super(fontState,width,height); + this.currentHeight = height; + this.contentRectangleWidth = width; + this.image = img; + + switch (align) { + case 1: + xOffset = startIndent; + break; + case 2: + if (endIndent == 0) + endIndent = AllocationWidth; + xOffset = (endIndent - width); + break; + case 3: + case 4: + if (endIndent == 0) + endIndent = AllocationWidth; + xOffset = startIndent + ((endIndent - startIndent) - width)/2; + break; + } + } + + public int getXOffset() { + return this.xOffset; + } + + public FopImage getImage() { + return this.image; + } + + public void render(Renderer renderer) { + renderer.renderImageArea(this); + } + + public int getImageHeight() { + return currentHeight; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/JimiImage.java b/fop-0_14_0_regions/src/org/apache/fop/image/JimiImage.java new file mode 100644 index 000000000..049098ede --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/JimiImage.java @@ -0,0 +1,179 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image; + +// Java +import java.net.URL; +import java.awt.image.ImageProducer; +import java.awt.image.ColorModel; +import java.awt.image.IndexColorModel; + +// Jimi +import com.sun.jimi.core.*; + +// FOP +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.pdf.PDFColor; +import org.apache.fop.image.analyser.ImageReader; + +/** + * FopImage object for several images types, using Jimi. + * See Jimi documentation for supported image types. + * @author Eric SCHAEFFER + * @see AbstractFopImage + * @see FopImage + */ +public class JimiImage extends AbstractFopImage { + public JimiImage(URL href) throws FopImageException { + super(href); + } + + public JimiImage(URL href, ImageReader imgReader) { + super(href, imgReader); + } + + protected void loadImage() throws FopImageException { + int[] tmpMap = null; + try { + ImageProducer ip = + Jimi.getImageProducer(this.m_href.openStream(), + Jimi.SYNCHRONOUS | Jimi.IN_MEMORY); + FopImageConsumer consumer = new FopImageConsumer(ip); + ip.startProduction(consumer); + + while (! consumer.isImageReady()) { + Thread.sleep(500); + } + this.m_height = consumer.getHeight(); + this.m_width = consumer.getWidth(); + + try { + tmpMap = consumer.getImage(); + } catch (Exception ex) { + throw new FopImageException( + "Image grabbing interrupted : " + + ex.getMessage()); + } + + ColorModel cm = consumer.getColorModel(); + this.m_bitsPerPixel = 8; + //this.m_bitsPerPixel = cm.getPixelSize(); + this.m_colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); + if (cm.hasAlpha()) { + int transparencyType = cm.getTransparency(); // java.awt.Transparency. BITMASK or OPAQUE or TRANSLUCENT + if (transparencyType == java.awt.Transparency.OPAQUE) { + this.m_isTransparent = false; + } else if (transparencyType == + java.awt.Transparency.BITMASK) { + if (cm instanceof IndexColorModel) { + this.m_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.m_isTransparent = true; + this.m_transparentColor = new PDFColor( + (int)(reds[i] & 0xFF), + (int)(greens[i] & 0xFF), + (int)(blues[i] & 0xFF)); + break; + } + } + } else { + // TRANSLUCENT + /* + this.m_isTransparent = false; + for (int i = 0; i < this.m_width * this.m_height; i++) { + if (cm.getAlpha(tmpMap[i]) == 0) { + this.m_isTransparent = true; + this.m_transparentColor = new PDFColor(cm.getRed(tmpMap[i]), cm.getGreen(tmpMap[i]), cm.getBlue(tmpMap[i])); + break; + } + } + */ + // use special API... + this.m_isTransparent = false; + } + } else { + this.m_isTransparent = false; + } + } else { + this.m_isTransparent = false; + } + } catch (Exception ex) { + throw new FopImageException("Error while loading image " + + this.m_href.toString() + " : " + ex.getClass() + + " - " + ex.getMessage()); + } + + + // Should take care of the ColorSpace and bitsPerPixel + this.m_bitmapsSize = this.m_width * this.m_height * 3; + this.m_bitmaps = new byte[this.m_bitmapsSize]; + for (int i = 0; i < this.m_height; i++) { + for (int j = 0; j < this.m_width; j++) { + int p = tmpMap[i * this.m_width + j]; + int r = (p >> 16) & 0xFF; + int g = (p >> 8) & 0xFF; + int b = (p) & 0xFF; + this.m_bitmaps[3 * (i * this.m_width + j)] = + (byte)(r & 0xFF); + this.m_bitmaps[3 * (i * this.m_width + j) + 1] = + (byte)(g & 0xFF); + this.m_bitmaps[3 * (i * this.m_width + j) + 2] = + (byte)(b & 0xFF); + } + } + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/SVGImage.java b/fop-0_14_0_regions/src/org/apache/fop/image/SVGImage.java new file mode 100644 index 000000000..6398f2c9f --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/SVGImage.java @@ -0,0 +1,121 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image; + +// Java +import java.net.URL; +import org.w3c.dom.svg.SVGDocument; + +// FOP +import org.apache.fop.svg.SVGDriver; +import org.apache.fop.messaging.*; +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.pdf.PDFColor; +import org.apache.fop.image.analyser.ImageReader; + +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; + +/** + * @see AbstractFopImage + * @see FopImage + */ +public class SVGImage extends AbstractFopImage { + SVGDocument doc; + + public SVGImage(URL href) throws FopImageException { + super(href); + } + + public SVGImage(URL href, ImageReader imgReader) { + super(href, imgReader); + } + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + public static XMLReader createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (XMLReader) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } + + protected void loadImage() throws FopImageException { + try { + SVGDriver driver = new SVGDriver(); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + XMLReader parser = createParser(); + driver.buildSVGTree(parser, new InputSource(this.m_href.toString())); + doc = driver.getSVGDocument(); + } catch (Exception e) { + MessageHandler.errorln("ERROR LOADING EXTERNAL SVG: " + e.getMessage()); + } + } + + public SVGDocument getSVGDocument() throws FopImageException + { + if(doc == null) + this.loadImage(); + return doc; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/AbstractImageReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/AbstractImageReader.java new file mode 100644 index 000000000..0bcf7bab4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/AbstractImageReader.java @@ -0,0 +1,83 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * Base class implementing ImageReader. + * @author Pankaj Narula + * @version 1.0 + * @see ImageReader + */ +public abstract class AbstractImageReader implements ImageReader { + /** + * Image width. + */ + protected int width = 0; + /** + * Image height. + */ + protected int height = 0; + /** + * Image stream. + */ + protected BufferedInputStream imageStream = null; + + public abstract boolean verifySignature(BufferedInputStream fis) throws IOException; + + public int getHeight() { + return this.height; + } + + public int getWidth() { + return this.width; + } + + public abstract String getMimeType(); + + public BufferedInputStream getInputStream() { + return this.imageStream; + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/BMPReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/BMPReader.java new file mode 100644 index 000000000..1ab5a8256 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/BMPReader.java @@ -0,0 +1,107 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * ImageReader object for BMP image type. + * @author Pankaj Narula + * @version 1.0 + */ +public class BMPReader extends AbstractImageReader { + static protected final int BMP_SIG_LENGTH = 26; + + protected byte[] header; + + public boolean verifySignature(BufferedInputStream fis) + throws IOException { + this.imageStream = fis; + this.setDefaultHeader(); + boolean supported = ((header[0] == (byte) 0x42) && + (header[1] == (byte) 0x4d)); + if (supported) { + setDimension(); + return true; + } else + return false; + } + + public String getMimeType() { + return "image/bmp"; + } + + protected void setDimension() { + //little endian notation + int byte1 = header[18] & 0xff; + int byte2 = header[19] & 0xff; + int byte3 = header[20] & 0xff; + int byte4 = header[21] & 0xff; + long l = (long)((byte4 << 24) | (byte3 << 16) | + (byte2 << 8) | byte1); + this.width = (int)(l & 0xffffffff); + + byte1 = header[22] & 0xff; + byte2 = header[23] & 0xff; + byte3 = header[24] & 0xff; + byte4 = header[25] & 0xff; + l = (long)((byte4 << 24) | (byte3 << 16) | (byte2 << 8) | + byte1); + this.height = (int)(l & 0xffffffff); + } + + protected void setDefaultHeader() throws IOException { + this.header = new byte[BMP_SIG_LENGTH]; + try { + this.imageStream.mark(BMP_SIG_LENGTH + 1); + this.imageStream.read(header); + this.imageStream.reset(); + } catch (IOException ex) { + try { + this.imageStream.reset(); + } catch (IOException exbis) {} + throw ex; + } + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/GIFReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/GIFReader.java new file mode 100644 index 000000000..a1973e81a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/GIFReader.java @@ -0,0 +1,100 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * ImageReader object for GIF image type. + * @author Pankaj Narula + * @version 1.0 + */ +public class GIFReader extends AbstractImageReader { + static protected final int GIF_SIG_LENGTH = 10; + protected byte[] header; + + public boolean verifySignature(BufferedInputStream fis) + throws IOException { + this.imageStream = fis; + this.setDefaultHeader(); + 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) { + setDimension(); + return true; + } else + return false; + } + + public String getMimeType() { + return "image/gif"; + } + + protected void setDimension() { + //little endian notation + int byte1 = header[6] & 0xff; + int byte2 = header[7] & 0xff; + this.width = ((byte2 << 8) | byte1) & 0xffff; + + byte1 = header[8] & 0xff; + byte2 = header[9] & 0xff; + this.height = ((byte2 << 8) | byte1) & 0xffff; + } + + protected void setDefaultHeader() throws IOException { + this.header = new byte[GIF_SIG_LENGTH]; + try { + this.imageStream.mark(GIF_SIG_LENGTH + 1); + this.imageStream.read(header); + this.imageStream.reset(); + } catch (IOException ex) { + try { + this.imageStream.reset(); + } catch (IOException exbis) {} + throw ex; + } + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReader.java new file mode 100644 index 000000000..bdeffc35e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReader.java @@ -0,0 +1,86 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * ImageReader objects read image headers to determine the image size. + * @author Pankaj Narula + * @version 1.0 + */ +public interface ImageReader { + /** + * Verify image type. + * @param bis Image buffered input stream + * @return true if image type is the handled one + * @exception IOException io error + */ + public boolean verifySignature(BufferedInputStream bis) + throws IOException; + + /** + * Return the used InputStream. + * @return BufferedInputStream used to verify image type + */ + public BufferedInputStream getInputStream(); + + /** + * Return correspondig mime type. + * @return image mime type + */ + public String getMimeType(); + + /** + * Return the image height. + * @return image height + */ + public int getHeight(); + + /** + * Return the image width. + * @return image width + */ + public int getWidth(); +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReaderFactory.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReaderFactory.java new file mode 100644 index 000000000..f4f36a6df --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/ImageReaderFactory.java @@ -0,0 +1,96 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.InputStream; +import java.io.BufferedInputStream; +import java.io.IOException; +import java.util.Iterator; +import java.util.ArrayList; + +// FOP +import org.apache.fop.image.FopImageException; + +/** + * Factory for ImageReader objects. + * @author Pankaj Narula + * @version 1.0 + */ +public class ImageReaderFactory { + static protected ArrayList formats = null; + + /** + * ImageReader maker. + * @param in image input stream + * @return ImageReader object + * @exception FopImageException an error occured during creation or + * image type is not supported + */ + static public ImageReader Make(InputStream in) + throws FopImageException { + + // need to use a config file and remove static methods + formats = new ArrayList(); + formats.add(new JPEGReader()); + formats.add(new BMPReader()); + formats.add(new GIFReader()); + formats.add(new PNGReader()); + formats.add(new SVGReader()); + // + + ImageReader reader; + BufferedInputStream bis = new BufferedInputStream(in); + Iterator itr = formats.iterator(); + try { + while (itr.hasNext()) { + reader = (ImageReader) itr.next(); + if (reader.verifySignature(bis)) { + return reader; + } + } + } catch (IOException ex) { + throw new FopImageException(ex.getMessage()); + } + return null; + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/JPEGReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/JPEGReader.java new file mode 100644 index 000000000..e7370ae4e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/JPEGReader.java @@ -0,0 +1,161 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * ImageReader object for JPEG image type. + * @author Pankaj Narula + * @version 1.0 + */ +public class JPEGReader extends AbstractImageReader { + /** + * 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. + */ + static protected final int MARK = 0xff; //Beginneing of a Marker + static protected final int NULL = 0x00; //Special case for 0xff00 + static protected final int SOF1 = 0xc0; //Baseline DCT + static protected final int SOF2 = 0xc1; //Extended Sequential DCT + static protected final int SOF3 = 0xc2; //Progrssive DCT only PDF 1.3 + static protected final int SOFA = 0xca; //Progressice DCT only PDF 1.3 + static protected final int APP0 = 0xe0; //Application marker, JFIF + static protected final int APPF = 0xef; //Application marker + static protected final int SOS = 0xda; //Start of Scan + static protected final int SOI = 0xd8; //start of Image + static protected final int JPG_SIG_LENGTH = 2; + + protected byte[] header; + + public boolean verifySignature(BufferedInputStream fis) + throws IOException { + this.imageStream = fis; + this.setDefaultHeader(); + boolean supported = ((header[0] == (byte) 0xff) && + (header[1] == (byte) 0xd8)); + if (supported) { + setDimension(); + return true; + } else + return false; + } + + public String getMimeType() { + return "image/jpeg"; + } + + protected void setDefaultHeader() throws IOException { + this.header = new byte[JPG_SIG_LENGTH]; + try { + this.imageStream.mark(JPG_SIG_LENGTH + 1); + this.imageStream.read(header); + this.imageStream.reset(); + } catch (IOException ex) { + try { + this.imageStream.reset(); + } catch (IOException exbis) {} + throw ex; + } + } + + protected void setDimension() throws IOException { + try { + int marker = NULL; + long length, skipped; + outer: + while (imageStream.available() > 0) { + while ((marker = imageStream.read()) != MARK) { + ; + } + do { + marker = imageStream.read(); + } while (marker == MARK) + ; + switch (marker) { + case SOI : + break; + case NULL: + break; + case SOF1: + case SOF2: + case SOF3: //SOF3 and SOFA are only supported by PDF 1.3 + case SOFA: + this.skip(3); + this.height = this.read2bytes(); + this.width = this.read2bytes(); + break outer; + default: + length = this.read2bytes(); + skipped = this.skip(length - 2); + if (skipped != length - 2) + throw new IOException("Skipping Error"); + } + } + } catch (IOException ioe) { + try { + this.imageStream.reset(); + } catch (IOException exbis) {} + throw ioe; + } + } + + protected int read2bytes() throws IOException { + int byte1 = imageStream.read(); + int byte2 = imageStream.read(); + return (int)((byte1 << 8) | byte2); + } + + protected long skip(long n) throws IOException { + long discarded = 0; + while (discarded != n) { + imageStream.read(); + discarded++; + } + return discarded; //scope for exception + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/PNGReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/PNGReader.java new file mode 100644 index 000000000..2d617454e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/PNGReader.java @@ -0,0 +1,112 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +/** + * ImageReader object for PNG image type. + * @author Pankaj Narula + * @version 1.0 + */ +public class PNGReader extends AbstractImageReader { + static protected final int PNG_SIG_LENGTH = 24; + protected byte[] header; + + public boolean verifySignature(BufferedInputStream fis) throws IOException { + this.imageStream = fis; + this.setDefaultHeader(); + 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) { + setDimension(); + return true; + } else + return false; + } + + public String getMimeType() { + return "image/png"; + } + + protected void setDimension() { + //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); + this.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); + this.height = (int)(l); + + } + + protected void setDefaultHeader() throws IOException { + this.header = new byte[PNG_SIG_LENGTH]; + try { + this.imageStream.mark(PNG_SIG_LENGTH + 1); + this.imageStream.read(header); + this.imageStream.reset(); + } catch (IOException ex) { + try { + this.imageStream.reset(); + } catch (IOException exbis) {} + throw ex; + } + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/image/analyser/SVGReader.java b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/SVGReader.java new file mode 100644 index 000000000..58fa26f9d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/image/analyser/SVGReader.java @@ -0,0 +1,100 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + */ + +package org.apache.fop.image.analyser; + +// Java +import java.io.BufferedInputStream; +import java.io.IOException; + +import org.w3c.dom.svg.SVGDocument; +import org.w3c.dom.svg.SVGSVGElement; + +// FOP +import org.apache.fop.svg.SVGDriver; +import org.apache.fop.messaging.*; +import org.apache.fop.image.SVGImage; + +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; + +/** + * ImageReader object for SVG document image type. + */ +public class SVGReader extends AbstractImageReader { + + public boolean verifySignature(BufferedInputStream fis) throws IOException { + this.imageStream = fis; + return loadImage(); + } + + public String getMimeType() { + return "image/svg-xml"; + } + + /** + * This means the external svg document will be loaded twice. + * Possibly need a slightly different design for the image stuff. + */ + protected boolean loadImage() + { + // parse document and get the size attributes of the svg element + try { + // should check the stream contains text data + SVGDriver driver = new SVGDriver(); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + XMLReader parser = SVGImage.createParser(); + driver.buildSVGTree(parser, new InputSource(this.imageStream)); + SVGDocument doc = driver.getSVGDocument(); + SVGSVGElement svg = doc.getRootElement(); + this.width = (int)svg.getWidth().getBaseVal().getValue() * 1000; + this.height = (int)svg.getHeight().getBaseVal().getValue() * 1000; + return true; + } catch (Exception e) { + //MessageHandler.errorln("ERROR LOADING EXTERNAL SVG: " + e.getMessage()); + // assuming any exception means this document is not svg + // or could not be loaded for some reason + return false; + } + } + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/Area.java b/fop-0_14_0_regions/src/org/apache/fop/layout/Area.java new file mode 100644 index 000000000..bed0a247e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/Area.java @@ -0,0 +1,301 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.layout; + +// FOP +import org.apache.fop.datatypes.*; + +// Java +import java.util.Vector; + +abstract public class Area extends Box { + + /* nominal font size and nominal font family incorporated in + fontState */ + protected FontState fontState; + + protected Vector children = new Vector(); + + /* max size in line-progression-direction */ + protected int maxHeight; + + protected int currentHeight = 0; + + // used to keep track of the current x position within a table. Required for drawing rectangle links. + protected int tableCellXOffset = 0; + + // used to keep track of the absolute height on the page. Required for drawing rectangle links. + private int absoluteHeight = 0; + + protected int contentRectangleWidth; + + protected int allocationWidth; + + /* the page this area is on */ + protected Page page; + + protected ColorType backgroundColor; + + private IDReferences idReferences; + protected int paddingTop; + protected int paddingLeft; + protected int paddingBottom; + protected int paddingRight; + + public int borderWidthTop; + public int borderWidthLeft; + public int borderWidthRight; + public int borderWidthBottom; + public int borderStyleTop; + public int borderStyleLeft; + public int borderStyleRight; + public int borderStyleBottom; + public ColorType borderColorTop; + public ColorType borderColorLeft; + public ColorType borderColorRight; + public ColorType borderColorBottom; + + public Area (FontState fontState) { + this.fontState = fontState; + } + + public Area (FontState fontState, int allocationWidth, int maxHeight) { + this.fontState = fontState; + this.allocationWidth = allocationWidth; + this.contentRectangleWidth = allocationWidth; + this.maxHeight = maxHeight; + } + + public void addChild(Box child) { + this.children.addElement(child); + child.parent = this; + } + + public void addChildAtStart(Box child) { + this.children.insertElementAt(child,0); + child.parent = this; + } + + public void addDisplaySpace(int size) { + this.addChild(new DisplaySpace(size)); + this.absoluteHeight += size; + this.currentHeight += size; + } + + public FontInfo getFontInfo() { + return this.page.getFontInfo(); + } + + public void end() { + } + + public int getAllocationWidth() { + return this.allocationWidth - paddingLeft - paddingRight - borderWidthLeft - borderWidthRight; + } + + public Vector getChildren() { + return this.children; + } + + public int getContentWidth() { + return contentRectangleWidth - paddingLeft - paddingRight - borderWidthLeft - borderWidthRight; + } + + public FontState getFontState() { + return this.fontState; + } + + public int getContentHeight() { + return this.currentHeight; + } + + public int getHeight() { + return this.currentHeight + paddingTop + paddingBottom + borderWidthTop + borderWidthBottom; + } + + public int getMaxHeight() { + return this.maxHeight - paddingTop - paddingBottom - borderWidthTop - borderWidthBottom; + } + + public Page getPage() { + return this.page; + } + + public ColorType getBackgroundColor() { + return this.backgroundColor; + } + + public int getPaddingTop() { + return this.paddingTop; + } + + public int getPaddingLeft() { + return this.paddingLeft; + } + + public int getPaddingBottom() { + return this.paddingBottom; + } + + public int getPaddingRight() { + return this.paddingRight; + } + + public int getTableCellXOffset() + { + return tableCellXOffset; + } + + public void setTableCellXOffset(int offset) + { + tableCellXOffset=offset; + } + + public int getAbsoluteHeight() + { + return absoluteHeight; + } + + public void setAbsoluteHeight(int value) + { + absoluteHeight=value; + } + + public void increaseAbsoluteHeight(int value) + { + absoluteHeight+=value; + } + + public void increaseHeight(int amount) { + this.currentHeight += amount; + this.absoluteHeight += amount; + } + + public void removeChild(Area area) { + this.currentHeight -= area.getHeight(); + this.absoluteHeight -= area.getHeight(); + this.children.removeElement(area); + } + + public void remove() { + this.parent.removeChild(this); + } + + public void setPage(Page page) { + this.page = page; + } + + public void setBackgroundColor(ColorType bgColor) { + this.backgroundColor = bgColor; + } + + public void setPadding(int top, int left, int bottom, int right) { + this.paddingTop = top; + this.paddingLeft = left; + this.paddingBottom = bottom; + this.paddingRight = right; + } + + public void setBorderWidth(int top, int left, int bottom, int right) { + this.borderWidthTop = top; + this.borderWidthLeft = left; + this.borderWidthBottom = bottom; + this.borderWidthRight = right; + } + + public void setBorderStyle(int top, int left, int bottom, int right) { + this.borderStyleTop = top; + this.borderStyleLeft = left; + this.borderStyleBottom = bottom; + this.borderStyleRight = right; + } + + public void setBorderColor(ColorType top, ColorType left, ColorType bottom, ColorType right) { + this.borderColorTop = top; + this.borderColorLeft = left; + this.borderColorBottom = bottom; + this.borderColorRight = right; + } + + public int spaceLeft() { + return maxHeight - currentHeight; + } + + public void start() { + } + + public void setHeight(int height) { + if (height > currentHeight) + currentHeight = height; + absoluteHeight = height; + if (currentHeight > getMaxHeight()) + currentHeight = getMaxHeight(); + absoluteHeight = getMaxHeight(); + } + + public void setMaxHeight(int height) { + this.maxHeight = height; + } + + public Area getParent() { + return this.parent; + } + + public void setIDReferences(IDReferences idReferences) { + this.idReferences = idReferences; + } + + public IDReferences getIDReferences() { + return idReferences; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/AreaContainer.java b/fop-0_14_0_regions/src/org/apache/fop/layout/AreaContainer.java new file mode 100644 index 000000000..cdd66f62b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/AreaContainer.java @@ -0,0 +1,94 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +// FOP +import org.apache.fop.render.Renderer; +import org.apache.fop.fo.properties.*; + +// Java +import java.util.Vector; +import java.util.Enumeration; + +public class AreaContainer extends Area { + + private int xPosition; // should be able to take value 'left' and 'right' too + private int yPosition; // should be able to take value 'top' and 'bottom' too + private int position; + + public AreaContainer(FontState fontState, int xPosition, int yPosition, int allocationWidth, int maxHeight, int position) { + super(fontState, allocationWidth, maxHeight); + this.xPosition = xPosition; + this.yPosition = yPosition; + this.position = position; + } + + public void render(Renderer renderer) { + renderer.renderAreaContainer(this); + } + + public int getPosition() { + return position; + } + + public int getXPosition() { + return xPosition + this.paddingLeft + this.borderWidthLeft; + } + + public void setXPosition(int value) + { + xPosition=value; + } + + public int getYPosition() { + return yPosition + this.paddingTop + this.borderWidthTop; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/AreaTree.java b/fop-0_14_0_regions/src/org/apache/fop/layout/AreaTree.java new file mode 100644 index 000000000..5b6574346 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/AreaTree.java @@ -0,0 +1,98 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +// FOP +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.flow.StaticContent; +import org.apache.fop.svg.*; +import org.apache.fop.render.Renderer; +import org.apache.fop.datatypes.IDReferences; + +// Java +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Enumeration; +import java.util.Stack; +import java.util.Vector; + +public class AreaTree { + + /** object containing information on available fonts, including + metrics */ + FontInfo fontInfo; + + /* list of all the pages */ + Vector pageList = new Vector(); + + IDReferences idReferences = new IDReferences(); + + public void setFontInfo(FontInfo fontInfo) { + this.fontInfo = fontInfo; + } + + public FontInfo getFontInfo() { + return this.fontInfo; + } + + public void addPage(Page page) { + this.pageList.addElement(page); + } + + public Vector getPages() { + return this.pageList; + } + + public IDReferences getIDReferences() + { + return idReferences; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/BlockArea.java b/fop-0_14_0_regions/src/org/apache/fop/layout/BlockArea.java new file mode 100644 index 000000000..af8f02134 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/BlockArea.java @@ -0,0 +1,228 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +// FOP +import org.apache.fop.render.Renderer; + +// Java +import java.util.Vector; +import java.util.Enumeration; + +public class BlockArea extends Area { + + /* relative to area container */ + protected int startIndent; + protected int endIndent; + + /* first line startIndent modifier */ + protected int textIndent; + + protected int lineHeight; + + protected int halfLeading; + + + /* text-align of all but the last line */ + protected int align; + + /* text-align of the last line */ + protected int alignLastLine; + + protected LineArea currentLineArea; + protected LinkSet currentLinkSet; + + /* have any line areas been used? */ + protected boolean hasLines = false; + + public BlockArea(FontState fontState, int allocationWidth, + int maxHeight, int startIndent, int endIndent, + int textIndent, int align, int alignLastLine, + int lineHeight) { + super(fontState, allocationWidth, maxHeight); + + this.startIndent = startIndent; + this.endIndent = endIndent; + this.textIndent = textIndent; + this.contentRectangleWidth = allocationWidth - startIndent - endIndent; + this.align = align; + this.alignLastLine = alignLastLine; + this.lineHeight = lineHeight; + + if (fontState != null) + this.halfLeading = (lineHeight - fontState.getFontSize())/2; + } + + public void render(Renderer renderer) { + renderer.renderBlockArea(this); + } + + public void addLineArea(LineArea la) { + if (!la.isEmpty()) { + this.addDisplaySpace(this.halfLeading); + int size = la.getHeight(); + this.addChild(la); + this.increaseHeight(size); + this.addDisplaySpace(this.halfLeading); + } + } + + public int addPageNumberCitation(FontState fontState, float red, float green, + float blue, int wrapOption, LinkSet ls, + int whiteSpaceTreatment, String refid) { + + this.currentLineArea.changeFont(fontState); + this.currentLineArea.changeColor(red, green, blue); + this.currentLineArea.changeWrapOption(wrapOption); + this.currentLineArea.changeWhiteSpaceTreatment(whiteSpaceTreatment); + + if (ls != null) { + this.currentLinkSet = ls; + ls.setYOffset(currentHeight); + } + + this.currentLineArea.addPageNumberCitation(refid,ls); + this.hasLines = true; + + return -1; + + } + + public int addText(FontState fontState, float red, float green, + float blue, int wrapOption, LinkSet ls, + int whiteSpaceTreatment, char data[], + int start, int end) { + int ts, te; + char[] ca; + + ts = start; + te = end; + ca = data; + + if (currentHeight + currentLineArea.getHeight() > maxHeight) { + return start; + } + + this.currentLineArea.changeFont(fontState); + this.currentLineArea.changeColor(red, green, blue); + this.currentLineArea.changeWrapOption(wrapOption); + this.currentLineArea.changeWhiteSpaceTreatment(whiteSpaceTreatment); + + if (ls != null) { + this.currentLinkSet = ls; + ls.setYOffset(currentHeight); + } + + ts = this.currentLineArea.addText(ca, ts, te, ls); + this.hasLines = true; + + while (ts != -1) { + this.currentLineArea.align(this.align); + this.addLineArea(this.currentLineArea); + this.currentLineArea = new + LineArea(fontState, lineHeight, halfLeading, + allocationWidth, startIndent, endIndent); + if (currentHeight + currentLineArea.getHeight() > + this.maxHeight) { + return ts; + } + this.currentLineArea.changeFont(fontState); + this.currentLineArea.changeColor(red, green, blue); + this.currentLineArea.changeWrapOption(wrapOption); + this.currentLineArea.changeWhiteSpaceTreatment(whiteSpaceTreatment); + if (ls != null) { + ls.setYOffset(currentHeight); + } + + ts = this.currentLineArea.addText(ca, ts, te, ls); + } + return -1; + } + + public void end() { + if (this.hasLines) { + this.currentLineArea.addPending(); + this.currentLineArea.align(this.alignLastLine); + this.addLineArea(this.currentLineArea); + } + } + + public void start() { + currentLineArea = new LineArea(fontState, lineHeight, + halfLeading, allocationWidth, + startIndent + textIndent, + endIndent); + } + + public int getEndIndent() { + return endIndent; + } + + public int getStartIndent() { + return startIndent + paddingLeft + borderWidthLeft; + } + + public void setIndents(int startIndent, int endIndent) { + this.startIndent = startIndent; + this.endIndent = endIndent; + this.contentRectangleWidth = allocationWidth - startIndent - endIndent; + } + + public int spaceLeft() { + return maxHeight - currentHeight; + } + + public int getHalfLeading() + { + return halfLeading; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/Box.java b/fop-0_14_0_regions/src/org/apache/fop/layout/Box.java new file mode 100644 index 000000000..c71724247 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/Box.java @@ -0,0 +1,59 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; + +abstract public class Box { + protected Area parent; + protected AreaTree areaTree; + abstract public void render(Renderer renderer); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/DisplaySpace.java b/fop-0_14_0_regions/src/org/apache/fop/layout/DisplaySpace.java new file mode 100644 index 000000000..abb439573 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/DisplaySpace.java @@ -0,0 +1,68 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; + +public class DisplaySpace extends Space { + private int size; + + public DisplaySpace(int size) { + this.size = size; + } + public int getSize() { + return size; + } + + public void render(Renderer renderer) { + renderer.renderDisplaySpace(this); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/FontInfo.java b/fop-0_14_0_regions/src/org/apache/fop/layout/FontInfo.java new file mode 100644 index 000000000..869a54e98 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/FontInfo.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import java.util.Hashtable; +import org.apache.fop.messaging.MessageHandler; +import java.util.Enumeration; + +import org.apache.fop.apps.FOPException; + +public class FontInfo { + + Hashtable triplets; // look up a font-triplet to find a font-name + Hashtable fonts; // look up a font-name to get a font (that implements FontMetric at least) + + public FontInfo() { + this.triplets = new Hashtable(); + this.fonts = new Hashtable(); + } + + public void addFontProperties(String name, String family, String style, String weight) { + /* add the given family, style and weight as a lookup for the font + with the given name */ + + String key = family + "," + style + "," + weight; + this.triplets.put(key,name); + } + + public void addMetrics(String name, FontMetric metrics) { + // add the given metrics as a font with the given name + + this.fonts.put(name,metrics); + } + + public String fontLookup(String family, String style, String weight) throws FOPException { + // given a family, style and weight, return the font name + int i; + + try { + i = Integer.parseInt(weight); + } catch (NumberFormatException e) { + i = 0; + } + + if (i > 600) + weight = "bold"; + else if (i > 0) + weight = "normal"; + + String key = family + "," + style + "," + weight; + + String f = (String)this.triplets.get(key); + if (f == null) { + f = (String)this.triplets.get("any," + style + "," + weight); + if (f == null) { + f = (String)this.triplets.get("any,normal,normal"); + if (f == null) { + throw new FOPException("no default font defined by OutputConverter"); + } + MessageHandler.errorln("WARNING: defaulted font to any,normal,normal"); + } + MessageHandler.errorln("WARNING: unknown font "+family+" so defaulted font to any"); + } + return f; + } + + public Hashtable getFonts() { + return this.fonts; + } + + public FontMetric getMetricsFor(String fontName) throws FOPException { + return (FontMetric)fonts.get(fontName); + } + + public FontMetric getMetricsFor(String family, String style, String weight) throws FOPException { + // given a family, style and weight, return the metric + + return (FontMetric)fonts.get(fontLookup(family,style,weight)); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/FontMetric.java b/fop-0_14_0_regions/src/org/apache/fop/layout/FontMetric.java new file mode 100644 index 000000000..68398b0a9 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/FontMetric.java @@ -0,0 +1,67 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +/** + * interface for font metric classes + */ +public interface FontMetric { + int getAscender(); + int getCapHeight(); + int getDescender(); + int getXHeight(); + + /** + * return width (in 1/1000ths of point size) of character at + * code point i + */ + public int width(int i); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/FontState.java b/fop-0_14_0_regions/src/org/apache/fop/layout/FontState.java new file mode 100644 index 000000000..c9dcbbbc4 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/FontState.java @@ -0,0 +1,119 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.apps.FOPException; + +public class FontState { + + protected FontInfo fontInfo; + private String fontName; + private int fontSize; + private String fontFamily; + private String fontStyle; + private String fontWeight; + private FontMetric metric; + + public FontState(FontInfo fontInfo, String fontFamily, String fontStyle, String fontWeight, int fontSize) throws FOPException { + this.fontInfo = fontInfo; + this.fontFamily = fontFamily; + this.fontStyle = fontStyle; + this.fontWeight = fontWeight; + this.fontSize = fontSize; + this.fontName = fontInfo.fontLookup(fontFamily,fontStyle,fontWeight); + this.metric = fontInfo.getMetricsFor(fontName); + } + + public int getAscender() { + return fontSize * metric.getAscender() / 1000; + } + + public int getCapHeight() { + return fontSize * metric.getCapHeight() / 1000; + } + + public int getDescender() { + return fontSize * metric.getDescender() / 1000; + } + + public String getFontName() { + return this.fontName; + } + + public int getFontSize() { + return this.fontSize; + } + + public String getFontWeight() { + return this.fontWeight; + } + + public String getFontFamily() { + return this.fontFamily; + } + + public String getFontStyle() { + return this.fontStyle; + } + + public FontInfo getFontInfo() { + return this.fontInfo; + } + + public int getXHeight() { + return fontSize * metric.getXHeight() / 1000; + } + + public int width(int charnum) { + // returns width of given character number in millipoints + return (fontSize * metric.width(charnum) / 1000); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/ForeignObjectArea.java b/fop-0_14_0_regions/src/org/apache/fop/layout/ForeignObjectArea.java new file mode 100644 index 000000000..b067eed16 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/ForeignObjectArea.java @@ -0,0 +1,253 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +// FOP +import org.apache.fop.render.Renderer; + +// Java +import java.util.Vector; +import java.util.Enumeration; + +public class ForeignObjectArea extends Area { + + protected int xOffset = 0; + /* text-align of contents */ + protected int align; + /* vertical align of contents */ + protected int valign; + /* scaling method */ + protected int scaling; + protected Area foreignObject; + /* height according to the instream-foreign-object */ + protected int cheight; + /* width according to the instream-foreign-object */ + protected int cwidth; + /* width of the content */ + protected int awidth; + /* height of the content */ + protected int aheight; + /* width */ + protected int width; + /* height */ + protected int height; + boolean wauto; + boolean hauto; + boolean cwauto; + boolean chauto; + int overflow; + + public ForeignObjectArea(FontState fontState, int width, + int height) { + super(fontState, width, height); + } + + public void render(Renderer renderer) { + if(foreignObject != null) + renderer.renderForeignObjectArea(this); + } + + public int getXOffset() + { + return this.xOffset; + } + + public void setStartIndent(int startIndent) + { + xOffset = startIndent; + } + + public void setObject(Area fobject) { + foreignObject = fobject; + } + + public Area getObject() { + return foreignObject; + } + + public void setSizeAuto(boolean wa, boolean ha) + { + wauto = wa; + hauto = ha; + } + + public void setContentSizeAuto(boolean wa, boolean ha) + { + cwauto = wa; + chauto = ha; + } + + public void setAlign(int align) + { + this.align = align; + } + + public int getAlign() + { + return this.align; + } + + public void setVerticalAlign(int align) + { + this.valign = align; + } + + public int getVerticalAlign() + { + return this.valign; + } + + public void setOverflow(int o) + { + this.overflow = o; + } + + public int getOverflow() + { + return this.overflow; + } + + public void setHeight(int height) + { + this.height = height; + } + + public void setWidth(int width) + { + this.width = width; + } + + public void setContentHeight(int cheight) + { + this.cheight = cheight; + } + + public void setContentWidth(int cwidth) + { + this.cwidth = cwidth; + } + + public void setScaling(int scaling) + { + this.scaling = scaling; + } + + public int scalingMethod() + { + return this.scaling; + } + + public void setIntrinsicWidth(int w) + { + awidth = w; + } + + public void setIntrinsicHeight(int h) + { + aheight = h; + } + + public int getIntrinsicHeight() + { + return aheight; + } + + public int getIntrinsicWidth() + { + return awidth; + } + + public int getEffectiveHeight() + { + if(this.hauto) { + if(this.chauto) { + return aheight; + } else { + // need to handle percentages, this would be a scaling factor on the + // instrinsic height (content determined height) + // if(this.properties.get("content-height").getLength().isPercentage()) { + // switch(scaling) { + // case Scaling.UNIFORM: + // break; + // case Scaling.NON_UNIFORM: + // break; + // } + // } else { + return this.cheight; + } + } else { + return this.height; + } + } + + public int getEffectiveWidth() + { + if(this.wauto) { + if(this.cwauto) { + return awidth; + } else { + // need to handle percentages, this would be a scaling factor on the + // instrinsic height (content determined height) + // if(this.properties.get("content-width").getLength().isPercentage()) { + // switch(scaling) { + // case Scaling.UNIFORM: + // break; + // case Scaling.NON_UNIFORM: + // break; + // } + // } else { + return this.cwidth; + } + } else { + return this.width; + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/InlineArea.java b/fop-0_14_0_regions/src/org/apache/fop/layout/InlineArea.java new file mode 100644 index 000000000..f55c6b9fc --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/InlineArea.java @@ -0,0 +1,93 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; + +public class InlineArea extends Area { + + private String text; + protected String pageNumberId=null; + private float red, green, blue; + + public InlineArea(FontState fontState, float red, float green, float blue, String text, int width) { + super(fontState); + this.red = red; + this.green = green; + this.blue = blue; + this.text = text; + this.contentRectangleWidth = width; + } + + public void render(Renderer renderer) { + renderer.renderInlineArea(this); + } + + public float getBlue() { + return this.blue; + } + + public float getGreen() { + return this.green; + } + + public float getRed() { + return this.red; + } + + public String getText() { + return this.text; + } + + public String getPageNumberID() { + return pageNumberId; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/InlineSpace.java b/fop-0_14_0_regions/src/org/apache/fop/layout/InlineSpace.java new file mode 100644 index 000000000..4ff64cd43 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/InlineSpace.java @@ -0,0 +1,73 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; + +public class InlineSpace extends Space { + private int size; // in millipoints + + public InlineSpace(int amount) { + this.size = amount; + } + + public int getSize() { + return size; + } + + public void setSize(int amount) { + this.size = amount; + } + + public void render(Renderer renderer) { + renderer.renderInlineSpace(this); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/LineArea.java b/fop-0_14_0_regions/src/org/apache/fop/layout/LineArea.java new file mode 100644 index 000000000..223bb1326 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/LineArea.java @@ -0,0 +1,523 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; +import org.apache.fop.messaging.MessageHandler; + +import java.util.Vector; +import java.util.Enumeration; +import java.awt.Rectangle; + +import org.apache.fop.fo.properties.WrapOption; // for enumerated +// values +import org.apache.fop.fo.properties.WhiteSpaceTreatment; // for +// enumerated values +import org.apache.fop.fo.properties.TextAlign; // for enumerated +// values +import org.apache.fop.fo.properties.TextAlignLast; // for enumerated +// values + +import org.apache.fop.datatypes.IDNode; + +public class LineArea extends Area { + + protected int lineHeight; + protected int halfLeading; + protected int nominalFontSize; + protected int nominalGlyphHeight; + + protected int allocationHeight; + protected int startIndent; + protected int endIndent; + + private int placementOffset; + + private FontState currentFontState; // not the nominal, which is + // in this.fontState + private float red, green, blue; + private int wrapOption; + private int whiteSpaceTreatment; + + /* the width of text that has definitely made it into the line + area */ + protected int finalWidth = 0; + + /* the position to shift a link rectangle in order to compensate for links embedded within a word*/ + protected int embeddedLinkStart=0; + + /* the width of the current word so far */ + protected int wordWidth = 0; + + /* values that prev (below) may take */ + protected static final int NOTHING = 0; + protected static final int WHITESPACE = 1; + protected static final int TEXT = 2; + + /* the character type of the previous character */ + protected int prev = NOTHING; + + /* the position in data[] of the start of the current word */ + protected int wordStart; + + /* the length (in characters) of the current word */ + protected int wordLength = 0; + + /* width of spaces before current word */ + protected int spaceWidth = 0; + + /* the inline areas that have not yet been added to the line + because subsequent characters to come (in a different addText) + may be part of the same word */ + protected Vector pendingAreas = new Vector(); + + /* the width of the pendingAreas */ + protected int pendingWidth = 0; + + public LineArea(FontState fontState, int lineHeight, int + halfLeading, int allocationWidth, int startIndent, + int endIndent) { + super(fontState); + + this.currentFontState = fontState; + this.lineHeight = lineHeight; + this.nominalFontSize = fontState.getFontSize(); + this.nominalGlyphHeight = fontState.getAscender() - + fontState.getDescender(); + + this.placementOffset = fontState.getAscender(); + this.contentRectangleWidth = allocationWidth - startIndent - + endIndent; + this.fontState = fontState; + + this.allocationHeight = this.nominalGlyphHeight; + this.halfLeading = this.lineHeight - this.allocationHeight; + + this.startIndent = startIndent; + this.endIndent = endIndent; + + } + + public void render(Renderer renderer) { + renderer.renderLineArea(this); + } + + public int addPageNumberCitation(String refid, LinkSet ls) + { + + /* We should add code here to handle the case where the page number doesn't fit on the current line + */ + + //Space must be alloted to the page number, so currently we give it 3 spaces + int width= currentFontState.width(32) * 3; + + PageNumberInlineArea pia = new PageNumberInlineArea(currentFontState, + this.red, this.green, + this.blue, + refid, + width); + + pendingAreas.addElement(pia); + pendingWidth += width; + wordWidth = 0; + prev = TEXT; + + return -1; + } + + + public int addText(char odata[], int start, int end, LinkSet ls) { + boolean overrun = false; + + wordStart = start; + wordLength = 0; + wordWidth = 0; + char[] data = new char[odata.length]; + for(int count=0;count 127) { + /* this class shouldn't be hard coded */ + char d = + org.apache.fop.render.pdf.CodePointMapping.map[c]; + if (d != 0) { + c = data[i] = d; + } else { + MessageHandler.error("ch" + + (int)c + "?"); + c = data[i] = '#'; + } + } + + charWidth = currentFontState.width(c); + + if ((c == ' ') || + (c == '\n') || + (c == '\r') || + (c == '\t')) { // whitespace + + if (prev == WHITESPACE) { + + // if current & previous are WHITESPACE + + if (this.whiteSpaceTreatment == + WhiteSpaceTreatment.PRESERVE) { + if (c == ' ') { + spaceWidth += currentFontState.width(32); + } else if (c == '\n') { + // force line break + return i; + } else if (c == '\t') { + spaceWidth += 8 * currentFontState.width(32); + } + } // else ignore it + + } else if (prev == TEXT) { + + // if current is WHITESPACE and previous TEXT + + // the current word made it, so + + // add the space before the current word (if there + // was some) + + if (spaceWidth > 0) { + addChild(new InlineSpace(spaceWidth)); + finalWidth += spaceWidth; + spaceWidth = 0; + } + + // add any pending areas + + Enumeration e = pendingAreas.elements(); + while (e.hasMoreElements()) { + InlineArea inlineArea = (InlineArea) e.nextElement(); + if (ls != null) { + Rectangle lr = + new Rectangle(finalWidth, + 0, + inlineArea.getContentWidth(), + fontState.getFontSize()); + ls.addRect(lr, this); + } + + addChild(inlineArea); + } + finalWidth += pendingWidth; + + // reset pending areas array + pendingWidth = 0; + pendingAreas = new Vector(); + + // add the current word + + if (wordLength > 0) { + InlineArea ia = new InlineArea(currentFontState, + this.red, this.green, + this.blue, new + String(data, wordStart, + wordLength), + wordWidth); + addChild(ia); + if (ls != null) { + Rectangle lr = + new Rectangle(finalWidth, + 0, + ia.getContentWidth(), + fontState.getFontSize()); + ls.addRect(lr, this); + } + finalWidth += wordWidth; + + // reset word width + wordWidth = 0; + } + + // deal with this new whitespace following the + // word we just added + + prev = WHITESPACE; + + embeddedLinkStart=0; //reset embeddedLinkStart since a space was encountered + + if (this.whiteSpaceTreatment == + WhiteSpaceTreatment.IGNORE) { + // do nothing + } else { + spaceWidth = currentFontState.width(32); + } + if (this.whiteSpaceTreatment == + WhiteSpaceTreatment.PRESERVE) { + if (c == '\n') { + // force a line break + return i; + } else if (c == '\t') { + spaceWidth = currentFontState.width(32); + } + } + + } else { + + // if current is WHITESPACE and no previous + + if (this.whiteSpaceTreatment == + WhiteSpaceTreatment.PRESERVE) { + prev = WHITESPACE; + spaceWidth = currentFontState.width(32); + } else { + // skip over it + start++; + } + } + + } else { // current is TEXT + + if (prev == WHITESPACE) { + + // if current is TEXT and previous WHITESPACE + + wordWidth = charWidth; + if ((finalWidth + spaceWidth + wordWidth) > + this.getContentWidth()) { + if (overrun) + MessageHandler.error(">"); + if (this.wrapOption == WrapOption.WRAP) + return i; + } + prev = TEXT; + wordStart = i; + wordLength = 1; + } else if (prev == TEXT) { + + wordLength++; + wordWidth += charWidth; + } else { // nothing previous + + prev = TEXT; + wordStart = i; + wordLength = 1; + wordWidth = charWidth; + } + + if ((finalWidth + spaceWidth + pendingWidth + wordWidth) > + this.getContentWidth()) { + + // BREAK MID WORD + if (wordStart == start) { // if couldn't even fit + // first word + overrun = true; + // if not at start of line, return word start + // to try again on a new line + if (finalWidth > 0) { + return wordStart; + } + } else if (this.wrapOption == WrapOption.WRAP) { + return wordStart; + } + } + + } + } // end of iteration over text + + if (prev == TEXT) { + + InlineArea pia = new InlineArea(currentFontState, this.red, + this.green, this.blue, new + String(data, wordStart, + wordLength), wordWidth); + + if (ls != null) { + Rectangle lr = + new Rectangle(finalWidth + spaceWidth + embeddedLinkStart, + spaceWidth, + pia.getContentWidth(), + fontState.getFontSize()); + ls.addRect(lr, this); + } + + embeddedLinkStart += wordWidth; + pendingAreas.addElement(pia); + pendingWidth += wordWidth; + wordWidth = 0; + } + + if (overrun) + MessageHandler.error(">"); + return -1; + } + + public void addPending() { + if (spaceWidth > 0) { + addChild(new InlineSpace(spaceWidth)); + finalWidth += spaceWidth; + spaceWidth = 0; + } + + Enumeration e = pendingAreas.elements(); + while (e.hasMoreElements()) { + InlineArea inlineArea = (InlineArea) e.nextElement(); + addChild(inlineArea); + } + finalWidth += pendingWidth; + + // reset pending areas array + pendingWidth = 0; + pendingAreas = new Vector(); + } + + public void align(int type) { + int padding = 0; + + switch (type) { + case TextAlign.START: // left + padding = this.getContentWidth() - finalWidth; + endIndent += padding; + break; + case TextAlign.END: // right + padding = this.getContentWidth() - finalWidth; + startIndent += padding; + break; + case TextAlign.CENTER: // center + padding = (this.getContentWidth() - finalWidth)/2; + startIndent += padding; + endIndent += padding; + break; + case TextAlign.JUSTIFY: // justify + Vector spaceList = new Vector(); + + int spaceCount = 0; + Enumeration e = children.elements(); + while (e.hasMoreElements()) { + Box b = (Box)e.nextElement(); + if (b instanceof InlineSpace) { + InlineSpace space = (InlineSpace)b; + spaceList.addElement(space); + spaceCount++; + } + } + if (spaceCount > 0) { + padding = (this.getContentWidth() - finalWidth) / + spaceCount; + } else { // no spaces + padding = 0; + } + Enumeration f = spaceList.elements(); + while (f.hasMoreElements()) { + InlineSpace space2 = (InlineSpace)f.nextElement(); + int i = space2.getSize(); + space2.setSize(i + padding); + } + } + } + + public void changeColor(float red, float green, float blue) { + this.red = red; + this.green = green; + this.blue = blue; + } + + public void changeFont(FontState fontState) { + this.currentFontState = fontState; + } + + public void changeWhiteSpaceTreatment(int whiteSpaceTreatment) { + this.whiteSpaceTreatment = whiteSpaceTreatment; + } + + public void changeWrapOption(int wrapOption) { + this.wrapOption = wrapOption; + } + + public int getEndIndent() { + return endIndent; + } + + public int getHeight() { + return this.allocationHeight; + } + + public int getPlacementOffset() { + return this.placementOffset; + } + + public int getStartIndent() { + return startIndent; + } + + public boolean isEmpty() { + return (prev==0); + } + + public Vector getPendingAreas() { + return pendingAreas; + } + + public int getPendingWidth() { + return pendingWidth; + } + + public void setPendingAreas(Vector areas) { + pendingAreas = areas; + } + + public void setPendingWidth(int width) { + pendingWidth = width; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/LinkSet.java b/fop-0_14_0_regions/src/org/apache/fop/layout/LinkSet.java new file mode 100644 index 000000000..3277899a0 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/LinkSet.java @@ -0,0 +1,202 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +/* this class contributed by Arved Sandstrom with minor modifications + by James Tauber */ + +package org.apache.fop.layout; + +// Java +import java.util.Vector; +import java.util.Enumeration; +import java.awt.Rectangle; + +import org.apache.fop.fo.properties.WrapOption; // for enumerated +// values +import org.apache.fop.fo.properties.WhiteSpaceTreatment; // for +// enumerated values +import org.apache.fop.fo.properties.TextAlign; // for enumerated +// values +import org.apache.fop.fo.properties.TextAlignLast; // for enumerated +// values + +/** + * a set of rectangles on a page that are linked to a common + * destination + */ +public class LinkSet { + + /** the destination of the links */ + String destination; + + /** the set of rectangles */ + Vector rects = new Vector(); + + private int xoffset = 0; + private int yoffset = 0; + + /* the maximum Y offset value encountered for this LinkSet*/ + private int maxY = 0; + + protected int startIndent; + protected int endIndent; + + private int linkType; + + private Area area; + + public final static int + INTERNAL = 0, // represents internal link + EXTERNAL = 1; // represents external link + + // property required for alignment adjustments + int contentRectangleWidth = 0; + + public LinkSet(String destination, Area area, int linkType) { + this.destination = destination; + this.area = area; + this.linkType = linkType; + } + + public void addRect(Rectangle r, LineArea lineArea) { + LinkedRectangle linkedRectangle = + new LinkedRectangle(r, lineArea); + linkedRectangle.setY(this.yoffset); + if(this.yoffset>maxY) + { + maxY=this.yoffset; + } + rects.addElement(linkedRectangle); + } + + public void setYOffset(int y) { + this.yoffset = y; + } + + public void setXOffset(int x) { + this.xoffset = x; + } + + public void setContentRectangleWidth(int contentRectangleWidth) { + this.contentRectangleWidth = contentRectangleWidth; + } + + public void applyAreaContainerOffsets(AreaContainer ac, Area area) { + int height=area.getAbsoluteHeight(); + BlockArea ba = (BlockArea)area; + Enumeration re = rects.elements(); + while (re.hasMoreElements()) { + LinkedRectangle r = (LinkedRectangle)re.nextElement(); + r.setX(r.getX() + ac.getXPosition() + area.getTableCellXOffset()); + r.setY( ac.getYPosition() - height +(maxY-r.getY()) - ba.getHalfLeading()); + } + } + + // intermediate implementation for joining all sublinks on same line + public void mergeLinks() { + int numRects = rects.size(); + if (numRects == 1) + return; + + LinkedRectangle curRect = + new LinkedRectangle((LinkedRectangle)rects.elementAt(0)); + Vector nv = new Vector(); + + for (int ri=1; ri < numRects; ri++) { + LinkedRectangle r = (LinkedRectangle)rects.elementAt(ri); + + // yes, I'm really happy with comparing refs... + if (r.getLineArea() == curRect.getLineArea()) { + curRect.setWidth( r.getX() + r.getWidth() - curRect.getX() ); + } else { + nv.addElement(curRect); + curRect = new LinkedRectangle(r); + } + + if (ri == numRects-1) + nv.addElement(curRect); + } + + rects = nv; + } + + public void align() { + Enumeration re = rects.elements(); + while (re.hasMoreElements()) { + LinkedRectangle r = (LinkedRectangle)re.nextElement(); + r.setX( r.getX() + r.getLineArea().getStartIndent() ); + } + } + + public String getDest() { + return this.destination; + } + + public Vector getRects() { + return this.rects; + } + + public int getEndIndent() { + return endIndent; + } + + public int getStartIndent() { + return startIndent; + } + + public Area getArea() { + return area; + } + + public int getLinkType(){ + return linkType; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/LinkedRectangle.java b/fop-0_14_0_regions/src/org/apache/fop/layout/LinkedRectangle.java new file mode 100644 index 000000000..b23b763da --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/LinkedRectangle.java @@ -0,0 +1,130 @@ +/*-- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +/* this class contributed by Arved Sandstrom with minor modifications + by James Tauber */ + +package org.apache.fop.layout; + +// Java +import java.awt.Rectangle; + +/** + * an object that stores a rectangle that is linked, and the LineArea + * that it is logically associated with + */ +public class LinkedRectangle { + + /** the linked Rectangle */ + protected Rectangle link; + + /** the associated LineArea */ + protected LineArea lineArea; + + public LinkedRectangle(Rectangle link, LineArea lineArea) { + this.link = link; + this.lineArea = lineArea; + } + + public LinkedRectangle(LinkedRectangle lr) { + this.link = new Rectangle( lr.getRectangle() ); + this.lineArea = lr.getLineArea(); + } + + public void setRectangle(Rectangle link) { + this.link = link; + } + + public Rectangle getRectangle() { + return this.link; + } + + public LineArea getLineArea() { + return this.lineArea; + } + + public void setLineArea() { + this.lineArea = lineArea; + } + + public void setX(int x) { + this.link.x = x; + } + + public void setY(int y) { + this.link.y = y; + } + + public void setWidth(int width) { + this.link.width = width; + } + + public void setHeight(int height) { + this.link.height = height; + } + + public int getX() { + return this.link.x; + } + + public int getY() { + return this.link.y; + } + + public int getWidth() { + return this.link.width; + } + + public int getHeight() { + return this.link.height; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/Page.java b/fop-0_14_0_regions/src/org/apache/fop/layout/Page.java new file mode 100644 index 000000000..304a1b409 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/Page.java @@ -0,0 +1,166 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.layout; + +// FOP +import org.apache.fop.render.Renderer; + +// Java +import java.util.Vector; +import java.util.Enumeration; + +public class Page { + + private int height; + private int width; + + private AreaContainer body; + private AreaContainer before; + private AreaContainer after; + private AreaContainer start; + private AreaContainer end; + + private AreaTree areaTree; + + protected int pageNumber = 0; + + protected Vector linkSets = new Vector(); + + private Vector idList = new Vector(); + + Page(AreaTree areaTree, int height, int width) { + this.areaTree = areaTree; + this.height = height; + this.width = width; + } + + public void setNumber(int number) { + this.pageNumber = number; + } + + public int getNumber() { + return this.pageNumber; + } + + void addAfter(AreaContainer area) { + this.after = area; + area.setPage(this); + } + + void addBefore(AreaContainer area) { + this.before = area; + area.setPage(this); + } + + void addBody(AreaContainer area) { + this.body = area; + area.setPage(this); + } + + void addEnd(AreaContainer area) { + this.end = area; + area.setPage(this); + } + + void addStart(AreaContainer area) { + this.start = area; + area.setPage(this); + } + + public void render(Renderer renderer) { + renderer.renderPage(this); + } + + public AreaContainer getAfter() { + return this.after; + } + + public AreaContainer getBefore() { + return this.before; + } + + public AreaContainer getBody() { + return this.body; + } + + public int getHeight() { + return this.height; + } + + public int getWidth() { + return this.width; + } + + public FontInfo getFontInfo() { + return this.areaTree.getFontInfo(); + } + + public void addLinkSet(LinkSet linkSet) { + this.linkSets.addElement(linkSet); + } + + public Vector getLinkSets() { + return this.linkSets; + } + + public boolean hasLinks() { + return (!this.linkSets.isEmpty()); + } + + public void addToIDList(String id){ + idList.addElement(id); + } + + public Vector getIDList(){ + return idList; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/PageMaster.java b/fop-0_14_0_regions/src/org/apache/fop/layout/PageMaster.java new file mode 100644 index 000000000..a677ad4ff --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/PageMaster.java @@ -0,0 +1,117 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +public class PageMaster { + + private int width; + private int height; + + private Region body; + private Region before; + private Region after; + private Region start; + private Region end; + + public PageMaster(int pageWidth, int pageHeight) { + this.width = pageWidth; + this.height = pageHeight; + } + + public void addAfter(Region region) { + this.after = region; + } + + public void addBefore(Region region) { + this.before = region; + } + + public void addBody(Region region) { + this.body = region; + } + + public void addEnd(Region region) { + this.end = region; + } + + public void addStart(Region region) { + this.start = region; + } + + public int getHeight() { + return this.height; + } + + public int getWidth() { + return this.width; + } + + public Page makePage(AreaTree areaTree) { + Page p = new Page(areaTree, this.height, this.width); + if (this.body != null) { + p.addBody(body.makeAreaContainer()); + } + if (this.before != null) { + p.addBefore(before.makeAreaContainer()); + } + if (this.after != null) { + p.addAfter(after.makeAreaContainer()); + } + if (this.start != null) { + p.addStart(start.makeAreaContainer()); + } + if (this.end != null) { + p.addEnd(end.makeAreaContainer()); + } + + return p; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/PageNumberInlineArea.java b/fop-0_14_0_regions/src/org/apache/fop/layout/PageNumberInlineArea.java new file mode 100644 index 000000000..7b56cab10 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/PageNumberInlineArea.java @@ -0,0 +1,64 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; +import org.apache.fop.datatypes.IDNode; + +public class PageNumberInlineArea extends InlineArea { + + + public PageNumberInlineArea(FontState fontState, float red, float green, float blue, String refid, int width) { + super(fontState, red, green, blue, "?", width); + this.pageNumberId = refid; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/Region.java b/fop-0_14_0_regions/src/org/apache/fop/layout/Region.java new file mode 100644 index 000000000..634960e4e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/Region.java @@ -0,0 +1,71 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; +import org.apache.fop.fo.properties.*; + +public class Region { + + private int xPosition; + private int yPosition; + private int width; + private int height; + + public Region(int xPosition, int yPosition, int width, int height) { + this.xPosition = xPosition; + this.yPosition = yPosition; + this.width = width; + this.height = height; + } + + public AreaContainer makeAreaContainer() { + return new AreaContainer(null, xPosition, yPosition, width, height, Position.ABSOLUTE); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/RuleArea.java b/fop-0_14_0_regions/src/org/apache/fop/layout/RuleArea.java new file mode 100644 index 000000000..5c8c19d26 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/RuleArea.java @@ -0,0 +1,109 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +import org.apache.fop.render.Renderer; + +import java.util.Vector; +import java.util.Enumeration; + +public class RuleArea extends Area { + + int align; // text-align + int length; // length in millipoints + int ruleThickness; + + int startIndent; + int endIndent; + + float red, green, blue; + public RuleArea(FontState fontState, int allocationWidth, int maxHeight, int startIndent, int endIndent, int align, int ruleThickness, int length, float red, float green, float blue) { + super(fontState,allocationWidth,maxHeight); + + this.contentRectangleWidth = allocationWidth - startIndent - endIndent; + this.align = align; + + this.startIndent = startIndent; + this.endIndent = endIndent; + this.ruleThickness = ruleThickness; + this.length = length; + this.currentHeight = maxHeight; + + this.red = red; + this.green = green; + this.blue = blue; + } + + public void render(Renderer renderer) { + renderer.renderRuleArea(this); + } + public float getBlue() { + return this.blue; + } + public int getEndIndent() { + return endIndent; + } + public float getGreen() { + return this.green; + } + public int getHeight() { + return this.ruleThickness; + } + public float getRed() { + return this.red; + } + public int getRuleThickness() { + return this.ruleThickness; + } + public int getStartIndent() { + return startIndent; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/layout/Space.java b/fop-0_14_0_regions/src/org/apache/fop/layout/Space.java new file mode 100644 index 000000000..5a6e16228 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/layout/Space.java @@ -0,0 +1,54 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.layout; + +abstract public class Space extends Box { +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/messaging/DefaultMessageListener.java b/fop-0_14_0_regions/src/org/apache/fop/messaging/DefaultMessageListener.java new file mode 100644 index 000000000..845d5694b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/messaging/DefaultMessageListener.java @@ -0,0 +1,79 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.messaging; + + +/** + * A trivial implementation of a MessageListener + * For further explanation + * @see MessageListener + */ + + +public class DefaultMessageListener implements MessageListener{ + + /** + * The method processMessage has to be overwritten to handle the MessageEvents. + * The message type (information or error) is accessible via event.getMessageType(). + */ + + public void processMessage (MessageEvent event) { + switch (event.getMessageType()) { + case MessageEvent.ERROR: + System.err.print("ERROR: "+event.getMessage()); + break; + case MessageEvent.LOG: + System.out.print("LOG: "+event.getMessage()); + break; + default: + System.out.print("Unknown message type: "+event.getMessage()); + } + } +} \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageEvent.java b/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageEvent.java new file mode 100644 index 000000000..0c7945905 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageEvent.java @@ -0,0 +1,102 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.messaging; + +import java.util.EventObject; + +/** + * a container for the text and the type of a message + * MessageEvents are created by MessageHandler and can be received by any + * MessageListener, which is added to MessageHandler; + * @see org.apache.fop.MessageListener MessageListener + * + */ + +public class MessageEvent extends EventObject { + public static final int LOG = 0; + public static final int ERROR = 1; + String message; + int messageType = MessageEvent.LOG; + + public MessageEvent (Object source) { + super (source); + message = (String) source; //MessageHandler.getMessage() + } + +/** + * retrieves the message + * @return String containing the message + * + */ + public String getMessage () { + return message; + } + +/** + * sets the message type + * @param messageType the type of the message as int in the form of MessageEvent.LOG or MessageEvent.ERROR + * + */ + void setMessageType (int messageType) { + this.messageType = messageType; + } + +/** + * returns the type of message as int + * + * @return messageType the type of the message as int in the form of MessageEvent.LOG or MessageEvent.ERROR + */ + public int getMessageType () { + return messageType; + } + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageHandler.java b/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageHandler.java new file mode 100644 index 000000000..5fe7f758b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageHandler.java @@ -0,0 +1,302 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.messaging; + +import java.io.*; +import java.util.*; +import javax.swing.*; + +/** The class MessageHandler contains the static methods log and error which + * should be used for any end user information instead of System.out.print() or + * System.err.print(). The class defines several output methods: + * writing to the screen (default), logging to a file, creating message events and repressing all + * output. If you don't want to change the default behaviour, you should be + * happy with MessageHandler.log(message) and MessageHandler.error(message)
+ * The class MessageHandler also supports the setting of an id. If set every message + * has as a prefix an identifying string. That way Fop probably can also be used in + * environments, where more than one Fop instance are running in same JVM.
+ * If Fop is embedded in a gui application or for any reasons the existing + * messaging system doesn't meet the programmer's requirements, one can add + * a MessageEvent listener to MessageHandler and handle the incoming messages + * in an appropriate way. See the class DefaultMessageListener, which is a trivial + * implementation of the MessageListener. + * Here is an example how to configure MessageHandler for the DefaultMessageListener (anybody + * can provide his own listener by extending MessageListener
+ * + * MessageHandler.setOutputMethod(MessageHandler.EVENT); + * MessageHandler.addListener(new DefaultMessageListener()); + *
+ * This examples shows, how to redirect the messages to a log file called fop.log. + * All messages are appended to this file. + * + * MessageHandler.setOutputMethod(MessageHandler.FILE); + * MessageHandler.setLogfileName("\\fop.log",true); + * + */ + +public class MessageHandler { + public static final int SCREEN = 0; + public static final int FILE = 1; + public static final int EVENT = 2; + public static final int NONE = 3; //this should always be the last method + + private static String logfileName = "fop.log"; + private static PrintWriter writer; + private static int outputMethod = SCREEN; + private static boolean fileOpened = false; + private static boolean appendToFile = true; + private static String message = ""; + private static String prefix =""; + private static Vector listeners = new Vector(); + private static boolean IDisSet = false; + /** + * helper class to access the message + * @return a string containing the message + */ + + private static String getMessage () { + return message; + } + + /** + * helper class which sets the message + * and adds a prefix which can contain + * the id of the thread which uses this messagehandler + */ + private static void setMessage (String m) { + if (IDisSet) { + message = getID() + ":" + m; + } else { + message = m; + } + } + + /** + * informs the user of the message + * @param message the message for the user + */ + public static void log (String message) { + setMessage(message); + switch (outputMethod) { + case SCREEN: + System.out.print(getMessage ()); + break; + case FILE: + if (fileOpened) { + writer.print(getMessage ()); + writer.flush(); + } else { + openFile(); + writer.print(getMessage ()); + writer.flush(); + } + break; + case EVENT: + setMessage(message); + Enumeration enum = listeners.elements(); + while (enum.hasMoreElements()) { + ((MessageListener) enum.nextElement()).processMessage(new MessageEvent(getMessage())); + } + break; + case NONE: + //do nothing + break; + default: + System.out.print(message); + } + } + + /** + * convenience method which adds a return to the message + * @param message the message for the user + */ + public static void logln (String message) { + log (message+"\n"); + } + + /** + * error warning for the user + * @param errorMessage contains the warning string + */ + + public static void error (String errorMessage) { + setMessage(errorMessage); + switch (outputMethod) { + case SCREEN: + System.err.print(getMessage()); + break; + case FILE: + if (fileOpened) { + writer.print(getMessage()); + writer.flush(); + } else { + openFile(); + writer.print(getMessage()); + writer.flush(); + } + break; + case EVENT: + setMessage(message); + Enumeration enum = listeners.elements(); + while (enum.hasMoreElements()) { + MessageEvent messEv = new MessageEvent(getMessage()); + messEv.setMessageType(MessageEvent.ERROR); + ((MessageListener) enum.nextElement()).processMessage(messEv); + } + break; + case NONE: + //do nothing + break; + default: + System.err.print(errorMessage); + } + } + + /** + * convenience method which adds a return to the error message + * @param errorMessage the message for the user + */ + public static void errorln (String errorMessage) { + error (errorMessage+"\n"); + } + + /** + * adds a MessageListener which listens for MessageEvents + * @param MessageListener the listener to add + */ + public static void addListener(MessageListener listener) { + listeners.addElement(listener); + } + + /** + * removes a MessageListener + * @param MessageListener the listener to remove + */ + public static void removeListener(MessageListener listener) { + listeners.removeElement(listener); + } + + /** + * sets the output method + * @param method the output method to use, allowed values are
+ * MessageHandler.SCREEN, MessageHandler.FILE, MessageHandler.EVENT + * MessageHandler.NONE + */ + public static void setOutputMethod (int method) { + if (method > NONE) { + MessageHandler.error("Error: Unknown output method"); + } else { + outputMethod = method; + } + } + + /** + * informs what output method is set + * @return the output method + */ + public static int getOutputMethod () { + return outputMethod; + } + + /** + * sets the logfile name + * @param filename name of the logfile + * @param append if true, the logfile is appended + */ + public static void setLogfileName (String filename, boolean append) { + logfileName = filename; + appendToFile = append; + } + + /** + * returns the logfile name + * @return String containing the logfile name + */ + public static String getLogfileName () { + return logfileName; + } + + /** + * helper file which opens the file for output method FILE + */ + private static void openFile () { + try { + writer = new PrintWriter (new FileWriter (logfileName,appendToFile),true); + writer.println("\n=============================================="); + fileOpened = true; + } catch (IOException ioe) { + System.err.println("Error: " + ioe); + } + } + + /** + * if set to true an id string is prefixed to every message + * uses the thread info as an id for the message producer. Should be used if + * more than one instance of Fop is running in the same JVM + * this id becomes a prefix to every message + */ + private static String getID () { + return Thread.currentThread().toString() ; + } + + /** + * if set to true an id string is prefixed to every message + * uses the thread info as an id for the message producer. Should be used if + * more than one instance of Fop is running in the same JVM + * this id becomes a prefix to every message + * + * @param id boolean (default is false) + */ + + public static void setID (boolean id) { + IDisSet = id; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageListener.java b/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageListener.java new file mode 100644 index 000000000..20a5520fc --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/messaging/MessageListener.java @@ -0,0 +1,68 @@ +/* + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.messaging; + +/** + * For situations, where the messages Fop directs to the user have to be handled in some + * special way, the interface MessageListener and the class MessageEvent are provided. + * Embedding Fop into a graphical user interface could be such a scenario.
+ * Any MessageListener listens for MessageEvents, which contain the user message and + * also the message type information (progress information or error warning). + * The class DefaultMessageListener shows an trivial implementation of MessageListener. + */ + + +public interface MessageListener { + + void processMessage (MessageEvent event); + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAction.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAction.java new file mode 100644 index 000000000..238f936d8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAction.java @@ -0,0 +1,101 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +/** + * class representing an action object. + */ +public abstract class PDFAction extends PDFObject { + + + /** + * create an Action object. + * this constructor is used for passing on the object number to the PDFObject + * + * @param number the object's number + */ + public PDFAction(int number) { + + /* generic creation of object */ + super(number); + } + + /** + * empty constructor for PDFAction. + * this constructor is used when there is no additional object being created + * + */ + public PDFAction() + { + } + + /** + * represent the action to call + * this method should be implemented to return the action which gets + * called by the Link Object. This could be a reference to another object + * or the specific destination of the link + * + * @return the action to place next to /A within a Link + */ + abstract public String getAction(); + + + /** + * represent the object in PDF + * this method should be implemented to return the PDF which is to be + * generated by the Action object + * + * @return the PDF string + */ + abstract public String toPDF(); + + } diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAnnotList.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAnnotList.java new file mode 100644 index 000000000..66bc79449 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFAnnotList.java @@ -0,0 +1,125 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +// Java +import java.util.Vector; + +/** + * class representing an object which is a list of annotations. + * + * This PDF object is a list of references to /Annot objects. So far we + * are dealing only with links. + */ +public class PDFAnnotList extends PDFObject { + + /** the /Annot objects */ + protected Vector links = new Vector(); + + /** the number of /Annot objects */ + protected int count = 0; + + /** + * create a /Annots object. + * + * @param number the object's number + */ + public PDFAnnotList(int number) { + + /* generic creation of object */ + super(number); + } + + /** + * add an /Annot object of /Subtype /Link. + * + * @param link the PDFLink to add. + */ + public void addLink(PDFLink link) { + this.links.addElement(link); + this.count++; + } + + /** + * get the count of /Annot objects + * + * @return the number of links + */ + public int getCount() { + return this.count; + } + + /** + * represent the object in PDF + * + * @return the PDF string + */ + public String toPDF() { + StringBuffer p = new StringBuffer(this.number + " " + + this.generation + + " obj\n[\n"); + for (int i = 0; i < this.count; i++) { + p = p.append(((PDFObject) + links.elementAt(i)).referencePDF() + "\n"); + } + p = p.append("]\nendobj\n"); + return p.toString(); + } + + /* example + 20 0 obj + [ + 19 0 R + ] + endobj + */ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFBinaryStream.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFBinaryStream.java new file mode 100644 index 000000000..3e8320f59 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFBinaryStream.java @@ -0,0 +1,214 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +//Author: Eric SCHAEFFER +//Description: Encode a binary stream using PDF filters + +package org.apache.fop.pdf; + +import org.apache.fop.datatypes.ColorSpace; + +// Java +import java.util.Vector; +import java.lang.reflect.Array; + +import java.io.*; + +// compression +import java.util.zip.Deflater; + +public class PDFBinaryStream { + + private byte[] m_data = null; + private int m_dataSize = 0; + private Vector m_filters = null; + + public PDFBinaryStream() { + m_filters = new Vector(); + } + + public void setData(byte[] data) { + this.m_data = data; + this.m_dataSize = java.lang.reflect.Array.getLength(this.m_data); + } + + public void encode(PDFFilter filter) throws PDFFilterException { + if (this.m_data == null) throw new PDFFilterException("no data to encode"); + + int filterType = filter.getType(); + if (filterType == PDFFilter.FLATE_DECODE) { + Deflater compressor = new Deflater(); + + // PDFFilter properties ? + compressor.setLevel(Deflater.DEFAULT_COMPRESSION); + compressor.setStrategy(Deflater.DEFAULT_STRATEGY); + + compressor.setInput(m_data); + compressor.finish(); + byte[] compMap = new byte[this.m_dataSize]; + int compSize = compressor.deflate(compMap); + compressor.end(); + + this.m_data = new byte[compSize]; + for (int i = 0; i < compSize; i++) { + this.m_data[i] = compMap[i]; + } + this.m_dataSize = compSize; +// this.m_data = compMap; +// this.m_dataSize = java.lang.reflect.Array.getLength(this.m_data); +// } else if (filterType == PDFFilter.LZW_DECODE) { + } else if (filterType == PDFFilter.ASCII_HEX_DECODE) { + StringBuffer buffer = new StringBuffer(); + for (int i = 0; i < this.m_dataSize; i++) { + int val = (int) (this.m_data[i] & 0xFF); + if (val < 16) buffer.append("0"); + buffer.append(Integer.toHexString(val)); +//// TEST //// +/* +buffer.append(" "); +if (i % 75 == 0) buffer.append("\n"); +*/ +//// TEST //// + } + this.m_data = buffer.toString().getBytes(); + this.m_dataSize = java.lang.reflect.Array.getLength(this.m_data); + } else { + throw new PDFFilterException("filter not supported"); + } + + this.m_filters.add(filter); + } + + public String toPDF() { + StringBuffer buffer = new StringBuffer(); + + buffer.append("<<\n/Length "); + buffer.append(this.m_dataSize); + buffer.append("\n"); + buffer.append("/Filter ["); + for (int i = this.m_filters.size(); i > 0; i--) { + PDFFilter filter = (PDFFilter) this.m_filters.get(i - 1); + buffer.append(filter.toPDF()); + if (i > 1) buffer.append(" "); + } + buffer.append("]\n"); + buffer.append(">>\n"); + + buffer.append("stream\n"); + buffer.append(this.m_data); + buffer.append("\nendstream\n"); + + return buffer.toString(); + } + + public String getPDFDictionary() { + StringBuffer buffer = new StringBuffer(); + + buffer.append("/Length "); +//// TEST //// + buffer.append(this.m_dataSize); +// buffer.append(this.m_dataSize + 1); +//// TEST //// + buffer.append("\n"); + if (this.m_filters.size() > 0) { + buffer.append("/Filter ["); + for (int i = this.m_filters.size(); i > 0; i--) { + PDFFilter filter = (PDFFilter) this.m_filters.get(i - 1); + buffer.append(filter.toPDF()); + if (i > 1) buffer.append(" "); + } + buffer.append("]\n"); + } + + return buffer.toString(); + } + + public String getPDFStream() { + StringBuffer buffer = new StringBuffer(); + + buffer.append("stream\n"); + buffer.append(this.m_data); +//// TEST //// +// buffer.append(">"); +//// TEST //// + buffer.append("\nendstream\n"); + + return buffer.toString(); + } + + public int outputPDFStream(PrintWriter writer) throws IOException { + int length = 0; + String p; + + p = new String("stream\n"); + writer.write(p); + length += p.length(); + +/* + for (int i = 0; i < this.m_dataSize; i++) { + writer.write(Byte.toString(this.m_data[i])); + } +*/ + writer.write(new String(this.m_data)); + length += this.m_dataSize; +//// TEST //// +// writer.write(">"); +// length += (new String(">")).length(); +//// TEST //// + + p = new String("\nendstream\n"); + writer.write(p); + length += p.length(); + + return length; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFColor.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFColor.java new file mode 100644 index 000000000..66bb33b75 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFColor.java @@ -0,0 +1,383 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.util.Vector; +import java.io.IOException; +import java.io.PrintWriter; + +//FOP +import org.apache.fop.datatypes.ColorType; +import org.apache.fop.datatypes.ColorSpace; + +public class PDFColor extends PDFPathPaint { + protected static double blackFactor = 2.0;//could be 3.0 as well. + protected double red = -1.0; + protected double green= -1.0; + protected double blue = -1.0; + + protected double cyan = -1.0; + protected double magenta= -1.0; + protected double yellow = -1.0; + protected double black = -1.0; + + private PDFNumber pdfNumber = new PDFNumber(); + + public PDFColor(org.apache.fop.datatypes.ColorType theColor) + { + this.colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); + //super(theNumber) + this.red = (double)theColor.red(); + this.green = (double)theColor.green(); + this.blue = (double)theColor.blue(); + + } + + public PDFColor(double theRed, double theGreen, double theBlue) { + //super(theNumber); + this.colorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); + + this.red = theRed; + this.green = theGreen; + this.blue = theBlue; + } + + // components from 0 to 255 + public PDFColor(int theRed, int theGreen, int theBlue) { + this(((double) theRed) / 255d, ((double) theGreen) / 255d, ((double) theBlue) / 255d ); + + } + + public PDFColor(double theCyan, double theMagenta, double theYellow, double theBlack) { + //super(theNumber);//? + + this.colorSpace = new ColorSpace(ColorSpace.DEVICE_CMYK); + + this.cyan = theCyan; + this.magenta = theMagenta; + this.yellow = theYellow; + this.black = theBlack; + } + + + public Vector getVector() + {//return a vector representation of the color + //in the appropriate colorspace. + Vector theColorVector= new Vector(); + if (this.colorSpace.getColorSpace() == ColorSpace.DEVICE_RGB) + {//RGB + theColorVector.addElement(new Double(this.red)); + theColorVector.addElement(new Double(this.green)); + theColorVector.addElement(new Double(this.blue)); + } + else if (this.colorSpace.getColorSpace() == ColorSpace.DEVICE_CMYK) + {//CMYK + theColorVector.addElement(new Double(this.cyan)); + theColorVector.addElement(new Double(this.magenta)); + theColorVector.addElement(new Double(this.yellow)); + theColorVector.addElement(new Double(this.black)); + } + else + {//GRAY + theColorVector.addElement(new Double(this.black)); + } + return(theColorVector); + } + + public double red() + { + return(this.red); + } + public double green() + { + return(this.green); + } + public double blue() + { + return(this.blue); + } + public int red255() + { + return (int) (this.red * 255d); + } + public int green255() + { + return (int) (this.green * 255d); + } + public int blue255() + { + return (int) (this.blue * 255d); + } + public double cyan() + { + return(this.cyan); + } + public double magenta() + { + return(this.magenta); + } + public double yellow() + { + return(this.yellow); + } + public double black() + { + return(this.black); + } + + public void setColorSpace(int theColorSpace) + { + int theOldColorSpace = this.colorSpace.getColorSpace(); + if(theOldColorSpace!=theColorSpace) + { + if (theOldColorSpace==ColorSpace.DEVICE_RGB) + { + if(theColorSpace==ColorSpace.DEVICE_CMYK) + { + this.convertRGBtoCMYK(); + } + else //convert to Gray? + { + this.convertRGBtoGRAY(); + } + + } else if(theOldColorSpace==ColorSpace.DEVICE_CMYK) + { + if(theColorSpace == ColorSpace.DEVICE_RGB) + { + this.convertCMYKtoRGB(); + } + else //convert to Gray? + { + this.convertCMYKtoGRAY(); + } + } else //used to be Gray + { + if(theColorSpace == ColorSpace.DEVICE_RGB) + { + this.convertGRAYtoRGB(); + } + else //convert to CMYK? + { + this.convertGRAYtoCMYK(); + } + } + this.colorSpace.setColorSpace(theColorSpace); + } + } + + public String getColorSpaceOut(boolean fillNotStroke) + { + StringBuffer p = new StringBuffer(""); + + double tempDouble; + + if(this.colorSpace.getColorSpace()==ColorSpace.DEVICE_RGB) + {//colorspace is RGB + // according to pdfspec 12.1 p.399 + // if the colors are the same then just use the g or G operator + boolean same = false; + if(this.red == this.green && this.red == this.blue) { + same = true; + } + //output RGB + if(fillNotStroke) + { //fill + if(same) { + p.append(pdfNumber.doubleOut(this.red) + " g\n"); + } else { + p.append(pdfNumber.doubleOut(this.red)+" " + +pdfNumber.doubleOut(this.green)+" " + +pdfNumber.doubleOut(this.blue)+" " + +" rg \n"); + } + } + else + {//stroke/border + if(same) { + p.append(pdfNumber.doubleOut(this.red) + " G\n"); + } else { + p.append(pdfNumber.doubleOut(this.red)+" " + +pdfNumber.doubleOut(this.green)+" " + +pdfNumber.doubleOut(this.blue)+" " + +" RG \n"); + } + } + }//end of output RGB + else if (this.colorSpace.getColorSpace() == ColorSpace.DEVICE_CMYK) + {//colorspace is CMYK + + if(fillNotStroke) + { //fill + p.append(pdfNumber.doubleOut(this.cyan) + " " + + pdfNumber.doubleOut(this.magenta) + " " + + pdfNumber.doubleOut(this.yellow) + " " + + pdfNumber.doubleOut(this.black) + " k \n"); + } + else + { //fill + p.append(pdfNumber.doubleOut(this.cyan) + " " + + pdfNumber.doubleOut(this.magenta) + " " + + pdfNumber.doubleOut(this.yellow) + " " + + pdfNumber.doubleOut(this.black) + " K \n"); + } + + }//end of if CMYK + else { //means we're in DeviceGray or Unknown. + //assume we're in DeviceGray, because otherwise we're screwed. + + if(fillNotStroke) + { + p.append(pdfNumber.doubleOut(this.black) + " g \n"); + } + else + { + p.append(pdfNumber.doubleOut(this.black) + " G \n"); + } + + } + return(p.toString()); + } + + + + + protected void convertCMYKtoRGB() + { + //convert CMYK to RGB + this.red = 1.0 - this.cyan; + this.green = 1.0 - this.green; + this.blue= 1.0 - this.yellow; + + this.red = (this.black / this.blackFactor) + this.red; + this.green = (this.black / this.blackFactor) + this.green; + this.blue = (this.black / this.blackFactor) + this.blue; + + } + + protected void convertRGBtoCMYK() + { + //convert RGB to CMYK + this.cyan = 1.0 - this.red; + this.magenta= 1.0 - this.green; + this.yellow = 1.0 - this.blue; + + this.black = 0.0; + /* If you want to calculate black, uncomment this + //pick the lowest color + tempDouble = this.red; + + if (this.green < tempDouble) + tempDouble = this.green; + + if (this.blue < tempDouble) + tempDouble = this.blue; + + this.black = tempDouble / this.blackFactor; + */ + } + + protected void convertGRAYtoRGB() + { + this.red = 1.0 - this.black; + this.green= 1.0 - this.black; + this.blue = 1.0 - this.black; + } + + protected void convertGRAYtoCMYK() + { + this.cyan = this.black; + this.magenta= this.black; + this.yellow = this.black; + //this.black=0.0;//? + } + + protected void convertCMYKtoGRAY() + { + double tempDouble=0.0; + + //pick the lowest color + tempDouble = this.cyan; + + if (this.magenta < tempDouble) + tempDouble = this.magenta; + + if (this.yellow < tempDouble) + tempDouble = this.yellow; + + this.black = (tempDouble / this.blackFactor); + + } + + protected void convertRGBtoGRAY() + { + double tempDouble=0.0; + + //pick the lowest color + tempDouble = this.red; + + if (this.green < tempDouble) + tempDouble = this.green; + + if (this.blue < tempDouble) + tempDouble = this.blue; + + this.black = 1.0 - (tempDouble / this.blackFactor); + + } + + String toPDF() + { + return (""); + + } //end of toPDF +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFDocument.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFDocument.java new file mode 100644 index 000000000..44091602c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFDocument.java @@ -0,0 +1,985 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +/* image support modified from work of BoBoGi */ + +package org.apache.fop.pdf; + +// images are the one place that FOP classes outside this package get +// referenced and I'd rather not do it +import org.apache.fop.image.FopImage; + +import org.apache.fop.layout.LinkSet; +import org.apache.fop.datatypes.ColorSpace; + +import org.apache.fop.datatypes.IDReferences; +import org.apache.fop.layout.Page; +// Java +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Vector; +import java.util.Hashtable; +import java.util.Enumeration; +import java.awt.Rectangle; + +/** + * class representing a PDF document. + * + * The document is built up by calling various methods and then finally + * output to given filehandle using output method. + * + * A PDF document consists of a series of numbered objects preceded by a + * header and followed by an xref table and trailer. The xref table + * allows for quick access to objects by listing their character + * positions within the document. For this reason the PDF document must + * keep track of the character position of each object. The document + * also keeps direct track of the /Root, /Info and /Resources objects. + */ +public class PDFDocument { + + /** the version of PDF supported */ + protected static final String pdfVersion = "1.3"; + + /** the current character position */ + protected int position = 0; + + /** the character position of each object */ + protected Vector location = new Vector(); + + /** the counter for object numbering */ + protected int objectcount = 0; + + /** the objects themselves */ + protected Vector objects = new Vector(); + + /** character position of xref table */ + protected int xref; + + /** the /Root object */ + protected PDFRoot root; + + /** the /Info object */ + protected PDFInfo info; + + /** the /Resources object */ + protected PDFResources resources; + + /** the documents idReferences */ + protected IDReferences idReferences; + + /** the colorspace (0=RGB, 1=CMYK) **/ + //protected int colorspace = 0; + protected ColorSpace colorspace = new ColorSpace(ColorSpace.DEVICE_RGB); + + /** the counter for Pattern name numbering (e.g. 'Pattern1')*/ + protected int patternCount = 0; + + /** the counter for Shading name numbering */ + protected int shadingCount = 0; + + /** the counter for XObject numbering */ + protected int xObjectCount = 0; + + /** the XObjects */ + protected Vector xObjects = new Vector(); + + /** the XObjects Map. + Should be modified (works only for image subtype) */ + protected Hashtable xObjectsMap = new Hashtable(); + + /** + * creates an empty PDF document + */ + public PDFDocument() { + + /* create the /Root, /Info and /Resources objects */ + this.root = makeRoot(); + this.info = makeInfo(); + this.resources = makeResources(); + } + + /** + * set the producer of the document + * + * @param producer string indicating application producing the PDF + */ + public void setProducer(String producer) { + this.info.setProducer(producer); + } + + /** + * make /Root object as next object + * + * @return the created /Root object + */ + protected PDFRoot makeRoot() { + + /* create a PDFRoot with the next object number and add to + list of objects */ + PDFRoot pdfRoot = new PDFRoot(++this.objectcount); + this.objects.addElement(pdfRoot); + + /* create a new /Pages object to be root of Pages hierarchy + and add to list of objects */ + PDFPages rootPages = new PDFPages(++this.objectcount); + this.objects.addElement(rootPages); + + /* inform the /Root object of the /Pages root */ + pdfRoot.setRootPages(rootPages); + return pdfRoot; + } + + /** + * make an /Info object + * + * @param producer string indicating application producing the PDF + * @return the created /Info object + */ + protected PDFInfo makeInfo() { + + /* create a PDFInfo with the next object number and add to + list of objects */ + PDFInfo pdfInfo = new PDFInfo(++this.objectcount); + this.objects.addElement(pdfInfo); + return pdfInfo; + } + + /** + * make a /Resources object + * + * @return the created /Resources object + */ + private PDFResources makeResources() { + + /* create a PDFResources with the next object number and add + to list of objects */ + PDFResources pdfResources = new PDFResources(++this.objectcount); + this.objects.addElement(pdfResources); + return pdfResources; + } + + /** + * Make a Type 0 sampled function + * + * @param theDomain Vector objects of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector objects of Double objects. + * This is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theSize A Vector object of Integer objects. + * This is the number of samples in each input dimension. + * I can't imagine there being more or less than two input dimensions, + * so maybe this should be an array of length 2. + * + * See page 265 of the PDF 1.3 Spec. + * @param theBitsPerSample An int specifying the number of bits user to represent each sample value. + * Limited to 1,2,4,8,12,16,24 or 32. + * See page 265 of the 1.3 PDF Spec. + * @param theOrder The order of interpolation between samples. Default is 1 (one). Limited + * to 1 (one) or 3, which means linear or cubic-spline interpolation. + * + * This attribute is optional. + * + * See page 265 in the PDF 1.3 spec. + * @param theEncode Vector objects of Double objects. + * This is the linear mapping of input values intop the domain + * of the function's sample table. Default is hard to represent in + * ascii, but basically [0 (Size0 1) 0 (Size1 1)...]. + * This attribute is optional. + * + * See page 265 in the PDF 1.3 spec. + * @param theDecode Vector objects of Double objects. + * This is a linear mapping of sample values into the range. + * The default is just the range. + * + * This attribute is optional. + * Read about it on page 265 of the PDF 1.3 spec. + * @param theFunctionDataStream The sample values that specify the function are provided in a stream. + * + * This is optional, but is almost always used. + * + * Page 265 of the PDF 1.3 spec has more. + * @param theFilter This is a vector of String objects which are the various filters that + * have are to be applied to the stream to make sense of it. Order matters, + * so watch out. + * + * This is not documented in the Function section of the PDF 1.3 spec, + * it was deduced from samples that this is sometimes used, even if we may never + * use it in FOP. It is added for completeness sake. + * @param theNumber The object number of this PDF object. + * @param theFunctionType This is the type of function (0,2,3, or 4). + * It should be 0 as this is the constructor for sampled functions. + */ + public PDFFunction makeFunction(int theFunctionType, + Vector theDomain, Vector theRange, + Vector theSize,int theBitsPerSample, + int theOrder,Vector theEncode,Vector theDecode, + StringBuffer theFunctionDataStream, Vector theFilter) + {//Type 0 function + PDFFunction function = new PDFFunction( + ++this.objectcount, theFunctionType, + theDomain, theRange, theSize, + theBitsPerSample, theOrder, + theEncode, theDecode, + theFunctionDataStream, theFilter); + + this.objects.addElement(function); + return(function); + } + + /** + * make a type Exponential interpolation function + * (for shading usually) + * + * @param theDomain Vector objects of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector of Doubles that is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theCZero This is a vector of Double objects which defines the function result + * when x=0. + * + * This attribute is optional. + * It's described on page 268 of the PDF 1.3 spec. + * @param theCOne This is a vector of Double objects which defines the function result + * when x=1. + * + * This attribute is optional. + * It's described on page 268 of the PDF 1.3 spec. + * @param theInterpolationExponentN This is the inerpolation exponent. + * + * This attribute is required. + * PDF Spec page 268 + * @param theFunctionType The type of the function, which should be 2. + */ + public PDFFunction makeFunction(int theFunctionType, + Vector theDomain, Vector theRange, + Vector theCZero, Vector theCOne, + double theInterpolationExponentN) + + {//type 2 + PDFFunction function = new PDFFunction( + ++this.objectcount, + theFunctionType, + theDomain, theRange, + theCZero, theCOne, + theInterpolationExponentN); + + this.objects.addElement(function); + return(function); + } + + /** + * Make a Type 3 Stitching function + * + * @param theDomain Vector objects of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector objects of Double objects. + * This is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theFunctions A Vector of the PDFFunction objects that the stitching function stitches. + * + * This attributed is required. + * It is described on page 269 of the PDF spec. + * @param theBounds This is a vector of Doubles representing the numbers that, + * in conjunction with Domain define the intervals to which each function from + * the 'functions' object applies. It must be in order of increasing magnitude, + * and each must be within Domain. + * + * It basically sets how much of the gradient each function handles. + * + * This attributed is required. + * It's described on page 269 of the PDF 1.3 spec. + * @param theEncode Vector objects of Double objects. + * This is the linear mapping of input values intop the domain + * of the function's sample table. Default is hard to represent in + * ascii, but basically [0 (Size0 1) 0 (Size1 1)...]. + * This attribute is required. + * + * See page 270 in the PDF 1.3 spec. + * @param theFunctionType This is the function type. It should be 3, + * for a stitching function. + */ + public PDFFunction makeFunction(int theFunctionType, + Vector theDomain, Vector theRange, + Vector theFunctions, Vector theBounds, + Vector theEncode) + {//Type 3 + + PDFFunction function = new PDFFunction( + ++this.objectcount, + theFunctionType, + theDomain, theRange, + theFunctions, theBounds, + theEncode); + + this.objects.addElement(function); + return(function); + } + + /** + * make a postscript calculator function + * + * @param theNumber + * @param theFunctionType + * @param theDomain + * @param theRange + * @param theFunctionDataStream + */ + public PDFFunction makeFunction(int theNumber, int theFunctionType, + Vector theDomain, Vector theRange, + StringBuffer theFunctionDataStream) + { //Type 4 + PDFFunction function = new PDFFunction( + ++this.objectcount, + theFunctionType, + theDomain, theRange, + theFunctionDataStream); + + this.objects.addElement(function); + return(function); + + } + + /** + * make a function based shading object + * + * @param theShadingType The type of shading object, which should be 1 for function + * based shading. + * @param theColorSpace The colorspace is 'DeviceRGB' or something similar. + * @param theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Whether or not to anti-alias. + * @param theDomain Optional vector of Doubles specifying the domain. + * @param theMatrix Vector of Doubles specifying the matrix. + * If it's a pattern, then the matrix maps it to pattern space. + * If it's a shading, then it maps it to current user space. + * It's optional, the default is the identity matrix + * @param theFunction The PDF Function that maps an (x,y) location to a color + */ + public PDFShading makeShading(int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + Vector theDomain, Vector theMatrix, PDFFunction theFunction) + { //make Shading of Type 1 + String theShadingName = new String("Sh"+(++this.shadingCount)); + + PDFShading shading = new PDFShading(++this.objectcount, theShadingName, + theShadingType, theColorSpace, theBackground, theBBox, + theAntiAlias, theDomain, theMatrix, theFunction); + this.objects.addElement(shading); + + //add this shading to resources + this.resources.addShading(shading); + + return(shading); + } + + /** + * Make an axial or radial shading object. + * + * @param theShadingType 2 or 3 for axial or radial shading + * @param theColorSpace "DeviceRGB" or similar. + * @param theBackground theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Default is false + * @param theCoords Vector of four (type 2) or 6 (type 3) Double + * @param theDomain Vector of Doubles specifying the domain + * @param theFunction the Stitching (PDFfunction type 3) function, even if it's stitching a single function + * @param theExtend Vector of Booleans of whether to extend teh start and end colors past the start and end points + * The default is [false, false] + */ + public PDFShading makeShading(int theShadingType, + ColorSpace theColorSpace, Vector theBackground, + Vector theBBox, boolean theAntiAlias, + Vector theCoords, Vector theDomain, + PDFFunction theFunction, Vector theExtend) + { //make Shading of Type 2 or 3 + String theShadingName = new String("Sh"+(++this.shadingCount)); + + PDFShading shading = new PDFShading(++this.objectcount, theShadingName, + theShadingType, theColorSpace, + theBackground, theBBox, theAntiAlias, + theCoords, theDomain,theFunction,theExtend); + + this.resources.addShading(shading); + + this.objects.addElement(shading); + return(shading); + } + + /** + * Make a free-form gouraud shaded triangle mesh, coons patch mesh, or tensor patch mesh + * shading object + * + * @param theShadingType 4, 6, or 7 depending on whether it's + * Free-form gouraud-shaded triangle meshes, coons patch meshes, + * or tensor product patch meshes, respectively. + * @param theColorSpace "DeviceRGB" or similar. + * @param theBackground theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Default is false + * @param theBitsPerCoordinate 1,2,4,8,12,16,24 or 32. + * @param theBitsPerComponent 1,2,4,8,12, and 16 + * @param theBitsPerFlag 2,4,8. + * @param theDecode Vector of Doubles see PDF 1.3 spec pages 303 to 312. + * @param theFunction the PDFFunction + */ + public PDFShading makeShading(int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + int theBitsPerCoordinate, int theBitsPerComponent, + int theBitsPerFlag, Vector theDecode, PDFFunction theFunction) + { //make Shading of type 4,6 or 7 + String theShadingName = new String("Sh"+(++this.shadingCount)); + + PDFShading shading = new PDFShading(++this.objectcount, theShadingName, + theShadingType, theColorSpace, + theBackground, theBBox, theAntiAlias, + theBitsPerCoordinate,theBitsPerComponent, + theBitsPerFlag, theDecode, theFunction); + + this.resources.addShading(shading); + + this.objects.addElement(shading); + return(shading); + } + + /** + * make a Lattice-Form Gouraud mesh shading object + * + * @param theShadingType 5 for lattice-Form Gouraud shaded-triangle mesh + * without spaces. "Shading1" or "Sh1" are good examples. + * @param theColorSpace "DeviceRGB" or similar. + * @param theBackground theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Default is false + * @param theBitsPerCoordinate 1,2,4,8,12,16, 24, or 32 + * @param theBitsPerComponent 1,2,4,8,12,24,32 + * @param theDecode Vector of Doubles. See page 305 in PDF 1.3 spec. + * @param theVerticesPerRow number of vertices in each "row" of the lattice. + * @param theFunction The PDFFunction that's mapped on to this shape + */ + public PDFShading makeShading(int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + int theBitsPerCoordinate, int theBitsPerComponent, + Vector theDecode, int theVerticesPerRow, PDFFunction theFunction) + { //make shading of Type 5 + String theShadingName = new String("Sh"+(++this.shadingCount)); + + PDFShading shading= new PDFShading(++this.objectcount, + theShadingName, theShadingType, theColorSpace, + theBackground, theBBox, theAntiAlias, + theBitsPerCoordinate, theBitsPerComponent, + theDecode, theVerticesPerRow, theFunction); + + this.resources.addShading(shading); + + this.objects.addElement(shading); + + return(shading); + } + + /** + * Make a tiling pattern + * + * @param thePatternType the type of pattern, which is 1 for tiling. + * @param theResources the resources associated with this pattern + * @param thePaintType 1 or 2, colored or uncolored. + * @param theTilingType 1, 2, or 3, constant spacing, no distortion, or faster tiling + * @param theBBox Vector of Doubles: The pattern cell bounding box + * @param theXStep horizontal spacing + * @param theYStep vertical spacing + * @param theMatrix Optional Vector of Doubles transformation matrix + * @param theXUID Optional vector of Integers that uniquely identify the pattern + * @param thePatternDataStream The stream of pattern data to be tiled. + */ + public PDFPattern makePattern( + int thePatternType, //1 + PDFResources theResources, + int thePaintType, int theTilingType, + Vector theBBox, double theXStep, double theYStep, + Vector theMatrix, Vector theXUID, StringBuffer thePatternDataStream) + { + String thePatternName = new String("Pa"+(++this.patternCount)); + //int theNumber, String thePatternName, + //PDFResources theResources + PDFPattern pattern = new PDFPattern(++this.objectcount, + thePatternName, + theResources, 1, + thePaintType, theTilingType, + theBBox, theXStep, theYStep, + theMatrix, theXUID, thePatternDataStream); + + this.resources.addPattern(pattern); + this.objects.addElement(pattern); + + return(pattern); + } + + /** + * Make a smooth shading pattern + * + * @param thePatternType the type of the pattern, which is 2, smooth shading + * @param theShading the PDF Shading object that comprises this pattern + * @param theXUID optional:the extended unique Identifier if used. + * @param theExtGState optional: the extended graphics state, if used. + * @param theMatrix Optional:Vector of Doubles that specify the matrix. + */ + public PDFPattern makePattern(int thePatternType, + PDFShading theShading, Vector theXUID, + StringBuffer theExtGState,Vector theMatrix) + { + String thePatternName = new String("Pa"+(++this.patternCount)); + + PDFPattern pattern = new PDFPattern(++this.objectcount, + thePatternName, 2, theShading, theXUID, + theExtGState, theMatrix); + + this.resources.addPattern(pattern); + this.objects.addElement(pattern); + + return(pattern); + } + + public int getColorSpace() + { + return(this.colorspace.getColorSpace()); + } + + public void setColorSpace(int theColorspace) + { + this.colorspace.setColorSpace(theColorspace); + return; + } + + public PDFPattern createGradient(boolean radial, + ColorSpace theColorspace, + Vector theColors, + Vector theBounds, + Vector theCoords) + { + PDFShading myShad; + PDFFunction myfunky; + PDFFunction myfunc; + Vector theCzero; + Vector theCone; + PDFPattern myPattern; + ColorSpace theColorSpace; + double interpolation = (double) 1.000; + Vector theFunctions = new Vector(); + + int currentPosition; + int lastPosition = theColors.size()-1; + + + //if 5 elements, the penultimate element is 3. + //do not go beyond that, because you always need + //to have a next color when creating the function. + + for ( currentPosition=0; + currentPosition < lastPosition; + currentPosition++ ) {//for every consecutive color pair + PDFColor currentColor = + (PDFColor)theColors.elementAt(currentPosition); + PDFColor nextColor = + (PDFColor)theColors.elementAt(currentPosition+1); + //colorspace must be consistant + if ( this.colorspace.getColorSpace() != currentColor.getColorSpace() ) + currentColor.setColorSpace(this.colorspace.getColorSpace()); + + if ( this.colorspace.getColorSpace() != nextColor.getColorSpace() ) + nextColor.setColorSpace(this.colorspace.getColorSpace()); + + theCzero = currentColor.getVector(); + theCone = nextColor.getVector(); + + myfunc = this.makeFunction( + 2, null, null, + theCzero, theCone, + interpolation); + + theFunctions.addElement(myfunc); + + }//end of for every consecutive color pair + + myfunky = this.makeFunction(3, + null, null, + theFunctions, theBounds, + null); + + if ( radial ) { + if ( theCoords.size() ==6 ) { + myShad = this.makeShading( + 3, this.colorspace, + null, null, false, + theCoords, null, myfunky, null); + } + else { //if the center x, center y, and radius specifiy + //the gradient, then assume the same center x, center y, + //and radius of zero for the other necessary component + Vector newCoords = new Vector(); + newCoords.addElement(theCoords.elementAt(0)); + newCoords.addElement(theCoords.elementAt(1)); + newCoords.addElement(theCoords.elementAt(2)); + newCoords.addElement(theCoords.elementAt(0)); + newCoords.addElement(theCoords.elementAt(1)); + newCoords.addElement(new Double(0.0)); + + myShad = this.makeShading( + 3, this.colorspace, + null, null, false, + newCoords, null, myfunky, null); + + } + } + else { + myShad = this.makeShading( + 2, this.colorspace, + null, null, false, + theCoords, null, myfunky, null); + + } + + myPattern = this.makePattern( + 2, myShad, null, null, null); + + return(myPattern); + } + + + /** + * 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") + * @param encoding character encoding scheme used by the font + * @return the created /Font object + */ + public PDFFont makeFont(String fontname, String basefont, + String encoding) { + + /* create a PDFFont with the next object number and add to the + list of objects */ + PDFFont font = new PDFFont(++this.objectcount, fontname, + basefont, encoding); + this.objects.addElement(font); + return font; + } + + public int addImage(FopImage img) { + // check if already created + String url = img.getURL(); + PDFXObject xObject = (PDFXObject) this.xObjectsMap.get(url); + if ( xObject != null ) return xObject.getXNumber(); + // else, create a new one + xObject = new PDFXObject(++this.objectcount, + ++this.xObjectCount, img); + this.objects.addElement(xObject); + this.xObjects.addElement(xObject); + this.xObjectsMap.put(url, xObject); + return xObjectCount; + } + + /** + * make a /Page object + * + * @param resources resources object to use + * @param contents stream object with content + * @param pagewidth width of the page in points + * @param pageheight height of the page in points + * + * @return the created /Page object + */ + public PDFPage makePage(PDFResources resources, + PDFStream contents, + int pagewidth, + int pageheight, + Page currentPage) { + + /* create a PDFPage with the next object number, the given + resources, contents and dimensions */ + PDFPage page = new PDFPage(++this.objectcount, resources, + contents, + pagewidth, pageheight); + + Enumeration enum=currentPage.getIDList().elements(); + while ( enum.hasMoreElements() ) { + String id=enum.nextElement().toString(); + idReferences.setInternalGoToPageReference(id,page.referencePDF()); + } + + /* add it to the list of objects */ + this.objects.addElement(page); + + /* add the page to the Root */ + this.root.addPage(page); + + return page; + } + + /** + * make a link object + * + * @param rect the clickable rectangle + * @param destination the destination file + * @param linkType the link type + * @return the PDFLink object created + */ + public PDFLink makeLink(Rectangle rect, String destination, int linkType) { + + PDFLink linkObject; + PDFAction action; + + PDFLink link = new PDFLink(++this.objectcount, rect); + this.objects.addElement(link); + + if ( linkType == LinkSet.EXTERNAL ) { + //check destination + if ( destination.endsWith(".pdf") ) { //FileSpec + PDFFileSpec fileSpec = new PDFFileSpec(++this.objectcount,destination); + this.objects.addElement(fileSpec); + action = new PDFGoToRemote(++this.objectcount,fileSpec); + this.objects.addElement(action); + link.setAction(action); + } + else { //URI + PDFUri uri = new PDFUri(destination); + link.setAction(uri); + } + } + else { // linkType is internal + String goToReference; + PDFInternalLink internalLink; + + if ( idReferences.doesIDExist(destination) ) { + if ( idReferences.doesGoToReferenceExist(destination) ) { + goToReference = idReferences.getInternalLinkGotToReference(destination); + } + else { //assign Internal Link GoTo object + goToReference = idReferences.createInternalLinkGoTo(destination,++this.objectcount); + this.objects.addElement(idReferences.getPDFGoTo(destination)); + } + } + else { //id was not found, so create it + idReferences.createNewId(destination); + idReferences.addToIdValidationList(destination); + goToReference = idReferences.createInternalLinkGoTo(destination,++this.objectcount); + this.objects.addElement(idReferences.getPDFGoTo(destination)); + } + internalLink = new PDFInternalLink(goToReference); + link.setAction(internalLink); + } + return link; + } + + + /** + * make a stream object + * + * @return the stream object created + */ + public PDFStream makeStream() { + + /* create a PDFStream with the next object number and add it + + to the list of objects */ + PDFStream obj = new PDFStream(++this.objectcount); + this.objects.addElement(obj); + return obj; + } + + /** + * make an annotation list object + * + * @return the annotation list object created + */ + public PDFAnnotList makeAnnotList() { + + /* create a PDFAnnotList with the next object number and add it + to the list of objects */ + PDFAnnotList obj = new PDFAnnotList(++this.objectcount); + this.objects.addElement(obj); + return obj; + } + + /** + * get the /Resources object for the document + * + * @return the /Resources object + */ + public PDFResources getResources() { + return this.resources; + } + + /** + * write the entire document out + * + * @param writer the PrinterWriter to output the document to + */ + public void output(PrintWriter writer) throws IOException { + + /* output the header and increment the character position by + the header's length */ + this.position += outputHeader(writer); + + this.resources.setXObjects(xObjects); + + /* loop through the object numbers */ + for ( int i=1; i <= this.objectcount; i++ ) { + + /* add the position of this object to the list of object + locations */ + this.location.addElement(new Integer(this.position)); + + /* retrieve the object with the current number */ + PDFObject object = (PDFObject)this.objects.elementAt(i-1); + + /* output the object and increment the character position + by the object's length */ + this.position += object.output(writer); + } + + /* output the xref table and increment the character position + by the table's length */ + this.position += outputXref(writer); + + /* output the trailer and flush the Writer */ + outputTrailer(writer); + writer.flush(); + } + + /** + * write the PDF header + * + * @param writer the PrintWriter to write the header to + * @return the number of characters written + */ + protected int outputHeader(PrintWriter writer) throws IOException { + String pdf = "%PDF-" + this.pdfVersion + "\n"; + writer.write(pdf); + return pdf.length(); + } + + /** + * write the trailer + * + * @param writer the PrintWriter to write the trailer to + */ + protected void outputTrailer(PrintWriter writer) throws IOException { + + /* construct the trailer */ + String pdf = "trailer\n<<\n/Size " + (this.objectcount+1) + + "\n/Root " + this.root.number + " " + this.root.generation + + " R\n/Info " + this.info.number + " " + + this.info.generation + " R\n>>\nstartxref\n" + this.xref + + "\n%%EOF\n"; + + /* write the trailer */ + writer.write(pdf); + } + + /** + * write the xref table + * + * @param writer the PrintWriter to write the xref table to + * @return the number of characters written + */ + private int outputXref(PrintWriter writer) throws IOException { + + /* remember position of xref table */ + this.xref = this.position; + + /* construct initial part of xref */ + StringBuffer pdf = new StringBuffer("xref\n0 " + (this.objectcount+1) + + "\n0000000000 65535 f \n"); + + /* loop through object numbers */ + for ( int i=1; i < this.objectcount+1; i++ ) { + + /* contruct xref entry for object */ + String padding = "0000000000"; + String x = this.location.elementAt(i-1).toString(); + String loc = padding.substring(x.length()) + x; + + /* append to xref table */ + pdf = pdf.append(loc + " 00000 n \n"); + } + + /* write the xref table and return the character length */ + writer.write(pdf.toString()); + return pdf.length(); + } + + public void setIDReferences(IDReferences idReferences){ + this.idReferences= idReferences; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFileSpec.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFileSpec.java new file mode 100644 index 000000000..f588b9c40 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFileSpec.java @@ -0,0 +1,98 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +/** + * class representing a /FileSpec object. + * + */ +public class PDFFileSpec extends PDFObject { + + /** the filename */ + protected String filename; + + /** + * create a /FileSpec object. + * + * @param number the object's number + * @param filename the filename represented by this object + */ + public PDFFileSpec(int number, String filename) { + + /* generic creation of object */ + super(number); + + this.filename = filename; + } + + /** + * represent the object in PDF + * + * @return the PDF string + */ + public String toPDF() { + String p = new String(this.number + " " + this.generation + + " obj\n<<\n/Type /FileSpec\n" + + "/F (" + this.filename + ")\n" + + ">>\nendobj\n"); + return p; + } + + /* example + 29 0 obj + << + /Type /FileSpec + /F (table1.pdf) + >> + endobj + */ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilter.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilter.java new file mode 100644 index 000000000..b0adc29c0 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilter.java @@ -0,0 +1,236 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + +*/ + +//Author: Eric SCHAEFFER +//Description: represent a PDF filter object + +package org.apache.fop.pdf; + +public class PDFFilter { + public static int ASCII_HEX_DECODE = 1; + public static int ASCII_85_DECODE = 2; + public static int LZW_DECODE = 3; + public static int RUN_LENGTH_DECODE = 4; + public static int CCITT_FAX_DECODE = 5; + public static int DCT_DECODE = 6; + public static int FLATE_DECODE = 7; + + // Filter type + private int m_filterType; + + // Properties + + // LZW - Flat + private Integer m_predictor = null; + // LZW - Flat - CCITT + private Integer m_columns = null; + // LZW - Flat + private Integer m_colors = null; + // LZW - Flat + private Integer m_bitsPerComponent = null; + // LZW + private Integer m_earlyChange = null; + // CCITT + private Integer m_k = null; + // CCITT + private Boolean m_endOfLine = null; + // CCITT + private Boolean m_encodedByteAlign = null; + // CCITT + private Integer m_rows = null; + // CCITT + private Boolean m_endOfBlock = null; + // CCITT + private Boolean m_blackls1 = null; + // CCITT + private Integer m_damagedRowsBeforeError = null; + + public PDFFilter(int filter) throws PDFFilterException { + if ( (filter != ASCII_HEX_DECODE) && + (filter != ASCII_85_DECODE) && + (filter != LZW_DECODE) && + (filter != RUN_LENGTH_DECODE) && + (filter != CCITT_FAX_DECODE) && + (filter != DCT_DECODE) && + (filter != FLATE_DECODE) + ) { + throw new PDFFilterException("Filter type not supported"); + } + this.m_filterType = filter; + } + + public int getType() { + return this.m_filterType; + } + + public void setPredictor(Integer value) throws PDFFilterException { + if ((this.m_filterType != LZW_DECODE) && (this.m_filterType != FLATE_DECODE)) { + throw new PDFFilterException("No Predictor property for this filter"); + } + + this.m_predictor = value; + } + + public Integer getPredictor() throws PDFFilterException { + if ((this.m_filterType != LZW_DECODE) && (this.m_filterType != FLATE_DECODE)) { + throw new PDFFilterException("No Predictor property for this filter"); + } + + return this.m_predictor; + } + +// ... etc ... + + public String toPDF() { + String pdf = null; +/* + public static int DCT_DECODE = 6; +*/ + if (this.m_filterType == ASCII_HEX_DECODE) { + pdf = "/ASCIIHexDecode"; + } else if (this.m_filterType == ASCII_85_DECODE) { + pdf = "/ASCI85Decode"; + } else if (this.m_filterType == LZW_DECODE) { + StringBuffer buffer = new StringBuffer(); + buffer.append("/LZWDecode"); + + if (this.m_predictor != null) { + buffer.append(" /Predictor "); + buffer.append(this.m_predictor); + } + if (this.m_columns != null) { + buffer.append(" /Columns "); + buffer.append(this.m_columns); + } + if (this.m_colors != null) { + buffer.append(" /Colors "); + buffer.append(this.m_colors); + } + if (this.m_bitsPerComponent != null) { + buffer.append(" /BitsPerComponent "); + buffer.append(this.m_bitsPerComponent); + } + if (this.m_earlyChange != null) { + buffer.append(" /EarlyChange "); + buffer.append(this.m_earlyChange); + } + + pdf = buffer.toString(); + } else if (this.m_filterType == FLATE_DECODE) { + StringBuffer buffer = new StringBuffer(); + buffer.append("/FlateDecode"); + + if (this.m_predictor != null) { + buffer.append(" /Predictor "); + buffer.append(this.m_predictor); + } + if (this.m_columns != null) { + buffer.append(" /Columns "); + buffer.append(this.m_columns); + } + if (this.m_colors != null) { + buffer.append(" /Colors "); + buffer.append(this.m_colors); + } + if (this.m_bitsPerComponent != null) { + buffer.append(" /BitsPerComponent "); + buffer.append(this.m_bitsPerComponent); + } + + pdf = buffer.toString(); + } else if (this.m_filterType == RUN_LENGTH_DECODE) { + pdf = "/RunLengthDecode"; + } else if (this.m_filterType == CCITT_FAX_DECODE) { + StringBuffer buffer = new StringBuffer(); + buffer.append("/CCITTFaxDecode"); + + if (this.m_k != null) { + buffer.append(" /K "); + buffer.append(this.m_k); + } + if (this.m_endOfLine != null) { + buffer.append(" /EndOfLine "); + buffer.append(this.m_endOfLine); + } + if (this.m_encodedByteAlign != null) { + buffer.append(" /EncodedByteAlign "); + buffer.append(this.m_encodedByteAlign); + } + if (this.m_columns != null) { + buffer.append(" /Columns "); + buffer.append(this.m_columns); + } + if (this.m_rows != null) { + buffer.append(" /Rows "); + buffer.append(this.m_rows); + } + if (this.m_endOfBlock != null) { + buffer.append(" /EndOfBlock "); + buffer.append(this.m_endOfBlock); + } + if (this.m_blackls1 != null) { + buffer.append(" /Blackls1 "); + buffer.append(this.m_blackls1); + } + if (this.m_damagedRowsBeforeError != null) { + buffer.append(" /DamagedRowsBeforeError "); + buffer.append(this.m_damagedRowsBeforeError); + } + + pdf = buffer.toString(); + } else if (this.m_filterType == DCT_DECODE) { + pdf = "/DCTDecode"; + } + + return pdf; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilterException.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilterException.java new file mode 100644 index 000000000..e48299402 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFilterException.java @@ -0,0 +1,66 @@ +/* + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +//Author: Eric SCHAEFFER +//Description: Filter Exception + +package org.apache.fop.pdf; + +public class PDFFilterException extends Exception { + + public PDFFilterException() { + super(); + } + + public PDFFilterException(String message) { + super(message); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFont.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFont.java new file mode 100644 index 000000000..49a6c4791 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFont.java @@ -0,0 +1,117 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.io.IOException; +import java.io.PrintWriter; + +/** + * class representing a /Font object. + * + * A small object expressing the base font name and encoding of a + * Type 1 font along with an internal name for the font used within + * streams of content + */ +public class PDFFont extends PDFObject { + + /** the internal name for the font (eg "F1") */ + protected String fontname; + + /** the base font name (eg "Helvetica") */ + protected String basefont; + + /** the character encoding scheme used by the font (eg + "WinAnsiEncoding") */ + protected String encoding; + + /** + * create the /Font object + * + * @param the object's number + * @param fontname the internal name for the font + * @param basefont the base font name + * @param encoding the character encoding schema used by the font + */ + public PDFFont(int number, String fontname, String basefont, + String encoding) { + + /* generic creation of PDF object */ + super(number); + + /* set fields using paramaters */ + this.fontname = fontname; + this.basefont = basefont; + this.encoding = encoding; + } + + /** + * get the internal name used for this font + * + * @return the internal name + */ + public String getName() { + return this.fontname; + } + + /** + * produce the PDF representation for the object + * + * @return the PDF + */ + public String toPDF() { + String p = this.number + " " + this.generation + + " obj\n<< /Type /Font\n/Subtype /Type1\n/Name /" + + this.fontname + "\n/BaseFont /" + this.basefont + + "\n/Encoding /"+ this.encoding + " >>\nendobj\n"; + return p; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFunction.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFunction.java new file mode 100644 index 000000000..674c86761 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFFunction.java @@ -0,0 +1,758 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +//Java... +import java.util.Vector; + +/** + * class representing a PDF Function. + * + * PDF Functions represent parameterized mathematical formulas and sampled representations with + * arbitrary resolution. Functions are used in two areas: device-dependent + * rasterization information for halftoning and transfer + * functions, and color specification for smooth shading (a PDF 1.3 feature). + * + * All PDF Functions have a FunctionType (0,2,3, or 4), a Domain, and a Range. + */ +public class PDFFunction extends PDFObject { + //Guts common to all function types + /** Required: The Type of function (0,2,3,4) default is 0.*/ + protected int functionType =0; //Default + + /** + * Required: 2 * m Array of Double numbers which are possible inputs to the function + */ + protected Vector domain = null; + + /** + * Required: 2 * n Array of Double numbers which are possible outputs to the function + */ + protected Vector range = null; + + /* ********************TYPE 0***************************** */ + //FunctionType 0 specific function guts + /** + * Required: Array containing the Integer size of the Domain and Range, respectively. + * Note: This is really more like two seperate integers, sizeDomain, and sizeRange, + * but since they're expressed as an array in PDF, my implementation reflects that. + */ + protected Vector size = null; + + /** Required for Type 0: Number of Bits used to represent each sample value. Limited to 1,2,4,8,12,16,24, or 32 */ + protected int bitsPerSample = 1; + /** Optional for Type 0: order of interpolation between samples. Limited to linear (1) or cubic (3). Default is 1 */ + protected int order = 1; + /** + * Optional for Type 0: A 2 * m array of Doubles which provides a linear mapping of input values to the domain. + * + * Required for Type 3: A 2 * k array of Doubles that, taken in pairs, map each subset of the domain defined by Domain and the Bounds array to the domain of the corresponding function. + * Should be two values per function, usually (0,1), as in [0 1 0 1] for 2 functions. + */ + protected Vector encode = null; + /** + * Optinoal for Type 0: A 2 * n array of Doubles which provides a linear mapping of sample values to the range. Defaults to Range. + */ + protected Vector decode = null; + /** Optional For Type 0: A stream of sample values */ + /** Required For Type 4: Postscript Calculator function composed of arithmetic, boolean, and stack operators + boolean constants */ + protected StringBuffer functionDataStream = null; + /** + * Required (?) For Type 0: A vector of Strings for the various filters to be used to decode the stream. + * These are how the string is compressed. Flate, LZW, etc. + */ + protected Vector filter = null; + /* *************************TYPE 2************************** */ + /** + * Required For Type 2: An Array of n Doubles defining the function result when x=0. Default is [0]. + */ + protected Vector cZero = null; + /** + * Required For Type 2: An Array of n Doubles defining the function result when x=1. Default is [1]. + */ + protected Vector cOne = null; + /** + * Required for Type 2: The interpolation exponent. + * Each value x will return n results. + * Must be greater than 0. + */ + protected double interpolationExponentN = 1; + + /* *************************TYPE 3************************** */ + /** Required for Type 3: An vector of PDFFunctions which form an array of k single input functions making up the stitching function. */ + protected Vector functions = null; + /** + * Optional for Type 3: An array of (k-1) Doubles that, in combination with Domain, define the intervals to which each function from the Functions array apply. Bounds elements must be in order of increasing magnitude, and each value must be within the value of Domain. + * k is the number of functions. + * If you pass null, it will output (1/k) in an array of k-1 elements. + * This makes each function responsible for an equal amount of the stitching function. + * It makes the gradient even. + */ + protected Vector bounds = null; + // See encode above, as it's also part of Type 3 Functions. + + /* *************************TYPE 4************************** */ + //See 'data' above. + private PDFNumber pdfNumber = new PDFNumber(); + + /** + * create an complete Function object of Type 0, A Sampled function. + * + * Use null for an optional object parameter if you choose not to use it. + * For optional int parameters, pass the default. + * + * @param theDomain Vector objects of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector objects of Double objects. + * This is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theSize A Vector object of Integer objects. + * This is the number of samples in each input dimension. + * I can't imagine there being more or less than two input dimensions, + * so maybe this should be an array of length 2. + * + * See page 265 of the PDF 1.3 Spec. + * @param theBitsPerSample An int specifying the number of bits user to represent each sample value. + * Limited to 1,2,4,8,12,16,24 or 32. + * See page 265 of the 1.3 PDF Spec. + * @param theOrder The order of interpolation between samples. Default is 1 (one). Limited + * to 1 (one) or 3, which means linear or cubic-spline interpolation. + * + * This attribute is optional. + * + * See page 265 in the PDF 1.3 spec. + * @param theEncode Vector objects of Double objects. + * This is the linear mapping of input values intop the domain + * of the function's sample table. Default is hard to represent in + * ascii, but basically [0 (Size0 1) 0 (Size1 1)...]. + * This attribute is optional. + * + * See page 265 in the PDF 1.3 spec. + * @param theDecode Vector objects of Double objects. + * This is a linear mapping of sample values into the range. + * The default is just the range. + * + * This attribute is optional. + * Read about it on page 265 of the PDF 1.3 spec. + * @param theFunctionDataStream The sample values that specify the function are provided in a stream. + * + * This is optional, but is almost always used. + * + * Page 265 of the PDF 1.3 spec has more. + * @param theFilter This is a vector of String objects which are the various filters that + * have are to be applied to the stream to make sense of it. Order matters, + * so watch out. + * + * This is not documented in the Function section of the PDF 1.3 spec, + * it was deduced from samples that this is sometimes used, even if we may never + * use it in FOP. It is added for completeness sake. + * @param theNumber The object number of this PDF object. + * @param theFunctionType This is the type of function (0,2,3, or 4). + * It should be 0 as this is the constructor for sampled functions. + */ + public PDFFunction(int theNumber, int theFunctionType, + Vector theDomain, Vector theRange, + Vector theSize,int theBitsPerSample, + int theOrder,Vector theEncode,Vector theDecode, + StringBuffer theFunctionDataStream, Vector theFilter) + { + super(theNumber); + + this.functionType = 0; //dang well better be 0; + this.size = theSize; + this.bitsPerSample = theBitsPerSample; + this.order = theOrder; //int + this.encode = theEncode;//vector of int + this.decode = theDecode; //vector of int + this.functionDataStream = theFunctionDataStream; + this.filter = theFilter;//vector of Strings + + //the domain and range are actually two dimensional arrays. + //so if there's not an even number of items, bad stuff + //happens. + this.domain = theDomain; + this.range = theRange; + } + + /** + * create an complete Function object of Type 2, an Exponential Interpolation function. + * + * Use null for an optional object parameter if you choose not to use it. + * For optional int parameters, pass the default. + * + * @param theNumber the object's number + * @param theDomain Vector objects of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector of Doubles that is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theCZero This is a vector of Double objects which defines the function result + * when x=0. + * + * This attribute is optional. + * It's described on page 268 of the PDF 1.3 spec. + * @param theCOne This is a vector of Double objects which defines the function result + * when x=1. + * + * This attribute is optional. + * It's described on page 268 of the PDF 1.3 spec. + * @param theInterpolationExponentN This is the inerpolation exponent. + * + * This attribute is required. + * PDF Spec page 268 + * @param theFunctionType The type of the function, which should be 2. + */ + public PDFFunction(int theNumber, int theFunctionType, + Vector theDomain, Vector theRange, + Vector theCZero, Vector theCOne, + double theInterpolationExponentN) + { + super(theNumber); + + this.functionType = 2; //dang well better be 2; + + this.cZero = theCZero; + this.cOne = theCOne; + this.interpolationExponentN = theInterpolationExponentN; + + + this.domain = theDomain; + this.range = theRange; + + } + + /** + * create an complete Function object of Type 3, a Stitching function. + * + * Use null for an optional object parameter if you choose not to use it. + * For optional int parameters, pass the default. + * + * @param theNumber the object's number + * @param theDomain Vector objects of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector objects of Double objects. + * This is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theFunctions A Vector of the PDFFunction objects that the stitching function stitches. + * + * This attributed is required. + * It is described on page 269 of the PDF spec. + * @param theBounds This is a vector of Doubles representing the numbers that, + * in conjunction with Domain define the intervals to which each function from + * the 'functions' object applies. It must be in order of increasing magnitude, + * and each must be within Domain. + * + * It basically sets how much of the gradient each function handles. + * + * This attributed is required. + * It's described on page 269 of the PDF 1.3 spec. + * @param theEncode Vector objects of Double objects. + * This is the linear mapping of input values intop the domain + * of the function's sample table. Default is hard to represent in + * ascii, but basically [0 (Size0 1) 0 (Size1 1)...]. + * This attribute is required. + * + * See page 270 in the PDF 1.3 spec. + * @param theFunctionType This is the function type. It should be 3, + * for a stitching function. + */ + public PDFFunction(int theNumber, int theFunctionType, + Vector theDomain, Vector theRange, + Vector theFunctions, Vector theBounds, + Vector theEncode) + { + super(theNumber); + + this.functionType = 3; //dang well better be 3; + + this.functions = theFunctions; + this.bounds = theBounds; + this.encode = theEncode; + this.domain = theDomain; + this.range = theRange; + + } + + /** + * create an complete Function object of Type 4, a postscript calculator function. + * + * Use null for an optional object parameter if you choose not to use it. + * For optional int parameters, pass the default. + * + * @param theDomain Vector object of Double objects. + * This is the domain of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theRange Vector object of Double objects. + * This is the Range of the function. + * See page 264 of the PDF 1.3 Spec. + * @param theFunctionDataStream This is a stream of arithmetic, boolean, and stack operators and boolean constants. + * I end up enclosing it in the '{' and '}' braces for you, so don't do it + * yourself. + * + * This attribute is required. + * It's described on page 269 of the PDF 1.3 spec. + * @param theNumber The object number of this PDF object. + * @param theFunctionType The type of function which should be 4, as this is + * a Postscript calculator function + */ + public PDFFunction(int theNumber, int theFunctionType, + Vector theDomain, Vector theRange, + StringBuffer theFunctionDataStream) + { + super(theNumber); + + this.functionType = 4; //dang well better be 4; + this.functionDataStream = theFunctionDataStream; + + this.domain = theDomain; + + this.range = theRange; + + } + + + /** + * represent as PDF. Whatever the FunctionType is, the correct + * representation spits out. The sets of required and optional + * attributes are different for each type, but if a required + * attribute's object was constructed as null, then no error + * is raised. Instead, the malformed PDF that was requested + * by the construction is dutifully output. + * This policy should be reviewed. + * + * @return the PDF string. + */ + public String toPDF() { + int vectorSize=0; + int numberOfFunctions=0; + int tempInt=0; + StringBuffer p = new StringBuffer(); + p.append(this.number + " " +this.generation + + " obj\n<< \n/FunctionType "+this.functionType+" \n"); + + //FunctionType 0 + if(this.functionType == 0) + { + if(this.domain != null) + { + //DOMAIN + p.append("/Domain [ "); + vectorSize = this.domain.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.domain.elementAt(tempInt)) + +" "); + } + + p.append("] \n"); + } + else + { + p.append("/Domain [ 0 1 ] \n"); + } + + //SIZE + if(this.size != null) + { + p.append("/Size [ "); + vectorSize = this.size.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.size.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + //ENCODE + if(this.encode != null) + { + p.append("/Encode [ "); + vectorSize = this.encode.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.encode.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + else + { + p.append("/Encode [ "); + vectorSize = this.functions.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append("0 1 "); + } + p.append("] \n"); + + } + + //BITSPERSAMPLE + p.append("/BitsPerSample "+this.bitsPerSample); + + //ORDER (optional) + if(this.order ==1 || this.order == 3) + { + p.append(" \n/Order "+this.order+" \n"); + } + + //RANGE + if(this.range != null) + { + p.append("/Range [ "); + vectorSize = this.range.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.range.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + //DECODE + if(this.decode != null) + { + p.append("/Decode [ "); + vectorSize = this.decode.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.decode.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + //LENGTH + if(this.functionDataStream != null) + { + p.append("/Length "+(this.functionDataStream.length()+1) + + " \n"); + } + + //FILTER? + if (this.filter != null) + {//if there's a filter + vectorSize= this.filter.size(); + p.append("/Filter "); + if (vectorSize == 1) + { + p.append("/"+((String)this.filter.elementAt(0))+" \n"); + } + else + { + p.append("[ "); + for(tempInt=0; tempInt > \n"); + + //stream representing the function + if(this.functionDataStream != null) + { + p.append("stream\n"+this.functionDataStream +"\nendstream\n"); + } + + p.append("endobj\n"); + + }//end of if FunctionType 0 + else if(this.functionType == 2) + { + //DOMAIN + if(this.domain != null) + { + p.append("/Domain [ "); + vectorSize = this.domain.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.domain.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + else + { + p.append("/Domain [ 0 1 ] \n"); + } + + + //RANGE + if(this.range != null) + { + p.append("/Range [ "); + vectorSize = this.range.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.range.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + //FunctionType, C0, C1, N are required in PDF + + //C0 + if(this.cZero != null) + { + p.append("/C0 [ "); + vectorSize = this.cZero.size(); + for(tempInt = 0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.cZero.elementAt(tempInt))+" "); + } + p.append("] \n"); + } + + //C1 + if(this.cOne != null) + { + p.append("/C1 [ "); + vectorSize = this.cOne.size(); + for(tempInt = 0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.cOne.elementAt(tempInt))+" "); + } + p.append("] \n"); + } + + //N: The interpolation Exponent + p.append("/N " + +pdfNumber.doubleOut( + new Double(this.interpolationExponentN)) + +" \n"); + + p.append(">> \nendobj\n"); + + } + else if(this.functionType == 3) + {//fix this up when my eyes uncross + //DOMAIN + if(this.domain != null) + { + p.append("/Domain [ "); + vectorSize = this.domain.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.domain.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + else + { + p.append("/Domain [ 0 1 ] \n"); + } + + //RANGE + if(this.range != null) + { + p.append("/Range [ "); + vectorSize = this.range.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.range.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + //FUNCTIONS + if(this.functions != null) + { + p.append("/Functions [ "); + numberOfFunctions = this.functions.size(); + for(tempInt =0;tempInt < numberOfFunctions; tempInt++) + { + p.append( ((PDFFunction)this.functions.elementAt(tempInt)).referencePDF()+" "); + + } + p.append("] \n"); + } + + + //ENCODE + if(this.encode != null) + { + p.append("/Encode [ "); + vectorSize = this.encode.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.encode.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + else + { + p.append("/Encode [ "); + vectorSize = this.functions.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append("0 1 "); + } + p.append("] \n"); + + } + + + //BOUNDS, required, but can be empty + p.append("/Bounds [ "); + if(this.bounds != null) + { + + vectorSize= this.bounds.size(); + for(tempInt = 0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.bounds.elementAt(tempInt))+" "); + } + + } + else + { + if(this.functions != null) + { + //if there are n functions, + // there must be n-1 bounds. + // so let each function handle an equal portion + // of the whole. e.g. if there are 4, then [ 0.25 0.25 0.25 ] + + String functionsFraction = + pdfNumber.doubleOut(new Double( + 1.0 / ((double)numberOfFunctions))); + + for(tempInt =0;tempInt+1 < numberOfFunctions; tempInt++) + { + + p.append( functionsFraction + " "); + } + functionsFraction = null; //clean reference. + + } + + } + p.append("] \n"); + + + p.append(">> \nendobj\n"); + } + else if(this.functionType == 4) + {//fix this up when my eyes uncross + //DOMAIN + if(this.domain != null) + { + p.append("/Domain [ "); + vectorSize = this.domain.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.domain.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + else + { + p.append("/Domain [ 0 1 ] \n"); + } + + //RANGE + if(this.range != null) + { + p.append("/Range [ "); + vectorSize = this.range.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.range.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + //LENGTH + if(this.functionDataStream != null) + { + p.append("/Length "+(this.functionDataStream.length()+1) + + " \n"); + } + + p.append(">> \n"); + + //stream representing the function + if(this.functionDataStream != null) + { + p.append("stream\n{ "+this.functionDataStream +" } \nendstream\n"); + } + + p.append("endobj\n"); + + } + + return (p.toString()); + + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoTo.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoTo.java new file mode 100644 index 000000000..0a8c1aae3 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoTo.java @@ -0,0 +1,138 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +/** + * class representing a /GoTo object. + * + */ +public class PDFGoTo extends PDFObject { + + /** the pageReference */ + protected String pageReference; + protected float + xPosition=0, + yPosition=0; + + /** + * create a /GoTo object. + * + * @param number the object's number + * @param pageReference the pageReference represented by this object + */ + public PDFGoTo(int number, String pageReference) { + + /* generic creation of object */ + super(number); + + this.pageReference = pageReference; + } + + + /** + * Sets page reference after object has been created + * + * @param pageReference + * the new page reference to use + */ + public void setPageReference(String pageReference) + { + this.pageReference = pageReference; + } + + + + /** + * Sets the Y position to jump to + * + * @param yPosition y position + */ + public void setYPosition(int yPosition) + { + this.yPosition = (yPosition/1000f); + } + + + + /** + * Sets the x Position to jump to + * + * @param xPosition x position + */ + public void setXPosition(int xPosition) + { + this.xPosition = (xPosition/1000f); + } + + + /** + * represent the object in PDF + * + * @return the PDF string + */ + public String toPDF() { + String p = new String(this.number + " " + this.generation + + " obj\n<<\n/S /GoTo\n" + + "/D [" + this.pageReference + " /XYZ "+xPosition+" "+yPosition+" null]\n" + + ">>\nendobj\n"); + return p; + } + + /* example + 29 0 obj + << + /S /GoTo + /D [23 0 R /FitH 600] + >> + endobj + */ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoToRemote.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoToRemote.java new file mode 100644 index 000000000..917aa4380 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFGoToRemote.java @@ -0,0 +1,111 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +/** + * class representing a /GoToR object. + */ +public class PDFGoToRemote extends PDFAction { + + /** the file specification */ + protected PDFFileSpec pdfFileSpec; + + /** + * create an GoToR object. + * + * @param number the object's number + * @param fileSpec the fileSpec associated with the action + */ + public PDFGoToRemote(int number, PDFFileSpec pdfFileSpec) { + + /* generic creation of object */ + super(number); + + this.pdfFileSpec = pdfFileSpec; + } + + /** + * return the action string which will reference this object + * + * @return the action String + */ + public String getAction() + { + return this.referencePDF(); + } + + /** + * represent the object in PDF + * + * @return the PDF string + */ + public String toPDF() { + String p = new String(this.number + " " + this.generation + + " obj\n" + + "<<\n/S /GoToR\n" + + "/F " + pdfFileSpec.referencePDF() + "\n" + + "/D [ 0 /XYZ null null null ]" + + " \n>>\nendobj\n"); + return p; + } + + + /* example + 28 0 obj + << + /S /GoToR + /F 29 0 R + /D [ 0 /XYZ -6 797 null ] + >> + endobj + */ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInfo.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInfo.java new file mode 100644 index 000000000..89f8b3ec7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInfo.java @@ -0,0 +1,94 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.io.IOException; +import java.io.PrintWriter; + +/** + * class representing an /Info object + */ +public class PDFInfo extends PDFObject { + + /** the application producing the PDF */ + protected String producer; + + /** + * create an Info object + * + * @param number the object's number + */ + public PDFInfo(int number) { + super(number); + } + + /** + * set the producer string + * + * @param producer the producer string + */ + public void setProducer(String producer) { + this.producer = producer; + } + + /** + * produce the PDF representation of the object + * + * @return the PDF + */ + public String toPDF() { + String p = this.number + " " + this.generation + + " obj\n<< /Type /Info\n/Producer (" + this.producer + + ") >>\nendobj\n"; + return p; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInternalLink.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInternalLink.java new file mode 100644 index 000000000..f4405464c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFInternalLink.java @@ -0,0 +1,91 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +/** + * class used to create a PDF internal link + */ +public class PDFInternalLink extends PDFAction { + + + String goToReference; + + /** + * create an internal link instance. + * + * @param goToReference the GoTo Reference to which the link should point + */ + public PDFInternalLink(String goToReference) { + + this.goToReference=goToReference; + } + + /** + * returns the action ncecessary for an internal link + * + * @return the action to place next to /A within a Link + */ + public String getAction() + { + return goToReference; + } + + /** + * there is nothing to return for the toPDF method, as it should not be called + * + * @return an empty string + */ + public String toPDF() { + return ""; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFLink.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFLink.java new file mode 100644 index 000000000..2fc56e675 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFLink.java @@ -0,0 +1,122 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +// Java +import java.awt.Rectangle; + +/** + * class representing an /Annot object of /Subtype /Link + */ +public class PDFLink extends PDFObject { + + float ulx; + float uly; + float brx; + float bry; + String color; + PDFAction action; + + /** + * create objects associated with a link annotation (GoToR) + * + * @param number the object's number + * @param producer the application producing the PDF + */ + public PDFLink(int number, Rectangle r) { + /* generic creation of PDF object */ + super(number); + + this.ulx = r.x; + this.uly = r.y; + this.brx = r.x + r.width; + this.bry = r.y - r.height; + this.color = "0 0 0"; // just for now + + } + + public void setAction(PDFAction action) { + this.action = action; + } + + /** + * produce the PDF representation of the object + * + * @return the PDF + */ + public String toPDF() { + String p = this.number + " " + this.generation + " obj\n" + + "<< /Type /Annot\n" + + "/Subtype /Link\n" + + "/Rect [ " + (ulx/1000f) + " " + (uly/1000f) + " " + + (brx/1000f) + " " + (bry/1000f) + " ]\n" + + "/C [ " + this.color + " ]\n" + + "/Border [ 0 0 0 ]\n" + + "/A " + this.action.getAction() + "\n" + + "/H /I\n>>\nendobj\n"; + return p; + } + + /* example + 19 0 obj + << + /Type /Annot + /Subtype /Link + /Rect [ 176.032 678.48412 228.73579 692.356 ] + /C [ 0.86491 0.03421 0.02591 ] + /Border [ 0 0 1 ] + /A 28 0 R + /H /I + >> + endobj + */ +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFNumber.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFNumber.java new file mode 100644 index 000000000..c1774a5cb --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFNumber.java @@ -0,0 +1,141 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +public class PDFNumber { + + + public PDFNumber() + { + + //How can I allow people to use the method, without allowing construction? + + } + + public String doubleOut(Double doubleDown) + { + StringBuffer p = new StringBuffer(); + if(doubleDown.doubleValue() < 0) { + doubleDown = new Double(-doubleDown.doubleValue()); + p.append("-"); + } + double trouble = doubleDown.doubleValue() % 1; + if(trouble > 0.950) + { + p.append(doubleDown.intValue()+1); + } + else if (trouble < 0.050) + { + p.append(doubleDown.intValue()); + } + else + { + String doubleString = new String(doubleDown+""); + int decimal = doubleString.indexOf("."); + if(decimal != -1) { + p.append(doubleString.substring(0, decimal)); + + if ((doubleString.length() - decimal) > 6) + { + p.append(doubleString.substring(decimal,decimal+6)); + } + else + { + p.append(doubleString.substring(decimal)); + } + } else { + p.append(doubleString); + } + } + return(p.toString()); + } + + public String doubleOut(double doubleDown) + { + + StringBuffer p = new StringBuffer(); + if(doubleDown < 0) { + doubleDown = -doubleDown; + p.append("-"); + } + double trouble = doubleDown % 1; + + if(trouble > 0.950) + { + p.append((int)doubleDown+1); + } + else if (trouble < 0.050) + { + p.append((int)doubleDown); + } + else + { + String doubleString = new String(doubleDown+""); + int decimal = doubleString.indexOf("."); + if(decimal != -1) { + p.append(doubleString.substring(0, decimal)); + + if ((doubleString.length() - decimal) > 6) + { + p.append(doubleString.substring(decimal,decimal+6)); + } + else + { + p.append(doubleString.substring(decimal)); + } + } else { + p.append(doubleString); + } + } + return(p.toString()); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFObject.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFObject.java new file mode 100644 index 000000000..3bf9ab6e7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFObject.java @@ -0,0 +1,117 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.io.IOException; +import java.io.PrintWriter; + +/** + * generic PDF object. + * + * A PDF Document is essentially a collection of these objects. A PDF + * Object has a number and a generation (although the generation will always + * be 0 in new documents). + */ +public abstract class PDFObject { + + /** the object's number */ + protected int number; + + /** the object's generation (0 in new documents) */ + protected int generation = 0; + + /** + * create an empty object + * + * @param number the object's number + */ + public PDFObject(int number) { + this.number = number; + } + public PDFObject() { + //do nothing + } + /** + * @return the PDF Object number + */ + public int getNumber() { + return this.number; + } + /** + * write the PDF represention of this object + * + * @param writer the PrintWriter to write the PDF to + * @return the number of characters written + */ + protected int output(PrintWriter writer) throws IOException { + String pdf = this.toPDF(); + writer.write(pdf); + return pdf.length(); + } + + /** + * the PDF representation of a reference to this object + * + * @return the reference string + */ + public String referencePDF() { + String p = this.number + " " + this.generation + " R"; + return p; + } + + /** + * represent object as PDF + * + * @return PDF string + */ + abstract String toPDF(); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPage.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPage.java new file mode 100644 index 000000000..c3cfc6326 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPage.java @@ -0,0 +1,160 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +/** + * class representing a /Page object. + * + * There is one of these for every page in a PDF document. The object + * specifies the dimensions of the page and references a /Resources + * object, a contents stream and the page's parent in the page + * hierarchy. + */ +public class PDFPage extends PDFObject { + + /** the page's parent, a /Pages object */ + protected PDFPages parent; + + /** the page's /Resource object */ + protected PDFResources resources; + + /** the contents stream */ + protected PDFStream contents; + + /** the width of the page in points */ + protected int pagewidth; + + /** the height of the page in points */ + protected int pageheight; + + /** the list of annotation objects for this page */ + protected PDFAnnotList annotList; + + /** + * create a /Page object + * + * @param number the object's number + * @param resources the /Resources object + * @param contents the content stream + * @param pagewidth the page's width in points + * @param pageheight the page's height in points + */ + public PDFPage(int number, PDFResources resources, + PDFStream contents, int pagewidth, + int pageheight) { + + /* generic creation of object */ + super(number); + + /* set fields using parameters */ + this.resources = resources; + this.contents = contents; + this.pagewidth = pagewidth; + this.pageheight = pageheight; + + this.annotList = null; + } + + /** + * set this page's parent + * + * @param parent the /Pages object that is this page's parent + */ + public void setParent(PDFPages parent) { + this.parent = parent; + } + + /** + * set this page's annotation list + * + * @param annotList a PDFAnnotList list of annotations + */ + public void setAnnotList(PDFAnnotList annotList) { + this.annotList = annotList; + } + + /** + * get this page's annotation list + * + * @return annotList a PDFAnnotList list of annotations + */ + public PDFAnnotList getAnnotList() { + return this.annotList; + } + + public void addShading(PDFShading shading) { + this.resources.addShading(shading); + } + /** + * represent this object as PDF + * + * @return the PDF string + */ + public String toPDF() { + StringBuffer sb = new StringBuffer(); + + sb = sb.append(this.number + " " + this.generation + " obj\n" + + "<< /Type /Page\n" + + "/Parent " + this.parent.referencePDF() + "\n" + + "/MediaBox [ 0 0 " + this.pagewidth + " " + + this.pageheight + " ]\n" + + "/Resources " + this.resources.referencePDF() + "\n" + + "/Contents " + this.contents.referencePDF() + "\n"); + if (this.annotList != null) { + sb = sb.append("/Annots " + + this.annotList.referencePDF() + "\n"); + } + + sb = sb.append(">>\nendobj\n"); + + return sb.toString(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPages.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPages.java new file mode 100644 index 000000000..b707660dc --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPages.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.io.PrintWriter; +import org.apache.fop.messaging.MessageHandler; +import java.util.Vector; + +/** + * class representing a /Pages object. + * + * A /Pages object is an ordered collection of pages (/Page objects) + * (Actually, /Pages can contain further /Pages as well but this + * implementation doesn't allow this) + */ +public class PDFPages extends PDFObject { + + /** the /Page objects */ + protected Vector kids = new Vector(); + + /** the number of /Page objects */ + protected int count = 0; + + // private PDFPages parent; + + /** + * create a /Pages object. + * + * @param number the object's number + */ + public PDFPages(int number) { + + /* generic creation of object */ + super(number); + } + + /** + * add a /Page object. + * + * @param page the PDFPage to add. + */ + public void addPage(PDFPage page) { + this.kids.addElement(page); + page.setParent(this); + this.incrementCount(); + } + + /** + * get the count of /Page objects + * + * @return the number of pages + */ + public int getCount() { + return this.count; + } + + /** + * increment the count of /Page objects + */ + public void incrementCount() { + this.count++; + // MessageHandler.logln("Incrementing count to " + this.getCount()); + } + + /** + * represent the object in PDF + * + * @return the PDF string + */ + public String toPDF() { + StringBuffer p = new StringBuffer(this.number + " " + + this.generation + + " obj\n<< /Type /Pages\n/Count " + + this.getCount() + "\n/Kids ["); + for (int i = 0; i < kids.size(); i++) { + p = p.append(((PDFObject)kids.elementAt(i)).referencePDF() + " "); + } + p = p.append("] >>\nendobj\n"); + return p.toString(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPathPaint.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPathPaint.java new file mode 100644 index 000000000..fd9c3eed8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPathPaint.java @@ -0,0 +1,86 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +import org.apache.fop.datatypes.ColorSpace; + +public abstract class PDFPathPaint extends PDFObject +{ + + //protected int colorspace = 0; //default is 0:RGB, not 1:CMYK + protected ColorSpace colorSpace; + + public PDFPathPaint(int theNumber) { + super(theNumber); + + } + + public PDFPathPaint(){ + //do nothing + } + + public String getColorSpaceOut(boolean fillNotStroke) + { + return(""); + } + + public void setColorSpace(int theColorSpace) + { + this.colorSpace.setColorSpace(theColorSpace); + } + + public int getColorSpace() + { + return(this.colorSpace.getColorSpace()); + } + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPattern.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPattern.java new file mode 100644 index 000000000..ecfa39f98 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFPattern.java @@ -0,0 +1,360 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +//Java... +import java.util.Vector; + +//FOP... +import org.apache.fop.datatypes.ColorSpace; + +/** + * class representing a PDF Function. + * + * PDF Functions represent parameterized mathematical formulas and sampled representations with + * arbitrary resolution. Functions are used in two areas: device-dependent + * rasterization information for halftoning and transfer + * functions, and color specification for smooth shading (a PDF 1.3 feature). + * + * All PDF Functions have a FunctionType (0,2,3, or 4), a Domain, and a Range. + */ +public class PDFPattern extends PDFPathPaint { + private PDFNumber pdfNumber = new PDFNumber(); + + /** + * The resources associated with this pattern + */ + //Guts common to all function types + + protected PDFResources resources = null; + + /** + * Either one (1) for tiling, or two (2) for shading. + */ + protected int patternType = 2; //Default + + /** + * The name of the pattern such as "Pa1" or "Pattern1" + */ + protected String patternName = null; + + /** + * 1 for colored pattern, 2 for uncolored + */ + protected int paintType = 2; + + /** + * 1 for constant spacing, 2 for no distortion, and 3 for fast rendering + */ + protected int tilingType = 1; + + /** + * Vector of Doubles representing the Bounding box rectangle + */ + protected Vector bBox = null; + + /** + * Horizontal spacing + */ + protected double xStep = -1; + + /** + * Vertical spacing + */ + protected double yStep = -1; + + /** + * The Shading object comprising the Type 2 pattern + */ + protected PDFShading shading=null; + + /** + * Vector of Integers represetning the Extended unique Identifier + */ + protected Vector xUID=null; + + /** + * String representing the extended Graphics state. + * Probably will never be used like this. + */ + protected StringBuffer extGState = null; //eventually, need a PDFExtGSState object... but not now. + + /** + * Vector of Doubles representing the Transformation matrix. + */ + protected Vector matrix=null; + + /** + * The stream of a pattern + */ + protected StringBuffer patternDataStream = null; + + + /** + * Create a tiling pattern (type 1). + * + * @param theNumber The object number of this PDF Object + * @param thePatternName The name of the pattern such as "Pa1" or "Pattern1" + * @param theResources the resources associated with this pattern + * @param thePatternType the type of pattern, which is 1 for tiling. + * @param thePaintType 1 or 2, colored or uncolored. + * @param theTilingType 1, 2, or 3, constant spacing, no distortion, or faster tiling + * @param theBBox Vector of Doubles: The pattern cell bounding box + * @param theXStep horizontal spacing + * @param theYStep vertical spacing + * @param theMatrix Optional Vector of Doubles transformation matrix + * @param theXUID Optional vector of Integers that uniquely identify the pattern + * @param thePatternDataStream The stream of pattern data to be tiled. + */ + public PDFPattern(int theNumber, String thePatternName, + PDFResources theResources, int thePatternType, //1 + int thePaintType, int theTilingType, + Vector theBBox, double theXStep, double theYStep, + Vector theMatrix, Vector theXUID, StringBuffer thePatternDataStream) + { + super(theNumber); + this.patternName = thePatternName; + + this.resources = theResources; + //This next parameter is implicit to all constructors, and is + //not directly passed. + + this.patternType = 1; //thePatternType; + this.paintType = thePaintType; + this.tilingType = theTilingType; + this.bBox = theBBox; + this.xStep = theXStep; + this.yStep = theYStep; + this.matrix = theMatrix; + this.xUID = theXUID; + this.patternDataStream = thePatternDataStream; + } + + /** + * Create a type 2 pattern (smooth shading) + * + * @param theNumber the object number of this PDF object + * @param thePatternName the name of the pattern + * @param thePatternType the type of the pattern, which is 2, smooth shading + * @param theShading the PDF Shading object that comprises this pattern + * @param theXUID optional:the extended unique Identifier if used. + * @param theExtGState optional: the extended graphics state, if used. + * @param theMatrix Optional:Vector of Doubles that specify the matrix. + */ + public PDFPattern(int theNumber, String thePatternName, + int thePatternType, PDFShading theShading, Vector theXUID, + StringBuffer theExtGState,Vector theMatrix) + { + super(theNumber); + + this.patternName = thePatternName; + + this.patternType = 2; //thePatternType; + this.shading = theShading; + this.xUID = theXUID; + //this isn't really implemented, so it should always be null. + //I just don't want to have to add a new parameter once it is implemented. + this.extGState = theExtGState; // always null + this.matrix = theMatrix; + } + + /** + * Get the name of the pattern + * + * @return String representing the name of the pattern. + */ + public String getName() + { + return (this.patternName); + } + + public String getColorSpaceOut(boolean fillNotStroke) + { + if(fillNotStroke) + { //fill but no stroke + return("/Pattern cs /"+this.getName()+" scn \n"); + } + else + { //stroke (or border) + return("/Pattern CS /"+this.getName()+" SCN \n"); + } + } + + + /** + * represent as PDF. Whatever the FunctionType is, the correct + * representation spits out. The sets of required and optional + * attributes are different for each type, but if a required + * attribute's object was constructed as null, then no error + * is raised. Instead, the malformed PDF that was requested + * by the construction is dutifully output. + * This policy should be reviewed. + * + * @return the PDF string. + */ + public String toPDF() { + + + int vectorSize=0; + int tempInt=0; + StringBuffer p = new StringBuffer(); + p.append(this.number + " " +this.generation + + " obj\n<< \n/Type /Pattern \n"); + + if(this.resources != null) + { + p.append("/Resources "+this.resources.referencePDF()+" \n"); + } + + p.append("/PatternType "+this.patternType+" \n"); + + if(this.patternType == 1) + { + p.append("/PaintType "+this.paintType+" \n"); + p.append("/TilingType "+this.tilingType+" \n"); + + if(this.bBox != null) + { + vectorSize = this.bBox.size(); + p.append("/BBox [ "); + for (tempInt =0; tempInt < vectorSize; tempInt++) + { + p.append( + pdfNumber.doubleOut((Double)this.bBox.elementAt(tempInt))); + } + p.append("] \n"); + } + p.append("/XStep "+pdfNumber.doubleOut(new Double(this.xStep))+" \n"); + p.append("/YStep "+pdfNumber.doubleOut(new Double(this.yStep))+" \n"); + + if(this.matrix != null) + { + vectorSize = this.matrix.size(); + p.append("/Matrix [ "); + for (tempInt =0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.matrix.elementAt(tempInt))); + } + p.append("] \n"); + } + + if(this.xUID != null) + { + vectorSize = this.xUID.size(); + p.append("/XUID [ "); + for (tempInt =0; tempInt < vectorSize; tempInt++) + { + p.append(((Integer)this.xUID.elementAt(tempInt))+" "); + } + p.append("] \n"); + } + //don't forget the length of the stream. + if(this.patternDataStream != null) + { + p.append("/Length "+(this.patternDataStream.length()+1) + + " \n"); + } + + } + else //if (this.patternType ==2) + {//Smooth Shading... + if(this.shading != null) + { + p.append("/Shading "+this.shading.referencePDF()+" \n"); + } + + if(this.xUID != null) + { + vectorSize = this.xUID.size(); + p.append("/XUID [ "); + for (tempInt =0; tempInt < vectorSize; tempInt++) + { + p.append(((Integer)this.xUID.elementAt(tempInt))+" "); + } + p.append("] \n"); + } + + if(this.extGState != null) + {//will probably have to change this if it's used. + p.append("/ExtGState "+this.extGState+" \n"); + } + + if(this.matrix != null) + { + vectorSize = this.matrix.size(); + p.append("/Matrix [ "); + for (tempInt =0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.matrix.elementAt(tempInt))); + } + p.append("] \n"); + } + }//end of if patterntype =1...else 2. + + p.append(">> \n"); + + //stream representing the function + if(this.patternDataStream != null) + { + p.append("stream\n"+this.patternDataStream +"\nendstream\n"); + } + + p.append("endobj\n"); + + + + return (p.toString()); + + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFResources.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFResources.java new file mode 100644 index 000000000..30ee840dd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFResources.java @@ -0,0 +1,192 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.io.PrintWriter; +import java.util.Enumeration; +import java.util.Vector; +import java.util.Hashtable; + +/** + * class representing a /Resources object. + * + * /Resources object contain a list of references to the fonts for the + * document + */ +public class PDFResources extends PDFObject { + + /** /Font objects keyed by their internal name */ + protected Hashtable fonts = new Hashtable(); + + protected Vector xObjects=null; + protected Vector patterns= new Vector(); + protected Vector shadings=new Vector(); + /** + * create a /Resources object. + * + * @param number the object's number + */ + public PDFResources(int number) { + + /* generic creation of object */ + super(number); + + } + + /** + * add font object to resources list. + * + * @param font the PDFFont to add + */ + public void addFont(PDFFont font) { + this.fonts.put(font.getName(),font); + } + + public void addShading(PDFShading theShading){ + this.shadings.addElement(theShading); + } + + public void addPattern(PDFPattern thePattern){ + this.patterns.addElement(thePattern); + } + public void setXObjects(Vector xObjects) { + this.xObjects = xObjects; + } + + /** + * represent the object in PDF + * + * @return the PDF + */ + public String toPDF() { + StringBuffer p = new StringBuffer(this.number + " " + + this.generation + + " obj\n<< \n"); + if(!this.fonts.isEmpty()) + { + p.append("/Font << "); + + /* construct PDF dictionary of font object references */ + Enumeration fontEnumeration = this.fonts.keys(); + while (fontEnumeration.hasMoreElements()) { + String fontName = (String) fontEnumeration.nextElement(); + p.append("/" + fontName + " " + + ((PDFFont) this.fonts.get(fontName)).referencePDF() + + " "); + } + + p.append(">> \n"); + } + + PDFShading currentShading = null; + if(!this.shadings.isEmpty()) + { + p.append("/Shading << "); + + for(int currentShadingNumber=0; + currentShadingNumber < this.shadings.size(); + currentShadingNumber++) + { + currentShading = ((PDFShading)this.shadings.elementAt(currentShadingNumber)); + + p.append("/" + currentShading.getName() + " " + + currentShading.referencePDF() + + " "); // \n ?????? + } + + p.append(">> \n"); + } + //"free" the memory. Sorta. + currentShading = null; + + PDFPattern currentPattern=null; + if(!this.patterns.isEmpty()) + { + p.append("/Pattern << "); + + for(int currentPatternNumber=0; + currentPatternNumber < this.patterns.size(); + currentPatternNumber++) + { + currentPattern = ((PDFPattern)this.patterns.elementAt(currentPatternNumber)); + + p.append("/" + currentPattern.getName() + " " + + currentPattern.referencePDF() + + " "); + } + + p.append(">> \n"); + } + //"free" the memory. Sorta. + currentPattern = null; + + p.append("/ProcSet [ /PDF /ImageC /Text ] "); + + if (!this.xObjects.isEmpty()) + { + p = p.append("/XObject <<"); + for (int i = 1; i <= this.xObjects.size(); i++) { + p = p.append("/Im" + i + " " + + ((PDFXObject) + this.xObjects.elementAt(i - + 1)).referencePDF() + + + " \n"); + } + p = p.append(" >>\n"); + } + + p = p.append(">> \nendobj\n"); + + return p.toString(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFRoot.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFRoot.java new file mode 100644 index 000000000..a1f309a31 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFRoot.java @@ -0,0 +1,103 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +// Java +import java.io.IOException; +import java.io.PrintWriter; + +/** + * class representing a Root (/Catalog) object + */ +public class PDFRoot extends PDFObject { + + /** the /Pages object that is root of the Pages hierarchy */ + protected PDFPages rootPages; + + /** + * create a Root (/Catalog) object + * + * @param number the object's number + */ + public PDFRoot(int number) { + super(number); + } + + /** + * add a /Page object to the root /Pages object + * + * @param page the /Page object to add + */ + public void addPage(PDFPage page) { + this.rootPages.addPage(page); + } + + /** + * set the root /Pages object + * + * @param pages the /Pages object to set as root + */ + public void setRootPages(PDFPages pages) { + this.rootPages = pages; + } + + /** + * represent the object as PDF + * + * @return the PDF string + */ + public String toPDF() { + String p = this.number + " " + this.generation + + " obj\n<< /Type /Catalog\n/Pages " + + this.rootPages.referencePDF() + " >>\nendobj\n"; + return p; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFShading.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFShading.java new file mode 100644 index 000000000..948b92798 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFShading.java @@ -0,0 +1,596 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +//Java... +import java.util.Vector; + + +//FOP +import org.apache.fop.datatypes.ColorSpace; + +/** + * class representing a PDF Smooth Shading object. + * + * PDF Functions represent parameterized mathematical formulas and sampled representations with + * arbitrary resolution. Functions are used in two areas: device-dependent + * rasterization information for halftoning and transfer + * functions, and color specification for smooth shading (a PDF 1.3 feature). + * + * All PDF Functions have a shadingType (0,2,3, or 4), a Domain, and a Range. + */ +public class PDFShading extends PDFObject { + //Guts common to all function types + /** The name of the Shading e.g. "Shading1" */ + protected String shadingName = null; + + /** + * Required: The Type of shading (1,2,3,4,5,6,7) + */ + protected int shadingType = 3; //Default + + /** + * A ColorSpace representing the colorspace. "DeviceRGB" is an example. + */ + //protected StringBuffer colorSpace = null; + protected ColorSpace colorSpace=null; + /** + * The background color. Since shading is opaque, + * this is very rarely used. + */ + protected Vector background = null; + /** + * Optional: A Vector specifying the clipping rectangle + */ + protected Vector bBox = null; + + /** + * Optional: A flag whether or not to filter the shading function + * to prevent aliasing artifacts. Default is false. + */ + protected boolean antiAlias = false; + + /** + * Optional for Type 1: Array of four numbers, xmin, xmax, ymin, ymax. Default is [0 1 0 1] + * Optional for Type 2: An array of two numbers between which the blend varies between start and end points. Default is 0, 1. + * Optional for Type 3: An array of two numbers between which the blend varies between start and end points. Default is 0, 1. + */ + + protected Vector domain = null; + + /** Optional for Type 1: A transformation matrix */ + protected Vector matrix = null; + + /** + * Required for Type 1, 2, and 3: + * The object of the color mapping function (usually type 2 or 3). + * Optional for Type 4,5,6, and 7: When it's nearly the same thing. + */ + protected PDFFunction function = null; + + /** Required for Type 2: An Array of four numbers specifying the starting and ending coordinate pairs + * Required for Type 3: An Array of six numbers [x0,y0,r0,x1,y1,r1] specifying the centers and radii of + * the starting and ending circles. + */ + protected Vector coords = null; + + /** + * Required for Type 2+3: An Array of two boolean values specifying whether to extend the + * start and end colors past the start and end points, + * respectively. Default is false, false. + */ + protected Vector extend = null; + + /** + * Required for Type 4,5,6, and 7: Specifies the number of bits used to represent each vertex coordinate. + * Allowed to be 1,2,4,8,12,16,24, or 32. + */ + protected int bitsPerCoordinate = 0; + + /** + * Required for Type 4,5,6, and 7: Specifies the number of bits used to represent the edge flag for each vertex. + * Allowed to be 2,4,or 8, while the Edge flag itself is allowed to be 0,1 or 2. + */ + protected int bitsPerFlag = 0; + + /** + * Required for Type 4,5,6, and 7: Array of Doubles which specifies how to decode coordinate and color component values. + * Each type has a differing number of decode array members, so check the spec. + * Page 303 in PDF Spec 1.3 + */ + protected Vector decode = null; + + /** + * Required for Type 4,5,6, and 7: Specifies the number of bits used to represent each color coordinate. + * Allowed to be 1,2,4,8,12, or 16 + */ + protected int bitsPerComponent = 0; + + /** + * Required for Type 5:The number of vertices in each "row" of the lattice; it must be greater than or equal to 2. + */ + protected int verticesPerRow = 0; + + private PDFNumber pdfNumber = new PDFNumber(); + + /** + * Constructor for type function based shading + * + * @param theNumber The object number of this PDF object + * @param theShadingName The name of the shading pattern. Can be anything + * without spaces. "Shading1" or "Sh1" are good examples. + * @param theShadingType The type of shading object, which should be 1 for function + * based shading. + * @param theColorSpace The colorspace is 'DeviceRGB' or something similar. + * @param theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Whether or not to anti-alias. + * @param theDomain Optional vector of Doubles specifying the domain. + * @param theMatrix Vector of Doubles specifying the matrix. + * If it's a pattern, then the matrix maps it to pattern space. + * If it's a shading, then it maps it to current user space. + * It's optional, the default is the identity matrix + * @param theFunction The PDF Function that maps an (x,y) location to a color + */ + public PDFShading(int theNumber, String theShadingName, int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + Vector theDomain, Vector theMatrix, PDFFunction theFunction) + { + super(theNumber); + this.shadingName = theShadingName; + this.shadingType = theShadingType; //1 + this.colorSpace=theColorSpace; + this.background= theBackground; + this.bBox = theBBox; + this.antiAlias = theAntiAlias; + + this.domain = theDomain; + this.matrix = theMatrix; + this.function = theFunction; + + } + + /** + * Constructor for Type 2 and 3 + * + * @param theNumber The object number of this PDF object. + * @param theShadingName The name of the shading pattern. Can be anything + * without spaces. "Shading1" or "Sh1" are good examples. + * @param theShadingType 2 or 3 for axial or radial shading + * @param theColorSpace "DeviceRGB" or similar. + * @param theBackground theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Default is false + * @param theCoords Vector of four (type 2) or 6 (type 3) Double + * @param theDomain Vector of Doubles specifying the domain + * @param theFunction the Stitching (PDFfunction type 3) function, even if it's stitching a single function + * @param theExtend Vector of Booleans of whether to extend teh start and end colors past the start and end points + * The default is [false, false] + */ + public PDFShading(int theNumber, String theShadingName, + int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + Vector theCoords, Vector theDomain, PDFFunction theFunction, + Vector theExtend) + { + super(theNumber); + this.shadingName = theShadingName; + this.shadingType=theShadingType; //2 or 3 + this.colorSpace=theColorSpace; + this.background= theBackground; + this.bBox = theBBox; + this.antiAlias = theAntiAlias; + + this.coords = theCoords; + this.domain = theDomain; + this.function = theFunction; + this.extend=theExtend; + + } + + /** + * Constructor for Type 4,6, or 7 + * + * @param theNumber The object number of this PDF object. + * @param theShadingType 4, 6, or 7 depending on whether it's + * Free-form gouraud-shaded triangle meshes, coons patch meshes, + * or tensor product patch meshes, respectively. + * @param theShadingName The name of the shading pattern. Can be anything + * without spaces. "Shading1" or "Sh1" are good examples. + * @param theColorSpace "DeviceRGB" or similar. + * @param theBackground theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Default is false + * @param theBitsPerCoordinate 1,2,4,8,12,16,24 or 32. + * @param theBitsPerComponent 1,2,4,8,12, and 16 + * @param theBitsPerFlag 2,4,8. + * @param theDecode Vector of Doubles see PDF 1.3 spec pages 303 to 312. + * @param theFunction the PDFFunction + */ + public PDFShading(int theNumber, String theShadingName, int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + int theBitsPerCoordinate, int theBitsPerComponent, + int theBitsPerFlag, Vector theDecode, PDFFunction theFunction) + { + super(theNumber); + + this.shadingType = theShadingType;//4,6 or 7 + this.colorSpace = theColorSpace; + this.background= theBackground; + this.bBox = theBBox; + this.antiAlias = theAntiAlias; + + this.bitsPerCoordinate = theBitsPerCoordinate; + this.bitsPerComponent = theBitsPerComponent; + this.bitsPerFlag = theBitsPerFlag; + this.decode = theDecode; + this.function =theFunction; + } + + /** + * Constructor for type 5 + * + * @param theShadingType 5 for lattice-Form Gouraud shaded-triangle mesh + * @param theShadingName The name of the shading pattern. Can be anything + * without spaces. "Shading1" or "Sh1" are good examples. + * @param theColorSpace "DeviceRGB" or similar. + * @param theBackground theBackground An array of color components appropriate to the + * colorspace key specifying a single color value. + * This key is used by the f operator buy ignored by the sh operator. + * @param theBBox Vector of double's representing a rectangle + * in the coordinate space that is current at the + * time of shading is imaged. Temporary clipping + * boundary. + * @param theAntiAlias Default is false + * @param theBitsPerCoordinate 1,2,4,8,12,16, 24, or 32 + * @param theBitsPerComponent 1,2,4,8,12,24,32 + * @param theDecode Vector of Doubles. See page 305 in PDF 1.3 spec. + * @param theVerticesPerRow number of vertices in each "row" of the lattice. + * @param theFunction The PDFFunction that's mapped on to this shape + * @param theNumber the object number of this PDF object. + */ + public PDFShading(int theNumber, String theShadingName, int theShadingType, ColorSpace theColorSpace, + Vector theBackground, Vector theBBox, boolean theAntiAlias, + int theBitsPerCoordinate, int theBitsPerComponent, + Vector theDecode, int theVerticesPerRow, PDFFunction theFunction) + { + super(theNumber); + this.shadingName = theShadingName; + this.shadingType = theShadingType;//5 + this.colorSpace=theColorSpace; + this.background= theBackground; + this.bBox = theBBox; + this.antiAlias = theAntiAlias; + + this.bitsPerCoordinate = theBitsPerCoordinate; + this.bitsPerComponent = theBitsPerComponent; + this.decode = theDecode; + this.verticesPerRow = theVerticesPerRow; + this.function = theFunction; + + } + + public String getName() { + return (this.shadingName); + } + + /** + * represent as PDF. Whatever the shadingType is, the correct + * representation spits out. The sets of required and optional + * attributes are different for each type, but if a required + * attribute's object was constructed as null, then no error + * is raised. Instead, the malformed PDF that was requested + * by the construction is dutifully output. + * This policy should be reviewed. + * + * @return the PDF string. + */ + public String toPDF() { + int vectorSize; + int tempInt; + StringBuffer p = new StringBuffer(); + p.append(this.number + " " + this.generation + + " obj\n<< \n/ShadingType "+this.shadingType+" \n"); + if(this.colorSpace != null) + { + p.append("/ColorSpace /" + +this.colorSpace.getColorSpacePDFString()+" \n"); + } + + if(this.background != null) + { + p.append("/Background [ "); + vectorSize = this.background.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.background.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + + if(this.bBox != null) + {//I've never seen an example, so I guess this is right. + p.append("/BBox [ "); + vectorSize = this.bBox.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.bBox.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + + if(this.antiAlias) + { + p.append("/AntiAlias "+this.antiAlias+" \n"); + } + + //Here's where we differentiate based on what type it is. + if(this.shadingType == 1) + {//function based shading + if(this.domain != null) + { + p.append("/Domain [ "); + vectorSize = this.domain.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.domain.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + else + { + p.append("/Domain [ 0 1 ] \n"); + } + + if(this.matrix != null) + { + p.append("/Matrix [ "); + vectorSize = this.matrix.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.matrix.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + + if(this.function != null) + { + p.append("/Function "); + p.append(this.function.referencePDF()+" \n"); + } + } + else if((this.shadingType == 2) + || (this.shadingType == 3)) + {//2 is axial shading (linear gradient) + //3 is radial shading (circular gradient) + if(this.coords != null) + { + p.append("/Coords [ "); + vectorSize = this.coords.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.coords.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + + //DOMAIN + if(this.domain != null) + { + p.append("/Domain [ "); + vectorSize = this.domain.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(pdfNumber.doubleOut( + (Double)this.domain.elementAt(tempInt)) +" "); + } + p.append("] \n"); + } + else + { + p.append("/Domain [ 0 1 ] \n"); + } + + if(this.extend != null) + { + p.append("/Extend [ "); + vectorSize = this.extend.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(((Boolean)this.extend.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + else + { + p.append("/Extend [ true true ] \n"); + } + + + if(this.function != null) + { + p.append("/Function "); + p.append(this.function.referencePDF()+" \n"); + } + + + } + + else if ((this.shadingType == 4) || + (this.shadingType == 6) || + (this.shadingType == 7)) + {//4:Free-form Gouraud-shaded triangle meshes + // 6:coons patch meshes + // 7://tensor product patch meshes (which no one ever uses) + if(this.bitsPerCoordinate > 0) + { + p.append("/BitsPerCoordinate "+this.bitsPerCoordinate+" \n"); + } + else + { + p.append("/BitsPerCoordinate 1 \n"); + } + + if(this.bitsPerComponent > 0) + { + p.append("/BitsPerComponent "+this.bitsPerComponent+" \n"); + } + else + { + p.append("/BitsPerComponent 1 \n"); + } + + if(this.bitsPerFlag > 0) + { + p.append("/BitsPerFlag "+this.bitsPerFlag+" \n"); + } + else + { + p.append("/BitsPerFlag 2 \n"); + } + + if(this.decode != null) + { + p.append("/Decode [ "); + vectorSize = this.decode.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(((Boolean)this.decode.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + if(this.function != null) + { + p.append("/Function "); + p.append(this.function.referencePDF()+" \n"); + } + + } + + else if (this.shadingType == 5) + { //Lattice Free form gouraud-shaded triangle mesh + + if(this.bitsPerCoordinate > 0) + { + p.append("/BitsPerCoordinate "+this.bitsPerCoordinate+" \n"); + } + else + { + p.append("/BitsPerCoordinate 1 \n"); + } + + if(this.bitsPerComponent > 0) + { + p.append("/BitsPerComponent "+this.bitsPerComponent+" \n"); + } + else + { + p.append("/BitsPerComponent 1 \n"); + } + + if(this.decode != null) + { + p.append("/Decode [ "); + vectorSize = this.decode.size(); + for(tempInt=0; tempInt < vectorSize; tempInt++) + { + p.append(((Boolean)this.decode.elementAt(tempInt)) +" "); + } + + p.append("] \n"); + } + + if(this.function != null) + { + p.append("/Function "); + p.append(this.function.referencePDF()+" \n"); + } + + if(this.verticesPerRow > 0) + { + p.append("/VerticesPerRow "+this.verticesPerRow+" \n"); + } + else + { + p.append("/VerticesPerRow 2 \n"); + } + + } + + p.append(">> \nendobj\n"); + + return(p.toString()); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFStream.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFStream.java new file mode 100644 index 000000000..f1e1ca76f --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFStream.java @@ -0,0 +1,127 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.pdf; + +/** + * class representing a PDF stream. + * + * A derivative of the PDF Object, a PDF Stream has not only a dictionary + * but a stream of PDF commands. The stream of commands is where the real + * work is done, the dictionary just provides information like the stream + * length. + */ +public class PDFStream extends PDFObject { + + /** the stream of PDF commands */ + protected StringBuffer data = new StringBuffer(); + + /** + * create an empty stream object + * + * @param number the object's number + */ + public PDFStream(int number) { + super(number); + } + + /** + * append data to the stream + * + * @param s the string of PDF to add + */ + public void add(String s) { + this.data = this.data.append(s); + } + + /** + * append an array of xRGB pixels, ASCII Hex Encoding it first + * + * @param pixels the area of pixels + * @param width the width of the image in pixels + * @param height the height of the image in pixels + */ + public void addImageArray(int[] pixels, int width, int height) { + for (int i = 0; i < height; i++) { + for (int j = 0; j < width; j++) { + int p = pixels[i * width + j]; + int r = (p >> 16) & 0xFF; + int g = (p >> 8) & 0xFF; + int b = (p ) & 0xFF; + if (r < 16) { + this.data = this.data.append(0); + } + this.data = this.data.append(Integer.toHexString(r)); + if (g < 16) { + this.data = this.data.append(0); + } + this.data = this.data.append(Integer.toHexString(g)); + if (b < 16) { + this.data = this.data.append(0); + } + this.data = this.data.append(Integer.toHexString(b)); + this.data = this.data.append(" "); + } + } + this.data = this.data.append(">\n"); + } + + /** + * represent as PDF. + * + * @return the PDF string. + */ + public String toPDF() { + String p = this.number + " " + this.generation + + " obj\n<< /Length " + (this.data.length()+1) + + " >>\nstream\n" + this.data + "\nendstream\nendobj\n"; + return p; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFUri.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFUri.java new file mode 100644 index 000000000..4c8cf7039 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFUri.java @@ -0,0 +1,91 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.pdf; + +/** + * class used to create a PDF Uri link + */ +public class PDFUri extends PDFAction { + + + String uri; + + /** + * create a Uri instance. + * + * @param uri the uri to which the link should point + */ + public PDFUri(String uri) { + + this.uri=uri; + } + + /** + * returns the action ncecessary for a uri + * + * @return the action to place next to /A within a Link + */ + public String getAction() + { + return "<< /URI ("+uri+")\n/S /URI >>"; + } + + /** + * there is nothing to return for the toPDF method, as it should not be called + * + * @return an empty string + */ + public String toPDF() { + return ""; + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFXObject.java b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFXObject.java new file mode 100644 index 000000000..039f28ea1 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/pdf/PDFXObject.java @@ -0,0 +1,167 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +/* modified by JKT to integrate with 0.12.0 */ +/* modified by Eric SCHAEFFER to integrate with 0.13.0 */ + +package org.apache.fop.pdf; + +// Java +import java.io.IOException; +import org.apache.fop.messaging.MessageHandler; +import java.io.PrintWriter; + +// FOP +import org.apache.fop.datatypes.ColorSpace; +import org.apache.fop.image.FopImage; +import org.apache.fop.image.FopImageException; + +/** + * PDF XObject + * + * A derivative of the PDF Object, is a PDF Stream that has not only a + * dictionary but a stream of image data. + * the dictionary just provides information like the stream length + */ +public class PDFXObject extends PDFObject { + + FopImage fopimage; + int Xnum; + + + /** + * create an Xobject with the given number and name and load the + * image in the object + */ + public PDFXObject(int number,int Xnumber,FopImage img) { + super(number); + this.Xnum=Xnumber; + if (img == null) + MessageHandler.errorln("FISH"); + fopimage=img; + } + + /** + * @return the PDF XObject number + */ + public int getXNumber() { + return this.Xnum; + } + + /** + * represent as PDF + */ + protected int output(PrintWriter writer) throws IOException { + int length=0; + int i=0; + int x,y; + + try { + PDFBinaryStream imgStream = new PDFBinaryStream(); + imgStream.setData(fopimage.getBitmaps()); + imgStream.encode(new PDFFilter(PDFFilter.FLATE_DECODE)); + imgStream.encode(new PDFFilter(PDFFilter.ASCII_HEX_DECODE)); + + String p = this.number + " " + this.generation + " obj\n"; + p = p + "<>\n"; + + // don't know if it's the good place (other objects can have references to it) + fopimage.close(); + + // push the pdf dictionary on the writer + writer.write(p); + length += p.length(); + // push all the image data on the writer and takes care of length for trailer + length += imgStream.outputPDFStream(writer); + + p = "endobj\n"; + writer.write(p); + length += p.length(); + } catch (FopImageException imgex) { +MessageHandler.errorln("Error in XObject : " + imgex.getMessage()); + } catch (PDFFilterException filterex) { +MessageHandler.errorln("Error in XObject : " + filterex.getMessage()); + } + return length; + } + + String toPDF() { +/* Not used any more + String p = this.number + " " + this.generation + " obj\n"; + p = p + "< +org.apache.fop.pdf Package + +

Classes for handling the low-level creation of PDF documents

+

These classes were developed for FOP, but could be used by other +applications wishing to produce PDF.

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/Renderer.java b/fop-0_14_0_regions/src/org/apache/fop/render/Renderer.java new file mode 100644 index 000000000..7be02db74 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/Renderer.java @@ -0,0 +1,112 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.render; + +// FOP +import org.apache.fop.dom.svg.SVGArea; +import org.apache.fop.image.ImageArea; +import org.apache.fop.apps.FOPException; +import org.apache.fop.layout.*; + +// Java +import java.io.PrintWriter; +import java.io.IOException; + +/** + * interface implement by all renderers. + * + * a Renderer implementation takes areas/spaces and produces output in + * some format. + */ +public interface Renderer { + + /** set up the given FontInfo */ + public void setupFontInfo(FontInfo fontInfo); + + /** set the producer of the rendering */ + public void setProducer(String producer); + + /** render the given area tree to the given writer */ + public void render(AreaTree areaTree, PrintWriter writer) throws IOException, FOPException; + + /** render the given area container */ + public void renderAreaContainer(AreaContainer area); + + /** render the given block area */ + public void renderBlockArea(BlockArea area); + + /** render the given display space */ + public void renderDisplaySpace(DisplaySpace space); + + /** render the given SVG area */ + public void renderSVGArea(SVGArea area); + + /** render a foreign object area */ + public void renderForeignObjectArea(ForeignObjectArea area); + + /** render the given image area */ + public void renderImageArea(ImageArea area); + + /** render the given inline area */ + public void renderInlineArea(InlineArea area); + + /** render the given inline space */ + public void renderInlineSpace(InlineSpace space); + + /** render the given line area */ + public void renderLineArea(LineArea area); + + /** render the given page */ + public void renderPage(Page page); + + /** render the given rule area */ + public void renderRuleArea(RuleArea area); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/awt/AWTRenderer.java b/fop-0_14_0_regions/src/org/apache/fop/render/awt/AWTRenderer.java new file mode 100644 index 000000000..ea6f1847c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/awt/AWTRenderer.java @@ -0,0 +1,1204 @@ + + +package org.apache.fop.render.awt; + +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ + +import org.apache.fop.layout.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.datatypes.*; +import org.apache.fop.image.*; +import org.apache.fop.svg.*; +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +import org.apache.fop.render.pdf.*; +import org.apache.fop.viewer.*; +import org.apache.fop.apps.*; + +import org.w3c.dom.svg.*; + +import java.awt.*; +import java.awt.Image; +import java.awt.image.*; +import java.awt.geom.*; +import java.awt.font.*; +import java.util.*; +import java.net.URL; +import java.io.*; +import java.beans.*; +import javax.swing.*; +import java.awt.print.*; +import java.awt.image.BufferedImage; + +import org.apache.fop.render.Renderer; + +public class AWTRenderer implements Renderer, Printable, Pageable { + + protected int pageWidth = 0; + protected int pageHeight = 0; + protected double scaleFactor = 100.0; + protected int pageNumber = 0; + protected AreaTree tree; + protected ProgressListener progressListener = null; + protected Translator res = null; + + protected Hashtable fontNames = new Hashtable(); + protected Hashtable fontStyles = new Hashtable(); + protected Color saveColor; + + // Key - Font name, Value - java Font name. + protected static Hashtable JAVA_FONT_NAMES; + + /** + * Image Object and Graphics Object. The Graphics Object is the Graphics + * object that is contained withing the Image Object. + */ + private BufferedImage pageImage = null; + private Graphics2D graphics = null; + + /** + * The current (internal) font name + */ + protected String currentFontName; + + /** + * The current font size in millipoints + */ + protected int currentFontSize; + + /** + * The current colour's red, green and blue component + */ + protected float currentRed = 0; + protected float currentGreen = 0; + protected float currentBlue = 0; + + /** + * The current vertical position in millipoints from bottom + */ + protected int currentYPosition = 0; + + /** + * The current horizontal position in millipoints from left + */ + protected int currentXPosition = 0; + + /** + * The horizontal position of the current area container + */ + private int currentAreaContainerXPosition = 0; + + + static { + JAVA_FONT_NAMES = new Hashtable(); + JAVA_FONT_NAMES.put("Times", "serif"); + JAVA_FONT_NAMES.put("Times-Roman", "serif"); + JAVA_FONT_NAMES.put("Courier", "monospaced"); + JAVA_FONT_NAMES.put("Helvetica", "sansserif"); + // JAVA_FONT_NAMES.put("Serif", "sansserif"); + } + + public AWTRenderer(Translator aRes) { + res = aRes; + } + + public int getPageNumber() { + return pageNumber; + } + + public void setPageNumber(int aValue) { + pageNumber = aValue; + } + + public void setScaleFactor(double newScaleFactor) { + scaleFactor = newScaleFactor; + } + + public double getScaleFactor() { + return scaleFactor; + } + + public BufferedImage getLastRenderedPage() { + return pageImage; + } + + /** + * add a line to the current stream + * + * @param x1 the start x location in millipoints + * @param y1 the start y location in millipoints + * @param x2 the end x location in millipoints + * @param y2 the end y location in millipoints + * @param th the thickness in millipoints + * @param r the red component + * @param g the green component + * @param b the blue component + */ + protected void addLine(int x1, int y1, int x2, int y2, int th, + float r, float g, float b) { + graphics.setColor(new Color (r,g,b)); + // graphics.setColor(Color.red); + graphics.drawLine((int)(x1/1000f), pageHeight - (int)(y1/1000f), + (int)(x2/1000f), pageHeight - (int)(y2/1000f)); + } + + + /** + * draw a filled rectangle + * + * @param x the x position of left edge in millipoints + * @param y the y position of top edge in millipoints + * @param w the width in millipoints + * @param h the height in millipoints + * @param r the red component + * @param g the green component + * @param b the blue component + */ + protected void addRect(int x, int y, int w, int h, + float r, float g, float b) { + graphics.setColor(new Color (r,g,b)); + // graphics.setColor(Color.green); + graphics.drawRect((int) (x/1000f), pageHeight - (int) (y/1000f), + (int) (w/1000f), -(int) (h/1000f)); + } + + /** + * draw a filled rectangle + * + * @param x the x position of left edge in millipoints + * @param y the y position of top edge in millipoints + * @param w the width in millipoints + * @param h the height in millipoints + * @param r the red component of edges + * @param g the green component of edges + * @param b the blue component of edges + * @param fr the red component of the fill + * @param fg the green component of the fill + * @param fb the blue component of the fill + */ + protected void addRect(int x, int y, int w, int h, + float r, float g, float b, + float fr, float fg, float fb) { + graphics.setColor(new Color (r,g,b)); + graphics.fill3DRect((int) (x/1000f), pageHeight - (int) (y/1000f), + (int) (w/1000f), -(int) (h/1000f),true); + } + + /** + * To configure before print. + * + * Choose pages + * Zoom factor + * Page format / Landscape or Portrait + **/ + public void transform(Graphics2D g2d, double zoomPercent, double angle) { + AffineTransform at = g2d.getTransform(); + at.rotate(angle); + at.scale(zoomPercent/100.0, zoomPercent/100.0); + g2d.setTransform(at); + } + + protected void drawFrame() { + + int width = pageWidth; + int height = pageHeight; + + graphics.setColor(Color.white); + graphics.fillRect(0, 0, width, height); + graphics.setColor(Color.black); + graphics.drawRect(-1, -1, width+2, height+2); + graphics.drawLine(width+2, 0, width+2, height+2); + graphics.drawLine(width+3, 1, width+3, height+3); + + graphics.drawLine(0, height+2, width+2, height+2); + graphics.drawLine(1, height+3, width+3, height+3); + } + + /** + * Retrieve the number of pages in this document. + * + * @return the number of pages + */ + public int getPageCount() + { + if (tree == null) { + return 0; + } + + return tree.getPages().size(); + } + + public void render(int aPageNumber) { + if (tree != null) { + try { + render(tree, aPageNumber); + } catch (IOException e) { + e.printStackTrace(); + // This exception can't occur because we are not dealing with + // any files. + } + } + } + + public void render(AreaTree areaTree, PrintWriter writer) + throws IOException { + tree = areaTree; + render(areaTree, 0); + } + + public void render(AreaTree areaTree, int aPageNumber) + throws IOException { + tree = areaTree; + Page page = (Page)areaTree.getPages().elementAt(aPageNumber); + + pageWidth = (int)((float)page.getWidth() / 1000f); + pageHeight = (int)((float)page.getHeight() / 1000f); + + + pageImage = new BufferedImage((int)((pageWidth * (int)scaleFactor)/100), + (int)((pageHeight * (int)scaleFactor)/100), + BufferedImage.TYPE_INT_RGB); + + graphics = pageImage.createGraphics(); + + transform(graphics, scaleFactor, 0); + drawFrame(); + + renderPage(page); + } + + public void renderPage(Page page) { + AreaContainer body, before, after; + + body = page.getBody(); + before = page.getBefore(); + after = page.getAfter(); + + this.currentFontName = ""; + this.currentFontSize = 0; + + renderAreaContainer(body); + + if (before != null) { + renderAreaContainer(before); + } + + if (after != null) { + renderAreaContainer(after); + } + + // SG: Wollen wir Links abbilden? + /* + if (page.hasLinks()) { + .... + } + */ + } + + public void renderAreaContainer(AreaContainer area) { + + int saveY = this.currentYPosition; + int saveX = this.currentAreaContainerXPosition; + + if (area.getPosition() == + org.apache.fop.fo.properties.Position.ABSOLUTE) { + // Y position is computed assuming positive Y axis, adjust + //for negative postscript one + this.currentYPosition = area.getYPosition() - + 2 * area.getPaddingTop() - + 2 * area.borderWidthTop; + this.currentAreaContainerXPosition = area.getXPosition(); + } else if (area.getPosition() == + org.apache.fop.fo.properties.Position.RELATIVE) { + this.currentYPosition -= area.getYPosition(); + this.currentAreaContainerXPosition += area.getXPosition(); + } else if (area.getPosition() == + org.apache.fop.fo.properties.Position.STATIC) { + this.currentYPosition -= area.getPaddingTop() + area.borderWidthTop; + this.currentAreaContainerXPosition += area.getPaddingLeft() + + area.borderWidthLeft; + } + + doFrame(area); + + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + org.apache.fop.layout.Box b = + (org.apache.fop.layout.Box) e.nextElement(); + b.render(this); + } + + if (area.getPosition() != + org.apache.fop.fo.properties.Position.STATIC) { + this.currentYPosition = saveY; + this.currentAreaContainerXPosition = saveX; + } else { + this.currentYPosition -= area.getHeight(); + } + } + + private void doFrame(org.apache.fop.layout.Area area) { + int w, h; + int rx = this.currentAreaContainerXPosition; + w = area.getContentWidth(); + + if (area instanceof BlockArea) { + rx += ((BlockArea)area).getStartIndent(); + } + + h = area.getContentHeight(); + int ry = this.currentYPosition; + ColorType bg = area.getBackgroundColor(); + + rx = rx - area.getPaddingLeft(); + ry = ry + area.getPaddingTop(); + w = w + area.getPaddingLeft() + area.getPaddingRight(); + h = h + area.getPaddingTop() + area.getPaddingBottom(); + + // I'm not sure I should have to check for bg being null + // but I do + if ((bg != null) && (bg.alpha() == 0)) { + this.addRect(rx, ry, w, -h, + bg.red(), bg.green(), bg.blue(), + bg.red(), bg.green(), bg.blue()); + } + + rx = rx - area.borderWidthLeft; + ry = ry + area.borderWidthTop; + w = w + area.borderWidthLeft + area.borderWidthRight; + h = h + area.borderWidthTop + area.borderWidthBottom; + + if (area.borderWidthTop != 0) { + addLine(rx, ry, rx + w, ry, + area.borderWidthTop, + area.borderColorTop.red(), area.borderColorTop.green(), + area.borderColorTop.blue()); + } + + if (area.borderWidthLeft != 0) { + addLine(rx, ry, rx, ry - h, + area.borderWidthLeft, + area.borderColorLeft.red(), area.borderColorLeft.green(), + area.borderColorLeft.blue()); + } + + if (area.borderWidthRight != 0) { + addLine(rx + w, ry, rx + w, ry - h, + area.borderWidthRight, + area.borderColorRight.red(), area.borderColorRight.green(), + area.borderColorRight.blue()); + } + + if (area.borderWidthBottom != 0) { + addLine(rx, ry - h, rx + w, ry - h, + area.borderWidthBottom, + area.borderColorBottom.red(), area.borderColorBottom.green(), + area.borderColorBottom.blue()); + } + } + + + + protected Rectangle2D getBounds(org.apache.fop.layout.Area a) { + return new Rectangle2D.Double(currentAreaContainerXPosition, + currentYPosition, + a.getAllocationWidth(), + a.getHeight()); + } + + public void renderBlockArea(BlockArea area) { + doFrame(area); + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + org.apache.fop.layout.Box b = + (org.apache.fop.layout.Box) e.nextElement(); + b.render(this); + } + } + + public void setupFontInfo(FontInfo fontInfo) { + FontSetup.setup(fontInfo); + Hashtable hash = fontInfo.getFonts(); + org.apache.fop.render.pdf.Font f; + String name; + Object key; + int fontStyle; + + for (Enumeration e = hash.keys(); e.hasMoreElements();) { + fontStyle = java.awt.Font.PLAIN; + key = e.nextElement(); + f = (org.apache.fop.render.pdf.Font)hash.get(key); + name = f.fontName(); + + if (name.toUpperCase().indexOf("BOLD") > 0) { + fontStyle += java.awt.Font.BOLD; + } + if (name.toUpperCase().indexOf("ITALIC") > 0 || + name.toUpperCase().indexOf("OBLIQUE") > 0) { + fontStyle += java.awt.Font.ITALIC; + } + + int hyphenIndex = name.indexOf("-"); + + hyphenIndex = (hyphenIndex < 0) ? name.length() : hyphenIndex; + fontNames.put(key, name.substring(0, hyphenIndex)); + fontStyles.put(key, new Integer(fontStyle)); + } + + } + + public void renderDisplaySpace(DisplaySpace space) { + int d = space.getSize(); + this.currentYPosition -= d; + } + + + public void renderImageArea(ImageArea area) { + int x = this.currentAreaContainerXPosition + + area.getXOffset(); + int y = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + + FopImage img = area.getImage(); + + if (img == null) { + MessageHandler.logln("area.getImage() is null"); + } + + try { + byte[] map = img.getBitmaps(); + + String path = img.getURL(); + + ImageIcon icon = new ImageIcon(path); + Image imgage = icon.getImage(); + + graphics.drawImage(imgage, currentXPosition / 1000, + pageHeight - y / 1000, + img.getWidth() / 1000, + img.getHeight() / 1000, + null); + + currentYPosition -= h; + } catch (FopImageException imgex) { + // ? + MessageHandler.logln("Error while loading image : " + imgex.getMessage()); + } + } + + public void renderInlineArea(InlineArea area) { + char ch; + StringBuffer pdf = new StringBuffer(); + + String name = area.getFontState().getFontName(); + int size = area.getFontState().getFontSize(); + + float red = area.getRed(); + float green = area.getGreen(); + float blue = area.getBlue(); + + if ((!name.equals(this.currentFontName)) + || (size != this.currentFontSize)) { + this.currentFontName = name; + this.currentFontSize = size; + } + + if ((red != this.currentRed) + || (green != this.currentGreen) + || (blue != this.currentBlue)) { + this.currentRed = red; + this.currentGreen = green; + this.currentBlue = blue; + } + + int rx = this.currentXPosition; + int bl = this.currentYPosition; + + + String s = area.getText(); + Color oldColor = graphics.getColor(); + java.awt.Font oldFont = graphics.getFont(); + String aFontName = fontNames.get(name).toString(); + + aFontName = getJavaFontName(aFontName); + + java.awt.Font f = + new java.awt.Font(aFontName, + ((Integer)fontStyles.get(name)).intValue(), + (int)(size / 1000f)); + + graphics.setColor(new Color(red, green, blue)); + + /* + Die KLasse TextLayout nimmt für die Ausgabe eigenen Schriftsatz, + der i.R. breiter ist. Deshalb wird bis diese Tatsache sich geklärt/ + geregelt hat weniger schöne Ausgabe über Graphics benutzt. + */ + + // Fonts in bold still have trouble displaying! + FontRenderContext newContext = new FontRenderContext(null, true, true); + TextLayout layout = new TextLayout(s, f, newContext); + graphics.setRenderingHint(RenderingHints.KEY_RENDERING, + RenderingHints.VALUE_RENDER_QUALITY); + layout.draw(graphics, rx / 1000f, (int)(pageHeight - bl / 1000f)); + + graphics.setColor(oldColor); + this.currentXPosition += area.getContentWidth(); + } + + public void renderInlineSpace(InlineSpace space) { + this.currentXPosition += space.getSize(); + } + + public void renderLineArea(LineArea area) { + int rx = this.currentAreaContainerXPosition + + area.getStartIndent(); + int ry = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + + this.currentYPosition -= area.getPlacementOffset(); + this.currentXPosition = rx; + + int bl = this.currentYPosition; + + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + org.apache.fop.layout.Box b = + (org.apache.fop.layout.Box) e.nextElement(); + b.render(this); + } + + this.currentYPosition = ry-h; + } + + /** + * render rule area into PDF + * + * @param area area to render + */ + public void renderRuleArea(RuleArea area) { + int rx = this.currentAreaContainerXPosition + + area.getStartIndent(); + int ry = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + int th = area.getRuleThickness(); + float r = area.getRed(); + float g = area.getGreen(); + float b = area.getBlue(); + Color oldColor = graphics.getColor(); + + graphics.setColor(new Color(r, g, b)); + graphics.fillRect((int)(rx / 1000f), (int)(pageHeight - ry / 1000f), + (int)(w / 1000f), (int)(th / 1000f)); + graphics.setColor(oldColor); + + } + + public void renderSVGArea(SVGArea area) { + + int x = this.currentAreaContainerXPosition; + int y = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Object o = e.nextElement(); + if(o instanceof GraphicImpl) { + renderElement(area, (GraphicImpl)o, x, y, null); + } + } + + this.currentYPosition -= h; + + } + + + protected String getJavaFontName(String aName) { + if (aName == null) + return null; + + Object o = JAVA_FONT_NAMES.get(aName); + + return (o == null) ? aName : o.toString(); + } + + public void setProducer(String producer) { + // defined in Renderer Interface + } + + public int print(Graphics g, PageFormat pageFormat, int pageIndex) + throws PrinterException { + if (pageIndex >= tree.getPages().size()) + return NO_SUCH_PAGE; + + Graphics2D oldGraphics = graphics; + int oldPageNumber = pageNumber; + + graphics = (Graphics2D)g; + Page aPage = (Page)tree.getPages().elementAt(pageIndex); + renderPage(aPage); + graphics = oldGraphics; + + return PAGE_EXISTS; + } + + public int getNumberOfPages() { + return tree.getPages().size(); + } + + public PageFormat getPageFormat(int pageIndex) + throws IndexOutOfBoundsException { + if (pageIndex >= tree.getPages().size()) + return null; + + Page page = (Page)tree.getPages().elementAt(pageIndex); + PageFormat pageFormat = new PageFormat(); + Paper paper = new Paper(); + paper.setImageableArea(0, 0, + page.getWidth() / 1000d, page.getHeight() / 1000d); + paper.setSize(page.getWidth() / 1000d, page.getHeight() / 1000d); + pageFormat.setPaper(paper); + + return pageFormat; + } + + public Printable getPrintable(int pageIndex) + throws IndexOutOfBoundsException { + return this; + } + + public void setProgressListener(ProgressListener l) { + progressListener = l; + } + + public static Color colorType2Color(ColorType ct) { + if (ct == null) { + return null; + } + return new Color(ct.red(), ct.green(), ct.blue()); + } + + + + /** + * Draws an image. + * TODO: protect other image formats (JIMI) + */ + public void renderImage(String href, float x, float y, float width, float height, Vector transform) { + // What is with transformations? + try { + URL url = new URL(href); + ImageIcon imageIcon = new ImageIcon(url); + + AffineTransform fullTransform = new AffineTransform(); + AffineTransform aTransform; + + transform = (transform == null) ? new Vector() : transform; + for (int i = 0; i < transform.size(); i++) { + org.w3c.dom.svg.SVGTransform t = (org.w3c.dom.svg.SVGTransform)transform.elementAt(i); + SVGMatrix matrix = t.getMatrix(); + aTransform = new AffineTransform(matrix.getA(), matrix.getB(), matrix.getC(), + matrix.getD(), matrix.getE(), matrix.getF()); + fullTransform.concatenate(aTransform); + } + + BufferedImage bi = new BufferedImage((int) width, (int) height, BufferedImage.TYPE_INT_RGB); + Graphics2D g2d = bi.createGraphics(); + BufferedImageOp bop = new AffineTransformOp(fullTransform, + AffineTransformOp.TYPE_NEAREST_NEIGHBOR); + g2d.drawImage(imageIcon.getImage(), 0, 0, (int) width, (int) height, imageIcon.getImageObserver()); + graphics.drawImage(bi, bop, (int) x, (int) y); + } catch (Exception ex) { + MessageHandler.errorln("AWTRenderer: renderImage(): " + ex.getMessage()); + } + } + + + + public void renderElement(SVGArea svgarea, GraphicImpl area, int posx, int posy, + Vector parentTransforms) { + int x = posx; + int y = posy; + Hashtable style = area.oldgetStyle(); + DrawingInstruction di = createInstruction(area, style); + + Object o = null; + Vector v = area.oldgetTransform(); + v = (v == null) ? new Vector() : v; + Vector trans = new Vector(v); + parentTransforms = (parentTransforms == null) ? new Vector() : parentTransforms; + + if (parentTransforms != null) { + trans.addAll(0, parentTransforms); + } + + float red = (float) graphics.getColor().getRed(); + float green = (float) graphics.getColor().getGreen(); + float blue = (float) graphics.getColor().getBlue(); + Color c = null; + + ColorType ct = null; + try { + o = style.get("fill"); + if (o != null && o instanceof ColorType) { + ct = (ColorType) o; + c = new Color((int) (ct.red() * 255f), (int) (ct.green() * 255f), (int) (ct.blue() * 255f)); + } + o = style.get("stroke"); + if (c == null && o != null && o instanceof ColorType) { + ct = (ColorType) o; + c = new Color((int) (ct.red() * 255f), (int) (ct.green() * 255f), (int) (ct.blue() * 255f)); + } + } catch (Exception ex) { + MessageHandler.errorln("Can't set color: R G B : " + (int) (ct.red() * 255f) + " " + (int) (ct.green() * 255f) + " " + (int) (ct.blue() * 255f)); + c = Color.pink; + } + + if (c == null) { + c = new Color((int) red, (int) green, (int) blue); + } + Color oldColor = graphics.getColor(); + + if (area instanceof SVGLineElement) { + graphics.setColor(c); + SVGLineElementImpl lg = (SVGLineElementImpl) area; + + float x1 = lg.getX1().getBaseVal().getValue() * 1000 + posx; + float y1 = posy - lg.getY1().getBaseVal().getValue() * 1000 ; + float x2 = lg.getX2().getBaseVal().getValue() * 1000 + posx; + float y2 = posy - lg.getY2().getBaseVal().getValue() * 1000; + // TODO: + // The thickness of contour protect. + int th = 1; + o = style.get("stroke-width"); + if (o != null) + th = (int)((SVGLengthImpl)o).getValue(); + Line2D.Double aLine = new Line2D.Double(x1 / 1000f, pageHeight - y1 / 1000f, + x2 / 1000f, pageHeight - y2 / 1000f); + drawShape(transformShape(trans, aLine), di); + graphics.setColor(oldColor); + } else if (area instanceof SVGRectElement) { + graphics.setColor(c); + SVGRectElement rg = (SVGRectElement)area; + float rectx = rg.getX().getBaseVal().getValue() * 1000 + posx; + float recty = posy - rg.getY().getBaseVal().getValue() * 1000; + float rx = rg.getRx().getBaseVal().getValue() * 1000; + float ry = rg.getRy().getBaseVal().getValue() * 1000; + float rw = rg.getWidth().getBaseVal().getValue() * 1000; + float rh = rg.getHeight().getBaseVal().getValue() * 1000; + + // TODO: + // rx and ry are roundings. + // RoundRectangle2D.Double + Rectangle aRectangle = new Rectangle(); + aRectangle.setRect(rectx / 1000d, pageHeight - recty / 1000d, rw / 1000d, rh / 1000d); + drawShape(transformShape(trans, aRectangle), di); + graphics.setColor(oldColor); + } else if (area instanceof SVGCircleElement) { + graphics.setColor(c); + SVGCircleElement cg = (SVGCircleElement)area; + float cx = cg.getCx().getBaseVal().getValue() * 1000 + posx; + float cy = posy - cg.getCy().getBaseVal().getValue() * 1000; + float r = cg.getR().getBaseVal().getValue(); + Ellipse2D.Double anEllipse = new Ellipse2D.Double(cx / 1000d - r, + pageHeight - cy / 1000d - r, + r * 2d, r * 2d); + drawShape(transformShape(trans, anEllipse), di); + graphics.setColor(oldColor); + } else if (area instanceof SVGEllipseElement) { + graphics.setColor(c); + SVGEllipseElement cg = (SVGEllipseElement)area; + float cx = cg.getCx().getBaseVal().getValue() * 1000 + posx; + float cy = posy - cg.getCy().getBaseVal().getValue() * 1000; + float rx = cg.getRx().getBaseVal().getValue(); + float ry = cg.getRy().getBaseVal().getValue(); + Ellipse2D.Double anEllipse = new Ellipse2D.Double(cx / 1000d - rx, + pageHeight - cy / 1000d - ry, + rx * 2d, ry * 2d); + drawShape(transformShape(trans, anEllipse), di); + graphics.setColor(oldColor); + } else if (area instanceof SVGImageElementImpl) { + SVGImageElementImpl ig = (SVGImageElementImpl)area; + renderImage(ig.link, ig.x + posx / 1000f, pageHeight - (posy / 1000f - ig.y), ig.width, ig.height, trans); + } else if(area instanceof SVGUseElementImpl) { + SVGUseElementImpl ug = (SVGUseElementImpl)area; + String ref = ug.link; + ref = ref.substring(1, ref.length()); + GraphicImpl graph = null; +// graph = area.locateDef(ref); + if(graph != null) { + // probably not the best way to do this, should be able + // to render without the style being set. +// GraphicImpl parent = graph.getGraphicParent(); +// graph.setParent(area); + // need to clip (if necessary) to the use area + // the style of the linked element is as if is was + // a direct descendant of the use element. + + renderElement(svgarea, graph, posx, posy, trans); +// graph.setParent(parent); + } + } else if (area instanceof SVGPolylineElementImpl) { + graphics.setColor(c); + Vector points = ((SVGPolylineElementImpl)area).points; + PathPoint p = null; + Point2D.Double p1 = null; + Point2D.Double p2 = null; + if (points.size() > 0) { + p = (PathPoint) points.elementAt(0); + double xc = p.x * 1000f + posx; + double yc = posy - p.y * 1000f; + p1 = new Point2D.Double(xc / 1000f, pageHeight - yc / 1000f); + + int[] xarr = {(int) xc}; + int[] yarr = {(int) yc}; + graphics.drawPolyline(xarr, yarr, 1); + } + Line2D.Double aLine; + for (int i = 1; i< points.size(); i++) { + p = (PathPoint) points.elementAt(i); + p2 = new Point2D.Double(p.x + posx / 1000f, pageHeight - (posy - p.y * 1000f) / 1000f); + aLine = new Line2D.Double(p1, p2); + graphics.draw(transformShape(trans, aLine)); + p1 = p2; + } + graphics.setColor(oldColor); + } else if (area instanceof SVGPolygonElementImpl) { + graphics.setColor(c); + java.awt.Polygon aPolygon = convertPolygon(((SVGPolygonElementImpl)area), posx, posy); + drawShape(transformShape(trans, aPolygon), di); + graphics.setColor(oldColor); + } else if (area instanceof SVGGElementImpl) { + renderGArea(svgarea, (SVGGElementImpl)area, x, y, parentTransforms); + } else if (area instanceof SVGPathElementImpl) { + graphics.setColor(c); + GeneralPath path = convertPath((SVGPathElementImpl) area, posx, posy); + drawShape(transformShape(trans, path), di); + graphics.setColor(oldColor); + } else if (area instanceof SVGTextElementImpl) { + MessageHandler.errorln("SVGTextElementImpl is not implemented yet."); + // renderText(svgarea, (SVGTextElementImpl)area, 0, 0, di); + } else if (area instanceof SVGArea) { + // the x and y pos will be wrong! + Enumeration e = ((SVGArea)area).getChildren().elements(); + while (e.hasMoreElements()) { + Object el = e.nextElement(); + if(o instanceof GraphicImpl) { + renderElement((SVGArea)area, (GraphicImpl)el, x, y, parentTransforms); + } + } + } + + // should be done with some cleanup code, so only + // required values are reset. + } // renderElement + + + public void renderGArea(SVGArea svgarea, SVGGElementImpl area, int posx, int posy, Vector v) { + + + Vector trans = null; +// trans = new Vector(area.oldgetTransform()); +// trans.addAll(0, v); +/* Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Object o = e.nextElement(); + if(o instanceof GraphicImpl) { + renderElement(svgarea, (GraphicImpl)o, posx, posy, trans); + } + }*/ + } + public void renderGArea(SVGArea svgarea, SVGGElementImpl area, int posx, int posy) + { + renderGArea(svgarea, area, posx, posy, new Vector()); + } + + + /** + * Applies SVGTransform to the shape and gets the transformed shape. + * The type of the new shape may be different to the original type. + */ + public Shape transformShape(Vector trans, Shape shape) { + if (trans == null || trans.size() == 0) { + return shape; + } + + AffineTransform at; + for(int i = trans.size() - 1; i >= 0; i--) { + org.w3c.dom.svg.SVGTransform t = (org.w3c.dom.svg.SVGTransform)trans.elementAt(i); + SVGMatrix matrix = t.getMatrix(); + at = new AffineTransform(matrix.getA(), matrix.getB(), matrix.getC(), + matrix.getD(), matrix.getE(), matrix.getF()); + shape = at.createTransformedShape(shape); + } + return shape; + } + + + /** + * Mapps a SVG-Polygon to a AWT-Polygon. + */ + public java.awt.Polygon convertPolygon(SVGPolygonElementImpl svgpl, int x, int y) { + java.awt.Polygon aPolygon = new java.awt.Polygon(); + Vector points = svgpl.points; + + PathPoint p; + for (int i = 0; i < points.size(); i++) { + p = (PathPoint) points.elementAt(i); + aPolygon.addPoint((int) (x / 1000f + p.x), pageHeight - (int) (y / 1000f - p.y)); + } + + return aPolygon; + } + + // TODO: other attributes of DrawingInstruction protect too. + protected DrawingInstruction createInstruction(GraphicImpl area, Hashtable style) { + DrawingInstruction di = new DrawingInstruction(); + Object sp; + sp = style.get("fill"); + if(sp != null && !(sp instanceof String && sp.equals("none"))) { + di.fill = true; + } + // ... + return di; + } + + // Draws a shape. + // TODO: other attributes of DrawingInstruction protect too. + protected void drawShape(Shape s, DrawingInstruction di) { + if (di.fill) { + graphics.fill(s); + } else { + graphics.draw(s); + } + } + + /** + * Mapps a SVG-Path to a AWT-GeneralPath. + */ + public GeneralPath convertPath(SVGPathElementImpl svgpath, float x, float y) { + Vector points = svgpath.pathElements; + GeneralPath path = new GeneralPath(); + + float lastx = 0; + float lasty = 0; + SVGPathSegImpl pathmoveto = null; + + for(Enumeration e = points.elements(); e.hasMoreElements(); ) { + SVGPathSegImpl pc = (SVGPathSegImpl)e.nextElement(); + float[] vals = pc.getValues(); + float lastcx = 0; + float lastcy = 0; + switch(pc.getPathSegType()) { + case SVGPathSeg.PATHSEG_MOVETO_ABS: + lastx = vals[0]; + lasty = vals[1]; + pathmoveto = pc; + path.moveTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_MOVETO_REL: + if (pathmoveto == null) { + lastx = vals[0]; + lasty = vals[1]; + path.moveTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + pathmoveto = pc; + } else { + lastx += vals[0]; + lasty += vals[1]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + + } + break; + case SVGPathSeg.PATHSEG_LINETO_ABS: + lastx = vals[0]; + lasty = vals[1]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_LINETO_REL: + lastx += vals[0]; + lasty += vals[1]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS: + lasty = vals[0]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL: + lasty += vals[0]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS: + lastx = vals[0]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL: + lastx += vals[0]; + path.lineTo(lastx + x / 1000f, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: + lastx = vals[4]; + lasty = vals[5]; + lastcx = vals[2]; + lastcy = vals[3]; + path.curveTo(x / 1000f + vals[0], pageHeight - y / 1000f + vals[1], + x / 1000f + lastcx, pageHeight - y / 1000f + lastcy, + x / 1000f + lastx, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: + path.curveTo(x / 1000f + vals[0] + lastx, pageHeight - y / 1000f + vals[1] + lasty, + x / 1000f + lastx + vals[2], pageHeight - y / 1000f + lasty + vals[3], + x / 1000f + lastx + vals[4], pageHeight - y / 1000f + lasty + vals[5]); + lastcx = vals[2] + lastx; + lastcy = vals[3] + lasty; + lastx += vals[4]; + lasty += vals[5]; + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: + if (lastcx == 0) + lastcx = lastx; + if (lastcy == 0) + lastcy = lasty; + lastx = vals[2]; + lasty = vals[3]; + path.curveTo(x / 1000f + lastcx, pageHeight - y / 1000f + lastcy, + x / 1000f + vals[0], pageHeight - y / 1000f + vals[1], + x / 1000f + lastx, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: + if (lastcx == 0) + lastcx = lastx; + if (lastcy == 0) + lastcy = lasty; + path.curveTo(x / 1000f + lastcx, pageHeight - y / 1000f + lastcy, + x / 1000f + lastx + vals[0], pageHeight - y / 1000f + lasty + vals[1], + x / 1000f + lastx + vals[2], pageHeight - y / 1000f + lasty + vals[3]); + lastx += vals[2]; + lasty += vals[3]; + break; + case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: + if (lastcx == 0) + lastcx = lastx; + if (lastcy == 0) + lastcy = lasty; + lastx = vals[0]; + lasty = vals[1]; + lastcx = 0; + lastcy = 0; + path.quadTo(x / 1000f + lastcx, pageHeight - y / 1000f + lastcy, + x / 1000f + lastx, pageHeight - y / 1000f + lasty); + break; + case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: + if (lastcx == 0) + lastcx = lastx; + if (lastcy == 0) + lastcy = lasty; + + path.quadTo(x / 1000f + lastcx , pageHeight - y / 1000f + lastcy, + x / 1000f + lastx + vals[0], pageHeight - y / 1000f + lasty + vals[1]); + + lastx += vals[0]; + lasty += vals[1]; + lastcx = 0; + lastcy = 0; + break; + case SVGPathSeg.PATHSEG_ARC_ABS: { + // Arc2D.Double arc = new Arc2D.Double(); + // arc.setAngles(current point, end point); .... + double rx = vals[0]; + double ry = vals[1]; + double theta = vals[2]; + boolean largearcflag = (vals[3] == 1.0); + boolean sweepflag = (vals[4] == 1.0); + + double cx = lastx; + double cy = lasty; + + path.curveTo(x / 1000f + lastx, pageHeight - y / 1000f + lasty, + x / 1000f + vals[0], pageHeight - y / 1000f + vals[1], + x / 1000f + vals[5], pageHeight - y / 1000f + vals[6]); + + lastcx = 0; //?? + lastcy = 0; //?? + lastx = vals[5]; + lasty = vals[6]; + } + break; + case SVGPathSeg.PATHSEG_ARC_REL: { + double rx = vals[0]; + double ry = vals[1]; + double theta = vals[2]; + boolean largearcflag = (vals[3] == 1.0); + boolean sweepflag = (vals[4] == 1.0); + + path.curveTo(x / 1000f + lastx, pageHeight - y / 1000f + lasty, + x / 1000f + (vals[0] + lastx), pageHeight - y / 1000f + (vals[1] + lasty), + x / 1000f + (vals[5] + lastx) , pageHeight - y / 1000f + (vals[6] + lasty)); + lastcx = 0; //?? + lastcy = 0; //?? + lastx += vals[5]; + lasty += vals[6]; + } + break; + case SVGPathSeg.PATHSEG_CLOSEPATH: + path.closePath(); + break; + + + } // switch + } // for points.elements() + + return path; + } // convertPath +/* + if(di == null) { + currentStream.add("S\n"); + } else { + if(di.fill) { + if(di.stroke) { + if(!di.nonzero) + currentStream.add("B*\n"); + else + currentStream.add("B\n"); + } else { + if(!di.nonzero) + currentStream.add("f*\n"); + else + currentStream.add("f\n"); + } + } else { +// if(di.stroke) + currentStream.add("S\n"); + } + } +*/ + + /* + * by pdfrenderer übernommen. + * + */ + class DrawingInstruction { + boolean stroke = false; + boolean nonzero = false; // non-zero fill rule "f*", "B*" operator + boolean fill = false; + int linecap = 0; // butt + int linejoin = 0; // miter + int miterwidth = 8; + } + + public void renderForeignObjectArea(ForeignObjectArea area) { + area.getObject().render(this); + } + +} + + + diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/package.html b/fop-0_14_0_regions/src/org/apache/fop/render/package.html new file mode 100644 index 000000000..25daa021e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/package.html @@ -0,0 +1,6 @@ + +org.apache.fop.render Package + +

generic renderer interface

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/pdf/Font.java b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/Font.java new file mode 100644 index 000000000..5717a62ad --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/Font.java @@ -0,0 +1,70 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.render.pdf; + +// FOP +import org.apache.fop.layout.FontMetric; + +/** + * base class for PDF font classes + */ +public abstract class Font implements FontMetric { + + /** + * get the encoding of the font + */ + public abstract String encoding(); + + /** + * get the base font name + */ + public abstract String fontName(); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/pdf/FontSetup.java b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/FontSetup.java new file mode 100644 index 000000000..68841f8b3 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/FontSetup.java @@ -0,0 +1,224 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.render.pdf; + +// FOP +import org.apache.fop.render.pdf.fonts.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.layout.FontInfo; +import org.apache.fop.pdf.PDFDocument; +import org.apache.fop.pdf.PDFResources; + +// Java +import java.util.Enumeration; +import java.util.Hashtable; + +/** + * sets up the PDF fonts. + * + * Assigns the font (with metrics) to internal names like "F1" and + * assigns family-style-weight triplets to the fonts + */ +public class FontSetup { + + /** + * sets up the font info object. + * + * adds metrics for basic fonts and useful family-style-weight + * triplets for lookup + * + * @param fontInfo the font info object to set up + */ + public static void setup(FontInfo fontInfo) { + MessageHandler.logln("setting up fonts"); + + fontInfo.addMetrics("F1", new Helvetica()); + fontInfo.addMetrics("F2", new HelveticaOblique()); + fontInfo.addMetrics("F3", new HelveticaBold()); + fontInfo.addMetrics("F4", new HelveticaBoldOblique()); + fontInfo.addMetrics("F5", new TimesRoman()); + fontInfo.addMetrics("F6", new TimesItalic()); + fontInfo.addMetrics("F7", new TimesBold()); + fontInfo.addMetrics("F8", new TimesBoldItalic()); + fontInfo.addMetrics("F9", new Courier()); + fontInfo.addMetrics("F10", new CourierOblique()); + fontInfo.addMetrics("F11", new CourierBold()); + fontInfo.addMetrics("F12", new CourierBoldOblique()); + fontInfo.addMetrics("F13", new Symbol()); + fontInfo.addMetrics("F14", new ZapfDingbats()); + + /* any is treated as serif */ + fontInfo.addFontProperties("F5", "any", "normal", "normal"); + fontInfo.addFontProperties("F6", "any", "italic", "normal"); + fontInfo.addFontProperties("F6", "any", "oblique", "normal"); + fontInfo.addFontProperties("F7", "any", "normal", "bold"); + fontInfo.addFontProperties("F8", "any", "italic", "bold"); + fontInfo.addFontProperties("F8", "any", "oblique", "bold"); + + fontInfo.addFontProperties("F1", "sans-serif", "normal", + "normal"); + fontInfo.addFontProperties("F2", "sans-serif", "oblique", + "normal"); + fontInfo.addFontProperties("F2", "sans-serif", "italic", + "normal"); + fontInfo.addFontProperties("F3", "sans-serif", "normal", + "bold"); + fontInfo.addFontProperties("F4", "sans-serif", "oblique", + "bold"); + fontInfo.addFontProperties("F4", "sans-serif", "italic", + "bold"); + fontInfo.addFontProperties("F5", "serif", "normal", "normal"); + fontInfo.addFontProperties("F6", "serif", "oblique", + "normal"); + fontInfo.addFontProperties("F6", "serif", "italic", "normal"); + fontInfo.addFontProperties("F7", "serif", "normal", "bold"); + fontInfo.addFontProperties("F8", "serif", "oblique", "bold"); + fontInfo.addFontProperties("F8", "serif", "italic", "bold"); + fontInfo.addFontProperties("F9", "monospace", "normal", + "normal"); + fontInfo.addFontProperties("F10", "monospace", "oblique", + "normal"); + fontInfo.addFontProperties("F10", "monospace", "italic", + "normal"); + fontInfo.addFontProperties("F11", "monospace", "normal", + "bold"); + fontInfo.addFontProperties("F12", "monospace", "oblique", + "bold"); + fontInfo.addFontProperties("F12", "monospace", "italic", + "bold"); + + fontInfo.addFontProperties("F1", "Helvetica", "normal", + "normal"); + fontInfo.addFontProperties("F2", "Helvetica", "oblique", + "normal"); + fontInfo.addFontProperties("F2", "Helvetica", "italic", + "normal"); + fontInfo.addFontProperties("F3", "Helvetica", "normal", + "bold"); + fontInfo.addFontProperties("F4", "Helvetica", "oblique", + "bold"); + fontInfo.addFontProperties("F4", "Helvetica", "italic", + "bold"); + fontInfo.addFontProperties("F5", "Times", "normal", "normal"); + fontInfo.addFontProperties("F6", "Times", "oblique", + "normal"); + fontInfo.addFontProperties("F6", "Times", "italic", "normal"); + fontInfo.addFontProperties("F7", "Times", "normal", "bold"); + fontInfo.addFontProperties("F8", "Times", "oblique", "bold"); + fontInfo.addFontProperties("F8", "Times", "italic", "bold"); + fontInfo.addFontProperties("F9", "Courier", "normal", + "normal"); + fontInfo.addFontProperties("F10", "Courier", "oblique", + "normal"); + fontInfo.addFontProperties("F10", "Courier", "italic", + "normal"); + fontInfo.addFontProperties("F11", "Courier", "normal", + "bold"); + fontInfo.addFontProperties("F12", "Courier", "oblique", + "bold"); + fontInfo.addFontProperties("F12", "Courier", "italic", + "bold"); + fontInfo.addFontProperties("F13", "Symbol", "normal", + "normal"); + fontInfo.addFontProperties("F14", "ZapfDingbats", "normal", + "normal"); + + /* for compatibility with PassiveTex */ + fontInfo.addFontProperties("F5", "Times-Roman", "normal", + "normal"); + fontInfo.addFontProperties("F6", "Times-Roman", "oblique", + "normal"); + fontInfo.addFontProperties("F6", "Times-Roman", "italic", + "normal"); + fontInfo.addFontProperties("F7", "Times-Roman", "normal", + "bold"); + fontInfo.addFontProperties("F8", "Times-Roman", "oblique", + "bold"); + fontInfo.addFontProperties("F8", "Times-Roman", "italic", + "bold"); + fontInfo.addFontProperties("F5", "Times Roman", "normal", + "normal"); + fontInfo.addFontProperties("F6", "Times Roman", "oblique", + "normal"); + fontInfo.addFontProperties("F6", "Times Roman", "italic", + "normal"); + fontInfo.addFontProperties("F7", "Times Roman", "normal", + "bold"); + fontInfo.addFontProperties("F8", "Times Roman", "oblique", + "bold"); + fontInfo.addFontProperties("F8", "Times Roman", "italic", + "bold"); + fontInfo.addFontProperties("F9", "Computer-Modern-Typewriter", + "normal", "normal"); + } + + /** + * add the fonts in the font info to the PDF document + * + * @param doc PDF document to add fonts to + * @param fontInfo font info object to get font information from + */ + public static void addToResources(PDFDocument doc, FontInfo fontInfo) { + Hashtable fonts = fontInfo.getFonts(); + Enumeration e = fonts.keys(); + PDFResources resources = doc.getResources(); + while (e.hasMoreElements()) { + String f = (String) e.nextElement(); + resources.addFont(doc.makeFont(f, + ((Font) + fonts.get(f)).fontName(), + ((Font) + fonts.get(f)).encoding() + ) + ); + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/pdf/PDFRenderer.java b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/PDFRenderer.java new file mode 100644 index 000000000..15757e8c0 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/PDFRenderer.java @@ -0,0 +1,2352 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.render.pdf; + +// FOP +import org.apache.fop.render.Renderer; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.image.ImageArea; +import org.apache.fop.image.FopImage; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.svg.PathPoint; +import org.apache.fop.pdf.*; +import org.apache.fop.layout.*; +import org.apache.fop.image.*; + +import org.w3c.dom.*; +import org.w3c.dom.svg.*; +import org.w3c.dom.css.*; +import org.w3c.dom.svg.SVGLength; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGRectElementImpl; +import org.apache.fop.dom.svg.SVGTextElementImpl; +import org.apache.fop.dom.svg.SVGLineElementImpl; +import org.apache.fop.dom.svg.SVGArea; + +// Java +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Enumeration; +import java.awt.Rectangle; +import java.util.Vector; +import java.util.Hashtable; + +/** + * Renderer that renders areas to PDF + */ +public class PDFRenderer implements Renderer { + + /** the PDF Document being created */ + protected PDFDocument pdfDoc; + + /** the /Resources object of the PDF document being created */ + protected PDFResources pdfResources; + + /** the IDReferences for this document */ + protected IDReferences idReferences; + + /** the current stream to add PDF commands to */ + PDFStream currentStream; + + /** the current annotation list to add annotations to */ + PDFAnnotList currentAnnotList; + + /** the current page to add annotations to */ + PDFPage currentPage; + + /** the current (internal) font name */ + protected String currentFontName; + + /** the current font size in millipoints */ + protected int currentFontSize; + + /** the current color/gradient for borders, letters, etc. */ + protected PDFPathPaint currentStroke = null; + + /** the current color/gradient to fill shapes with */ + protected PDFPathPaint currentFill = null; + + /** the current colour's red component */ + protected float currentRed = 0; + + /** the current colour's green component */ + protected float currentGreen = 0; + + /** the current colour's blue component */ + protected float currentBlue = 0; + + /** the current vertical position in millipoints from bottom */ + protected int currentYPosition = 0; + + /** the current horizontal position in millipoints from left */ + protected int currentXPosition = 0; + + /** the horizontal position of the current area container */ + private int currentAreaContainerXPosition = 0; + + private PDFColor currentColour = new PDFColor(0, 0, 0); + + /** + * create the PDF renderer + */ + public PDFRenderer() { + this.pdfDoc = new PDFDocument(); + } + + /** + * set the PDF document's producer + * + * @param producer string indicating application producing PDF + */ + public void setProducer(String producer) { + this.pdfDoc.setProducer(producer); + } + + /** + * render the areas into PDF + * + * @param areaTree the laid-out area tree + * @param writer the PrintWriter to write the PDF with + */ + public void render(AreaTree areaTree, PrintWriter writer) + throws IOException, FOPException { + MessageHandler.logln("rendering areas to PDF"); + idReferences=areaTree.getIDReferences(); + this.pdfResources = this.pdfDoc.getResources(); + this.pdfDoc.setIDReferences(idReferences); + Enumeration e = areaTree.getPages().elements(); + while ( e.hasMoreElements() ) { + this.renderPage((Page) e.nextElement()); + } + + if ( !idReferences.isEveryIdValid() ) { + throw new FOPException("The following id's were referenced but not found: "+idReferences.getInvalidIds()+"\n"); + } + + MessageHandler.logln("writing out PDF"); + this.pdfDoc.output(writer); + } + + /** + * add a line to the current stream + * + * @param x1 the start x location in millipoints + * @param y1 the start y location in millipoints + * @param x2 the end x location in millipoints + * @param y2 the end y location in millipoints + * @param th the thickness in millipoints + * @param r the red component + * @param g the green component + * @param b the blue component + */ + protected void addLine(int x1, int y1, int x2, int y2, int th, + PDFPathPaint stroke) + { + currentStream.add("ET\nq\n" + + stroke.getColorSpaceOut(false) + + (x1/1000f) + " "+ (y1/1000f) + " m " + + (x2/1000f) + " "+ (y2/1000f) + " l " + + (th / 1000f) + " w S\n" + + "Q\nBT\n"); + } + + /** + * add a rectangle to the current stream + * + * @param x the x position of left edge in millipoints + * @param y the y position of top edge in millipoints + * @param w the width in millipoints + * @param h the height in millipoints + * @param stroke the stroke color/gradient + */ + protected void addRect(int x, int y, int w, int h, + PDFPathPaint stroke) { + currentStream.add("ET\nq\n" + + stroke.getColorSpaceOut(false) + + (x/1000f) + " " + (y/1000f) + " " + + (w/1000f) + " " + (h/1000f) + " re s\n" + + "Q\nBT\n"); + } + + /** + * add a filled rectangle to the current stream + * + * @param x the x position of left edge in millipoints + * @param y the y position of top edge in millipoints + * @param w the width in millipoints + * @param h the height in millipoints + * @param fill the fill color/gradient + * @param stroke the stroke color/gradient + */ + protected void addRect(int x, int y, int w, int h, + PDFPathPaint stroke, + PDFPathPaint fill) { + currentStream.add("ET\nq\n" + + fill.getColorSpaceOut(true) + + stroke.getColorSpaceOut(false) + + (x/1000f) + " " + (y/1000f) + " " + + (w/1000f) + " " + (h/1000f) + " re b\n" + + "Q\nBT\n"); + } + + /** + * render area container to PDF + * + * @param area the area container to render + */ + public void renderAreaContainer(AreaContainer area) { + + int saveY = this.currentYPosition; + int saveX = this.currentAreaContainerXPosition; + + if (area.getPosition() == Position.ABSOLUTE) { + // Y position is computed assuming positive Y axis, adjust for negative postscript one + this.currentYPosition = area.getYPosition() - 2 * area.getPaddingTop() - 2 * area.borderWidthTop; + this.currentAreaContainerXPosition = area.getXPosition(); + } else if (area.getPosition() == Position.RELATIVE) { + this.currentYPosition -= area.getYPosition(); + this.currentAreaContainerXPosition += area.getXPosition(); + } else if (area.getPosition() == Position.STATIC) { + this.currentYPosition -= area.getPaddingTop() + area.borderWidthTop; + this.currentAreaContainerXPosition += area.getPaddingLeft() + area.borderWidthLeft; + } + + this.currentXPosition = this.currentAreaContainerXPosition; + doFrame(area); + + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Box b = (Box) e.nextElement(); + b.render(this); + } + if (area.getPosition() != Position.STATIC) { + this.currentYPosition = saveY; + this.currentAreaContainerXPosition = saveX; + } else + this.currentYPosition -= area.getHeight(); + } + + private void doFrame(Area area) { + int w, h; + int rx = this.currentAreaContainerXPosition; + w = area.getContentWidth(); + if (area instanceof BlockArea) + rx += ((BlockArea)area).getStartIndent(); + h = area.getContentHeight(); + int ry = this.currentYPosition; + ColorType bg = area.getBackgroundColor(); + + rx = rx - area.getPaddingLeft(); + ry = ry + area.getPaddingTop(); + w = w + area.getPaddingLeft() + area.getPaddingRight(); + h = h + area.getPaddingTop() + area.getPaddingBottom(); + + // I'm not sure I should have to check for bg being null + // but I do + if ((bg != null) && (bg.alpha() == 0)) { + this.addRect(rx, ry, w, -h, + new PDFColor(bg), + new PDFColor(bg)); + } + + rx = rx - area.borderWidthLeft; + ry = ry + area.borderWidthTop; + w = w + area.borderWidthLeft + area.borderWidthRight; + h = h + area.borderWidthTop + area.borderWidthBottom; + + if (area.borderWidthTop != 0) + addLine(rx, ry, rx + w, ry, + area.borderWidthTop, + new PDFColor(area.borderColorTop)); + if (area.borderWidthLeft != 0) + addLine(rx, ry, rx, ry - h, + area.borderWidthLeft, + new PDFColor(area.borderColorLeft)); + if (area.borderWidthRight != 0) + addLine(rx + w, ry, rx + w, ry - h, + area.borderWidthRight, + new PDFColor(area.borderColorRight)); + if (area.borderWidthBottom != 0) + addLine(rx, ry - h, rx + w, ry - h, + area.borderWidthBottom, + new PDFColor(area.borderColorBottom)); + + } + + + /** + * render block area to PDF + * + * @param area the block area to render + */ + public void renderBlockArea(BlockArea area) { + doFrame(area); + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Box b = (Box) e.nextElement(); + b.render(this); + } + } + + /** + * render display space to PDF + * + * @param space the display space to render + */ + public void renderDisplaySpace(DisplaySpace space) { + int d = space.getSize(); + this.currentYPosition -= d; + } + + /** + * render image area to PDF + * + * @param area the image area to render + */ + public void renderImageArea(ImageArea area) { + // adapted from contribution by BoBoGi + int x = this.currentAreaContainerXPosition + + area.getXOffset(); + int y = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + + this.currentYPosition -= h; + + FopImage img = area.getImage(); + + int xObjectNum = this.pdfDoc.addImage(img); + + currentStream.add("ET\nq\n" + (((float) w) / 1000f) + " 0 0 " + + (((float) h) / 1000f) + " " + + (((float) x) / 1000f) + " " + + (((float) (y - h)) / 1000f) + " cm\n" + + "/Im" + xObjectNum + " Do\nQ\nBT\n"); + } + + /** render a foreign object area */ + public void renderForeignObjectArea(ForeignObjectArea area) + { + // if necessary need to scale and align the content + this.currentXPosition = this.currentXPosition + area.getXOffset(); + this.currentYPosition = this.currentYPosition; + switch(area.getAlign()) { + case TextAlign.START: + break; + case TextAlign.END: + break; + case TextAlign.CENTER: + case TextAlign.JUSTIFY: + break; + } + switch(area.getVerticalAlign()) { + case VerticalAlign.BASELINE: + break; + case VerticalAlign.MIDDLE: + break; + case VerticalAlign.SUB: + break; + case VerticalAlign.SUPER: + break; + case VerticalAlign.TEXT_TOP: + break; + case VerticalAlign.TEXT_BOTTOM: + break; + case VerticalAlign.TOP: + break; + case VerticalAlign.BOTTOM: + break; + } + // in general the content will not be text + currentStream.add("ET\n"); + // align and scale + currentStream.add("q\n"); + switch(area.scalingMethod()) { + case Scaling.UNIFORM: + break; + case Scaling.NON_UNIFORM: + break; + } + // if the overflow is auto (default), scroll or visible + // then the contents should not be clipped, since this + // is considered a printing medium. + switch(area.getOverflow()) { + case Overflow.VISIBLE: + case Overflow.SCROLL: + case Overflow.AUTO: + break; + case Overflow.HIDDEN: + break; + } + area.getObject().render(this); + currentStream.add("Q\n"); + currentStream.add("BT\n"); + this.currentXPosition += area.getEffectiveWidth(); + this.currentYPosition -= area.getEffectiveHeight(); + } + + /** + * render SVG area to PDF + * + * @param area the SVG area to render + */ + public void renderSVGArea(SVGArea area) { + int x = this.currentXPosition; + int y = this.currentYPosition; + SVGSVGElement svg = area.getSVGDocument().getRootElement(); + int w = (int)(svg.getWidth().getBaseVal().getValue() * 1000); + int h = (int)(svg.getHeight().getBaseVal().getValue() * 1000); + + /* + * Clip to the svg area. + * Note: To have the svg overlay (under) a text area then use + * an fo:block-container + */ + currentStream.add("q\n"); + currentStream.add(x / 1000f + " " + y / 1000f + " m\n"); + currentStream.add((x + w) / 1000f + " " + y / 1000f + " l\n"); + currentStream.add((x + w) / 1000f + " " + (y - h) / 1000f + " l\n"); + currentStream.add(x / 1000f + " " + (y - h) / 1000f + " l\n"); + currentStream.add("h\n"); + currentStream.add("W\n"); + currentStream.add("n\n"); + // transform so that the coordinates (0,0) is from the top left + // and positive is down and to the right + currentStream.add(1 + " " + 0 + " " + 0 + " " + (-1) + " " + x / 1000f + " " + y / 1000f + " cm\n"); + + // TODO - translate and clip to viewbox + + renderSVG(area.getFontState(), svg, x, y); + + currentStream.add("Q\n"); + } + + /** + * render inline area to PDF + * + * @param area inline area to render + */ + public void renderInlineArea(InlineArea area) { + char ch; + StringBuffer pdf = new StringBuffer(); + + String name = area.getFontState().getFontName(); + int size = area.getFontState().getFontSize(); + + PDFColor theAreaColor = new PDFColor( + (double)area.getRed(), + (double)area.getGreen(), + (double)area.getBlue() ); + + if ((!name.equals(this.currentFontName)) + || (size != this.currentFontSize)) { + this.currentFontName = name; + this.currentFontSize = size; + pdf = pdf.append("/" + name + " " + (size/1000) + " Tf\n"); + } + + //if (theAreaColor.isEquivalent(this.currentFill)) { + this.currentFill = theAreaColor; + + pdf = pdf.append(this.currentFill.getColorSpaceOut(true)); + //} + + int rx = this.currentXPosition; + int bl = this.currentYPosition; + + pdf = pdf.append("1 0 0 1 " + +(rx/1000f) + " " + (bl/1000f) + + " Tm ("); + + String s; + if ( area.getPageNumberID()!=null ) { // this text is a page number, so resolve it + s = idReferences.getPageNumber(area.getPageNumberID()); + if(s==null) + { + s=""; + } + } + else { + s = area.getText(); + } + + int l = s.length(); + + for (int i=0; i < l; i++) { + ch = s.charAt(i); + if (ch > 127) { + pdf = pdf.append("\\"); + pdf = pdf.append(Integer.toOctalString((int)ch)); + } else { + switch (ch) { + case '(' : pdf = pdf.append("\\("); break; + case ')' : pdf = pdf.append("\\)"); break; + case '\\' : pdf = pdf.append("\\\\"); break; + default : pdf = pdf.append(ch); break; + } + } + } + pdf = pdf.append(") Tj\n"); + + currentStream.add(pdf.toString()); + + this.currentXPosition += area.getContentWidth(); + } + + /** + * render inline space to PDF + * + * @param space space to render + */ + public void renderInlineSpace(InlineSpace space) { + this.currentXPosition += space.getSize(); + } + + /** + * render line area to PDF + * + * @param area area to render + */ + public void renderLineArea(LineArea area) { + int rx = this.currentAreaContainerXPosition + + area.getStartIndent(); + int ry = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + + this.currentYPosition -= area.getPlacementOffset(); + this.currentXPosition = rx; + + int bl = this.currentYPosition; + + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Box b = (Box) e.nextElement(); + this.currentYPosition = ry - area.getPlacementOffset(); + b.render(this); + } + + this.currentYPosition = ry-h; + this.currentXPosition = rx; + } + + /** + * render page into PDF + * + * @param page page to render + */ + public void renderPage(Page page) { + AreaContainer body, before, after; + + currentStream = this.pdfDoc.makeStream(); + body = page.getBody(); + before = page.getBefore(); + after = page.getAfter(); + + this.currentFontName = ""; + this.currentFontSize = 0; + + currentStream.add("BT\n"); + + renderAreaContainer(body); + + if (before != null) { + renderAreaContainer(before); + } + + if (after != null) { + renderAreaContainer(after); + } + + currentStream.add("ET\n"); + + currentPage = this.pdfDoc.makePage(this.pdfResources, currentStream, + page.getWidth()/1000, + page.getHeight()/1000, page); + + if (page.hasLinks()) { + currentAnnotList = this.pdfDoc.makeAnnotList(); + currentPage.setAnnotList(currentAnnotList); + + Enumeration e = page.getLinkSets().elements(); + while (e.hasMoreElements()) { + LinkSet linkSet = (LinkSet) e.nextElement(); + + linkSet.align(); + String dest = linkSet.getDest(); + int linkType = linkSet.getLinkType(); + Enumeration f = linkSet.getRects().elements(); + while (f.hasMoreElements()) { + LinkedRectangle lrect = (LinkedRectangle) f.nextElement(); + currentAnnotList.addLink( + this.pdfDoc.makeLink(lrect.getRectangle(), dest, linkType)); + } + } + } else { + // just to be on the safe side + currentAnnotList = null; + } + } + + /** + * render rule area into PDF + * + * @param area area to render + */ + public void renderRuleArea(RuleArea area) { + int rx = this.currentAreaContainerXPosition + + area.getStartIndent(); + int ry = this.currentYPosition; + int w = area.getContentWidth(); + int h = area.getHeight(); + int th = area.getRuleThickness(); + + addLine(rx, ry, rx+w, ry, th, new PDFColor(area.getRed(), area.getGreen(),area.getBlue())); + } + + /** + * set up the font info + * + * @param fontInfo font info to set up + */ + public void setupFontInfo(FontInfo fontInfo) { + FontSetup.setup(fontInfo); + FontSetup.addToResources(this.pdfDoc, fontInfo); + } + + // SVG Stuff + + public void renderGArea(FontState fontState, SVGGElement area, int posx, int posy) + { + NodeList nl = area.getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGElement) { + renderElement(fontState, (SVGElement)n, posx, posy); + } + } + } + + void handleSwitchElement(FontState fontState, int posx, int posy, SVGSwitchElement ael) + { + SVGList relist = ael.getRequiredExtensions(); + SVGList rflist = ael.getRequiredFeatures(); + SVGList sllist = ael.getSystemLanguage(); + org.w3c.dom.NodeList nl = ael.getChildNodes(); +choices: for(int count = 0; count < nl.getLength(); count++) { + org.w3c.dom.Node n = nl.item(count); + // only render the first child that has a valid + // test data + if(n instanceof GraphicElement) { + GraphicElement graphic = (GraphicElement)n; + SVGList grelist = graphic.getRequiredExtensions(); + // if null it evaluates to true + if(grelist != null) { + if(grelist.getNumberOfItems() == 0) { + if((relist != null) && relist.getNumberOfItems() != 0) { + continue choices; + } + } + for(int i = 0; i < grelist.getNumberOfItems(); i++) { + String str = (String)grelist.getItem(i); + if(relist == null) { + // use default extension set + // currently no extensions are supported +// if(!(str.equals("http:// ??"))) { + continue choices; +// } + } else { + } + } + } + SVGList grflist = graphic.getRequiredFeatures(); + if(grflist != null) { + if(grflist.getNumberOfItems() == 0) { + if((rflist != null) && rflist.getNumberOfItems() != 0) { + continue choices; + } + } + for(int i = 0; i < grflist.getNumberOfItems(); i++) { + String str = (String)grflist.getItem(i); + if(rflist == null) { + // use default feature set + if(!(str.equals("org.w3c.svg.static") + || str.equals("org.w3c.dom.svg.all"))) { + continue choices; + } + } else { + boolean found = false; + for(int j = 0; j < rflist.getNumberOfItems(); j++) { + if(rflist.getItem(j).equals(str)) { + found = true; + break; + } + } + if(!found) + continue choices; + } + } + } + SVGList gsllist = graphic.getSystemLanguage(); + if(gsllist != null) { + if(gsllist.getNumberOfItems() == 0) { + if((sllist != null) && sllist.getNumberOfItems() != 0) { + continue choices; + } + } + for(int i = 0; i < gsllist.getNumberOfItems(); i++) { + String str = (String)gsllist.getItem(i); + if(sllist == null) { + // use default feature set + if(!(str.equals("en"))) { + continue choices; + } + } else { + boolean found = false; + for(int j = 0; j < sllist.getNumberOfItems(); j++) { + if(sllist.getItem(j).equals(str)) { + found = true; + break; + } + } + if(!found) + continue choices; + } + } + } + renderElement(fontState, (SVGElement)n, posx, posy); + // only render the first valid one + break; + } + } + } + + /** + * add a line to the current stream + * + * @param x1 the start x location in millipoints + * @param y1 the start y location in millipoints + * @param x2 the end x location in millipoints + * @param y2 the end y location in millipoints + * @param th the thickness in millipoints + * @param r the red component + * @param g the green component + * @param b the blue component + */ + protected void addLine(float x1, float y1, float x2, float y2, DrawingInstruction di) + { + String str; + str = "" + x1 + " " + y1 + " m " + + x2 + " " + y2 + " l"; + if(di != null && di.fill) + currentStream.add(str + " f\n"); // ?? + currentStream.add(str + " S\n"); + } + + protected void addCircle(float cx, float cy, float r, DrawingInstruction di) + { + String str; + str = "" + cx + " " + (cy - r) + " m\n" + + "" + (cx + 21 * r / 40f) + " " + (cy - r) + " " + (cx + r) + " " + (cy - 21 * r / 40f) + " " + (cx + r) + " " + cy + " c\n" + + "" + (cx + r) + " " + (cy + 21 * r / 40f) + " " + (cx + 21 * r / 40f) + " " + (cy + r) + " " + cx + " " + (cy + r) + " c\n" + + "" + (cx - 21 * r / 40f) + " " + (cy + r) + " " + (cx - r) + " " + (cy + 21 * r / 40f) + " " + (cx - r) + " " + cy + " c\n" + + "" + (cx - r) + " " + (cy - 21 * r / 40f) + " " + (cx - 21 * r / 40f) + " " + (cy - r) + " " + cx + " " + (cy - r) + " c\n"; + + currentStream.add(str); + doDrawing(di); + } + + protected void addEllipse(float cx, float cy, float rx, float ry, DrawingInstruction di) + { + String str; + str = "" + cx + " " + (cy - ry) + " m\n" + + "" + (cx + 21 * rx / 40f) + " " + (cy - ry) + " " + (cx + rx) + " " + (cy - 21 * ry / 40f) + " " + (cx + rx) + " " + cy + " c\n" + + "" + (cx + rx) + " " + (cy + 21 * ry / 40f) + " " + (cx + 21 * rx / 40f) + " " + (cy + ry) + " " + cx + " " + (cy + ry) + " c\n" + + "" + (cx - 21 * rx / 40f) + " " + (cy + ry) + " " + (cx - rx) + " " + (cy + 21 * ry / 40f) + " " + (cx - rx) + " " + cy + " c\n" + + "" + (cx - rx) + " " + (cy - 21 * ry / 40f) + " " + (cx - 21 * rx / 40f) + " " + (cy - ry) + " " + cx + " " + (cy - ry) + " c\n"; + currentStream.add(str); + doDrawing(di); + } + + /** + * add a filled rectangle to the current stream + * + * @param x the x position of left edge in millipoints + * @param y the y position of top edge in millipoints + * @param w the width in millipoints + * @param h the height in millipoints + * @param r the red component of edges + * @param g the green component of edges + * @param b the blue component of edges + * @param fr the red component of the fill + * @param fg the green component of the fill + * @param fb the blue component of the fill + */ + protected void addRect(float x, float y, float w, float h, float rx, float ry, DrawingInstruction di) + { + String str = ""; + if(rx == 0.0 && ry == 0.0) { + str = "" + x + " " + y + " " + w + " " + h + " re\n"; + } else { + if(ry == 0.0) + ry = rx; + if(rx > w / 2.0f) + rx = w / 2.0f; + if(ry > h / 2.0f) + ry = h / 2.0f; + str = "" + (x + rx) + " " + y + " m\n"; + str += "" + (x + w - rx) + " " + y + " l\n"; + str += "" + (x + w - 19 * rx / 40) + " " + y + " " + (x + w) + " " + (y + 19 * ry / 40) + " " + (x + w) + " " + (y + ry) + " c\n"; + str += "" + (x + w) + " " + (y + h - ry) + " l\n"; + str += "" + (x + w) + " " + (y + h - 19 * ry / 40) + " " + (x + w - 19 * rx / 40) + " " + (y + h) + " " + (x + w - rx) + " " + (y + h) + " c\n"; + str += "" + (x + rx) + " " + (y + h) + " l\n"; + str += "" + (x + 19 * rx / 40) + " " + (y + h) + " " + x + " " + (y + h - 19 * ry / 40) + " " + x + " " + (y + h - ry) + " c\n"; + str += "" + x + " " + (y + ry) + " l\n"; + str += "" + x + " " + (y + 19 * ry / 40) + " " + (x + 19 * rx / 40) + " " + y + " " + (x + rx) + " " + y + " c\n"; + } + currentStream.add(str); + doDrawing(di); + } + + protected void addPath(Vector points, int posx, int posy, DrawingInstruction di) + { + SVGPathSegImpl pathmoveto = null; + float lastx = 0; + float lasty = 0; + for(Enumeration e = points.elements(); e.hasMoreElements(); ) { + SVGPathSegImpl pc = (SVGPathSegImpl)e.nextElement(); + float[] vals = pc.getValues(); + float lastcx = 0; + float lastcy = 0; + switch(pc.getPathSegType()) { + case SVGPathSeg.PATHSEG_MOVETO_ABS: + pathmoveto = pc; + lastx = vals[0]; + lasty = vals[1]; + currentStream.add(lastx + " " + lasty + " m\n"); + break; + case SVGPathSeg.PATHSEG_MOVETO_REL: + if(pathmoveto == null) { + lastx = vals[0]; + lasty = vals[1]; + pathmoveto = pc; + currentStream.add(lastx + " " + lasty + " m\n"); + } else { + lastx += vals[0]; + lasty += vals[1]; + currentStream.add(lastx + " " + lasty + " l\n"); + } + break; + case SVGPathSeg.PATHSEG_LINETO_ABS: + lastx = vals[0]; + lasty = vals[1]; + currentStream.add(lastx + " " + lasty + " l\n"); + break; + case SVGPathSeg.PATHSEG_LINETO_REL: + lastx += vals[0]; + lasty += vals[1]; + currentStream.add(lastx + " " + lasty + " l\n"); + break; + case SVGPathSeg.PATHSEG_LINETO_VERTICAL_ABS: + lasty = vals[0]; + currentStream.add(lastx + " " + lasty + " l\n"); + break; + case SVGPathSeg.PATHSEG_LINETO_VERTICAL_REL: + lasty += vals[0]; + currentStream.add(lastx + " " + lasty + " l\n"); + break; + case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_ABS: + lastx = vals[0]; + currentStream.add(lastx + " " + lasty + " l\n"); + break; + case SVGPathSeg.PATHSEG_LINETO_HORIZONTAL_REL: + lastx += vals[0]; + currentStream.add(lastx + " " + lasty + " l\n"); + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_ABS: + lastx = vals[4]; + lasty = vals[5]; + lastcx = vals[2]; + lastcy = vals[3]; + currentStream.add((vals[0]) + " " + (vals[1]) + " " + + (vals[2]) + " " + (vals[3]) + " " + + lastx + " " + lasty + + " c\n"); + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_REL: + currentStream.add((vals[0] + lastx) + " " + (vals[1] + lasty) + " " + + (vals[2] + lastx) + " " + (vals[3] + lasty) + " " + + (vals[4] + lastx) + " " + (vals[5] + lasty) + + " c\n"); + lastcx = vals[2] + lastx; + lastcy = vals[3] + lasty; + lastx += vals[4]; + lasty += vals[5]; + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_ABS: + if(lastcx == 0) { + lastcx = lastx; + } + if(lastcy == 0) { + lastcy = lasty; + } + lastx = vals[2]; + lasty = vals[3]; + currentStream.add(lastcx + " " + lastcy + " " + + (vals[0]) + " " + (vals[1]) + " " + + lastx + " " + lasty + + " c\n"); + break; + case SVGPathSeg.PATHSEG_CURVETO_CUBIC_SMOOTH_REL: + if(lastcx == 0) { + lastcx = lastx; + } + if(lastcy == 0) { + lastcy = lasty; + } + currentStream.add(lastcx + " " + lastcy + " " + + (vals[0] + lastx) + " " + (vals[1] + lasty) + " " + + (vals[2] + lastx) + " " + (vals[3] + lasty) + + " c\n"); + lastx += vals[2]; + lasty += vals[3]; + break; + case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_ABS: + if(lastcx == 0) { + lastcx = lastx; + } + if(lastcy == 0) { + lastcy = lasty; + } + lastx = vals[0]; + lasty = vals[1]; + lastcx = 0; + lastcy = 0; + currentStream.add(lastcx + " " + lastcy + " " + + lastx + " " + lasty + + " y\n"); + break; + case SVGPathSeg.PATHSEG_CURVETO_QUADRATIC_REL: + if(lastcx == 0) { + lastcx = lastx; + } + if(lastcy == 0) { + lastcy = lasty; + } + currentStream.add(lastcx + " " + lastcy + " " + + (vals[0] + lastx) + " " + (vals[1] + lasty) + + " y\n"); + lastcx = 0; + lastcy = 0; + lastx += vals[0]; + lasty += vals[1]; + break; + // get angle between the two points + // then get angle of points to centre (ie. both points are on the + // apogee and perigee of the ellipse) + // then work out the direction from flags + case SVGPathSeg.PATHSEG_ARC_ABS: + { + double rx = vals[0]; + double ry = vals[1]; + double theta = vals[2]; + boolean largearcflag = (vals[3] == 1.0); + boolean sweepflag = (vals[4] == 1.0); + + double angle = Math.atan((vals[6] - lasty) / (vals[5] - lastx)); + double relangle = Math.acos(rx / Math.sqrt((vals[6] - lasty) * (vals[6] - lasty) + (vals[5] - lastx) * (vals[5] - lastx))); + double absangle = angle + relangle; + // change sign depending on flags + double contrx1; + double contry1; + double contrx2; + double contry2; + if(largearcflag) { + if(sweepflag) { + contrx1 = lastx - rx * Math.cos(absangle); + contry1 = lasty + rx * Math.sin(absangle); + contrx2 = vals[5] + ry * Math.cos(absangle); + contry2 = vals[6] + ry * Math.sin(absangle); + } else { + contrx1 = lastx - rx * Math.cos(absangle); + contry1 = lasty - rx * Math.sin(absangle); + contrx2 = vals[5] + ry * Math.cos(absangle); + contry2 = vals[6] - ry * Math.sin(absangle); + } + } else { + if(sweepflag) { + contrx1 = lastx + rx * Math.cos(absangle); + contry1 = lasty + rx * Math.sin(absangle); + contrx2 = contrx1; + contry2 = contry1; + } else { + contrx1 = lastx + ry * Math.cos(absangle); + contry1 = lasty - ry * Math.sin(absangle); + contrx2 = contrx1; + contry2 = contry1; + } + } + + double cx = lastx; + double cy = lasty; + currentStream.add(contrx1 + " " + contry1 + " " + + contrx2 + " " + contry2 + " " + + vals[5] + " " + vals[6] + + " c\n"); + lastcx = 0; //?? + lastcy = 0; //?? + lastx = vals[5]; + lasty = vals[6]; + } + break; + case SVGPathSeg.PATHSEG_ARC_REL: + { + double rx = vals[0]; + double ry = vals[1]; + double theta = vals[2]; + boolean largearcflag = (vals[3] == 1.0); + boolean sweepflag = (vals[4] == 1.0); + + double angle = Math.atan(vals[6] / vals[5]); + double relangle = Math.atan(ry / rx); +// System.out.println((theta * Math.PI / 180f) + ":" + relangle + ":" + largearcflag + ":" + sweepflag); + double absangle = (theta * Math.PI / 180f);//angle + relangle; + // change sign depending on flags + double contrx1; + double contry1; + double contrx2; + double contry2; + if(largearcflag) { + // in a large arc we need to do at least 2 and a bit + // segments or curves. + if(sweepflag) { + contrx1 = lastx + rx * Math.cos(absangle); + contry1 = lasty + rx * Math.sin(absangle); + contrx2 = lastx + vals[5] + ry * Math.cos(absangle); + contry2 = lasty + vals[6] - ry * Math.sin(absangle); + } else { + contrx1 = lastx + rx * Math.sin(absangle); + contry1 = lasty + rx * Math.cos(absangle); + contrx2 = lastx + vals[5] + ry * Math.cos(absangle); + contry2 = lasty + vals[6] + ry * Math.sin(absangle); + } + } else { + // only need at most two segments + if(sweepflag) { + contrx1 = lastx + rx * Math.cos(absangle); + contry1 = lasty - rx * Math.sin(absangle); + contrx2 = contrx1; + contry2 = contry1; + } else { + contrx1 = lastx - ry * Math.cos(absangle); + contry1 = lasty + ry * Math.sin(absangle); + contrx2 = contrx1; + contry2 = contry1; + } + } + //System.out.println(contrx1 + ":" + contry1 + ":" + contrx2 + ":" + contry2); + + double cx = lastx; + double cy = lasty; + currentStream.add(contrx1 + " " + contry1 + " " + + contrx2 + " " + contry2 + " " + + (vals[5] + lastx) + " " + (vals[6] + lasty) + + " c\n"); + + lastcx = 0; //?? + lastcy = 0; //?? + lastx += vals[5]; + lasty += vals[6]; + } + break; + case SVGPathSeg.PATHSEG_CLOSEPATH: + currentStream.add("h\n"); + break; + } + } + doDrawing(di); + } + + protected void addPolyline(Vector points, int posx, int posy, DrawingInstruction di, boolean close) + { + PathPoint pc; + float lastx = 0; + float lasty = 0; + Enumeration e = points.elements(); + if(e.hasMoreElements()) { + pc = (PathPoint)e.nextElement(); + lastx = pc.x; + lasty = pc.y; + currentStream.add(lastx + " " + lasty + " m\n"); + } + while(e.hasMoreElements()) { + pc = (PathPoint)e.nextElement(); + lastx = pc.x; + lasty = pc.y; + currentStream.add(lastx + " " + lasty + " l\n"); + } + if(close) + currentStream.add("h\n"); + doDrawing(di); + } + + protected void doDrawing(DrawingInstruction di) + { + if(di == null) { + currentStream.add("S\n"); + } else { + if(di.fill) { + if(di.stroke) { + if(!di.nonzero) + currentStream.add("B*\n"); + else + currentStream.add("B\n"); + } else { + if(!di.nonzero) + currentStream.add("f*\n"); + else + currentStream.add("f\n"); + } + } else { +// if(di.stroke) + currentStream.add("S\n"); + } + } + } + + public void renderImage(FontState fontState, String href, float x, float y, float width, float height) + { + try { + if(href.indexOf(":") == -1) { + href = "file:" + href; + } + FopImage img = FopImageFactory.Make(href); + if(img instanceof SVGImage) { + SVGSVGElement svg = ((SVGImage)img).getSVGDocument().getRootElement(); + currentStream.add("q\n" + width / svg.getWidth().getBaseVal().getValue() + " 0 0 " + height / svg.getHeight().getBaseVal().getValue() + " 0 0 cm\n"); + renderSVG(fontState, svg, (int)x * 1000, (int)y * 1000); + currentStream.add("Q\n"); +// renderSVG(svg); + } else if(img != null) { + int xObjectNum = this.pdfDoc.addImage(img); + currentStream.add("q\n1 0 0 -1 " + 0 + + " " + (2 * y + height) + " cm\n" + width + " 0 0 " + + height + " " + + x + " " + + y + " cm\n" + + "/Im" + xObjectNum + " Do\nQ\n"); +// img.close(); + } + } catch(Exception e) { +e.printStackTrace(); + System.err.println("could not add image to SVG: " + href); + } + } + + void renderSVG(FontState fontState, SVGSVGElement svg, int x, int y) + { + NodeList nl = svg.getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGElement) { + renderElement(fontState, (SVGElement)n, x, y); + } + } + } + + /** + * A symbol has a viewbox and preserve aspect ratio. + */ + void renderSymbol(FontState fontState, SVGSymbolElement symbol, int x, int y) + { + NodeList nl = symbol.getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof SVGElement) { + renderElement(fontState, (SVGElement)n, x, y); + } + } + } + + void handleGradient(String sp, DrawingInstruction di, boolean fill, SVGElement area) + { + // should be a url to a gradient + String url = (String)sp; + if(url.startsWith("url(")) { + String address; + int b1 = url.indexOf("("); + int b2 = url.indexOf(")"); + address = url.substring(b1 + 1, b2); + SVGElement gi = null; + gi = locateDef(address, area); + if(gi instanceof SVGLinearGradientElement) { + SVGLinearGradientElement linear = (SVGLinearGradientElement)gi; + handleLinearGradient(linear, di, fill, area); + } else if(gi instanceof SVGRadialGradientElement) { + SVGRadialGradientElement radial = (SVGRadialGradientElement)gi; + handleRadialGradient(radial, di, fill, area); + } else { + System.err.println("WARNING Invalid fill reference :" + gi + ":" + address); + } + } + } + + protected void handleLinearGradient(SVGLinearGradientElement linear, DrawingInstruction di, boolean fill, SVGElement area) + { + Vector theCoords = null; +// if(area instanceof GraphicElement) { +// SVGRect rect = ((GraphicElement)area).getBBox(); +// if(rect != null) { + theCoords = new Vector(); + theCoords.addElement(new Double(currentXPosition / 1000f + + linear.getX1().getBaseVal().getValue())); + theCoords.addElement(new Double(currentYPosition / 1000f + - linear.getY1().getBaseVal().getValue())); + theCoords.addElement(new Double(currentXPosition / 1000f + + linear.getX2().getBaseVal().getValue())); + theCoords.addElement(new Double(currentYPosition / 1000f + - linear.getY2().getBaseVal().getValue())); +System.out.println("coords:" + theCoords); +System.out.println(1 + " " + 0 + " " + 0 + " " + (-1) + " " + currentXPosition / 1000f + " " + currentYPosition / 1000f + " cm\n"); +// } +// } +// if(theCoords == null) { +// theCoords = new Vector(); +// theCoords.addElement(new Double(linear.getX1().getBaseVal().getValue())); +// theCoords.addElement(new Double(linear.getY1().getBaseVal().getValue())); +// theCoords.addElement(new Double(linear.getX2().getBaseVal().getValue())); +// theCoords.addElement(new Double(linear.getY2().getBaseVal().getValue())); +// } + + Vector theExtend = new Vector(); + theExtend.addElement(new Boolean(true)); + theExtend.addElement(new Boolean(true)); + + Vector theDomain = new Vector(); + theDomain.addElement(new Double(0)); + theDomain.addElement(new Double(1)); + + Vector theEncode = new Vector(); + theEncode.addElement(new Double(0)); + theEncode.addElement(new Double(1)); + theEncode.addElement(new Double(0)); + theEncode.addElement(new Double(1)); + + Vector theBounds = new Vector(); + theBounds.addElement(new Double(0)); + theBounds.addElement(new Double(1)); + + Vector theFunctions = new Vector(); + + NodeList nl = linear.getChildNodes(); + Vector someColors = new Vector(); + float lastoffset = 0; + Vector lastVector = null; + SVGStopElementImpl stop; + if(nl.getLength() == 0) { + // the color should be "none" + if(fill) + di.fill = false; + else + di.stroke = false; + return; + } else if(nl.getLength() == 1) { + stop = (SVGStopElementImpl)nl.item(0); + CSSValue cv = stop.getPresentationAttribute("stop-color"); + if(cv == null) { + // maybe using color + cv = stop.getPresentationAttribute("color"); + } + if(cv == null) { + // problems + System.err.println("no stop-color or color in stop element"); + return; + } + PDFColor color = new PDFColor(0, 0, 0); + if(cv != null && cv.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)cv).getPrimitiveType() == CSSPrimitiveValue.CSS_RGBCOLOR) { + RGBColor col = ((CSSPrimitiveValue)cv).getRGBColorValue(); + CSSPrimitiveValue val; + val = col.getRed(); + float red = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getGreen(); + float green = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getBlue(); + float blue = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + color = new PDFColor(red, green, blue); + } + } + currentStream.add(color.getColorSpaceOut(fill)); + if(fill) + di.fill = true; + else + di.stroke = true; + return; + } + for(int count = 0; count < nl.getLength(); count++) { + stop = (SVGStopElementImpl)nl.item(count); + CSSValue cv = stop.getPresentationAttribute("stop-color"); + if(cv == null) { + // maybe using color + cv = stop.getPresentationAttribute("color"); + } + if(cv == null) { + // problems + System.err.println("no stop-color or color in stop element"); + continue; + } + PDFColor color = new PDFColor(0, 0, 0); + if(cv != null && cv.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)cv).getPrimitiveType() == CSSPrimitiveValue.CSS_RGBCOLOR) { + RGBColor col = ((CSSPrimitiveValue)cv).getRGBColorValue(); + CSSPrimitiveValue val; + val = col.getRed(); + float red = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getGreen(); + float green = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getBlue(); + float blue = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + color = new PDFColor(red, green, blue); + currentColour = color; + } + } + float offset = stop.getOffset().getBaseVal(); + Vector colVector = color.getVector(); + // create bounds from last to offset + if(lastVector != null) { + Vector theCzero = lastVector; + Vector theCone = colVector; + PDFFunction myfunc = this.pdfDoc.makeFunction(2, theDomain, null, + theCzero, theCone, 1.0); + theFunctions.addElement(myfunc); + } + lastoffset = offset; + lastVector = colVector; + someColors.addElement(color); + } + ColorSpace aColorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); +/* PDFFunction myfunky = this.pdfDoc.makeFunction(3, + theDomain, null, + theFunctions, null, + theEncode); + PDFShading myShad = null; + myShad = this.pdfDoc.makeShading( + 2, aColorSpace, + null, null, false, + theCoords, null, myfunky,theExtend); + PDFPattern myPat = this.pdfDoc.makePattern(2, myShad, null, null, null);*/ + PDFPattern myPat = this.pdfDoc.createGradient(false, aColorSpace, someColors,null,theCoords); + currentStream.add(myPat.getColorSpaceOut(fill)); + if(fill) + di.fill = true; + else + di.stroke = true; + } + + protected void handleRadialGradient(SVGRadialGradientElement radial, DrawingInstruction di, boolean fill, SVGElement area) + { + ColorSpace aColorSpace = new ColorSpace(ColorSpace.DEVICE_RGB); + org.w3c.dom.NodeList nl = radial.getChildNodes(); + SVGStopElementImpl stop; + if(nl.getLength() == 0) { + // the color should be "none" + if(fill) + di.fill = false; + else + di.stroke = false; + return; + } else if(nl.getLength() == 1) { + stop = (SVGStopElementImpl)nl.item(0); + CSSValue cv = stop.getPresentationAttribute("stop-color"); + if(cv == null) { + // maybe using color + cv = stop.getPresentationAttribute("color"); + } + if(cv == null) { + // problems + System.err.println("no stop-color or color in stop element"); + return; + } + PDFColor color = new PDFColor(0, 0, 0); + if(cv != null && cv.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)cv).getPrimitiveType() == CSSPrimitiveValue.CSS_RGBCOLOR) { + RGBColor col = ((CSSPrimitiveValue)cv).getRGBColorValue(); + CSSPrimitiveValue val; + val = col.getRed(); + float red = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getGreen(); + float green = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getBlue(); + float blue = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + color = new PDFColor(red, green, blue); + } + } + currentStream.add(color.getColorSpaceOut(fill)); + if(fill) + di.fill = true; + else + di.stroke = true; + return; + } + Hashtable table = null; + Vector someColors = new Vector(); + Vector theCoords = new Vector(); + Vector theBounds = new Vector(); + // todo handle gradient units + SVGRect bbox = null; + if(area instanceof SVGRectElement) { + bbox = ((SVGRectElement)area).getBBox(); + } + short units = radial.getGradientUnits().getBaseVal(); + switch(units) { + case SVGUnitTypes.SVG_UNIT_TYPE_OBJECTBOUNDINGBOX: + break; + case SVGUnitTypes.SVG_UNIT_TYPE_UNKNOWN: + default: + } + // the coords should be relative to the current object + // check value types, eg. % + if(bbox != null) { + if(false) { + theCoords.addElement(new Double(bbox.getX() + + radial.getCx().getBaseVal().getValue() * bbox.getWidth())); + theCoords.addElement(new Double(bbox.getY() + + radial.getCy().getBaseVal().getValue() * bbox.getHeight())); + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue() * + bbox.getHeight())); + theCoords.addElement(new Double(bbox.getX() + + radial.getFx().getBaseVal().getValue() * bbox.getWidth())); + theCoords.addElement(new Double(bbox.getY() + + radial.getFy().getBaseVal().getValue() * bbox.getHeight())); + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue() * + bbox.getHeight())); + } else { + theCoords.addElement(new Double(-bbox.getX() + radial.getCx().getBaseVal().getValue())); + theCoords.addElement(new Double(-bbox.getY() + radial.getCy().getBaseVal().getValue())); + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue())); + theCoords.addElement(new Double(-bbox.getX() + radial.getFx().getBaseVal().getValue())); // Fx + theCoords.addElement(new Double(-bbox.getY() + radial.getFy().getBaseVal().getValue())); // Fy + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue())); +/* theCoords.addElement(new Double(bbox.getX() + + radial.getCx().getBaseVal().getValue())); + theCoords.addElement(new Double(bbox.getY() + + radial.getCy().getBaseVal().getValue())); + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue())); + theCoords.addElement(new Double(bbox.getX() + + radial.getFx().getBaseVal().getValue())); + theCoords.addElement(new Double(bbox.getY() + + radial.getFy().getBaseVal().getValue())); + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue()));*/ + } + } else { + theCoords.addElement(new Double(radial.getCx().getBaseVal().getValue())); + theCoords.addElement(new Double(radial.getCy().getBaseVal().getValue())); + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue())); + theCoords.addElement(new Double(radial.getFx().getBaseVal().getValue())); // Fx + theCoords.addElement(new Double(radial.getFy().getBaseVal().getValue())); // Fy + theCoords.addElement(new Double(radial.getR().getBaseVal().getValue())); + } + float lastoffset = 0; + for(int count = 0; count < nl.getLength(); count++) { + stop = (SVGStopElementImpl)nl.item(count); + CSSValue cv = stop.getPresentationAttribute("stop-color"); + if(cv == null) { + // maybe using color + cv = stop.getPresentationAttribute("color"); + } + if(cv == null) { + // problems + System.err.println("no stop-color or color in stop element"); + continue; + } + PDFColor color = new PDFColor(0, 0, 0); + if(cv != null && cv.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)cv).getPrimitiveType() == CSSPrimitiveValue.CSS_RGBCOLOR) { + RGBColor col = ((CSSPrimitiveValue)cv).getRGBColorValue(); + CSSPrimitiveValue val; + val = col.getRed(); + float red = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getGreen(); + float green = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getBlue(); + float blue = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + color = new PDFColor(red, green, blue); + } + } + float offset = stop.getOffset().getBaseVal(); + // create bounds from last to offset + lastoffset = offset; + someColors.addElement(color); + } + PDFPattern myPat = this.pdfDoc.createGradient(true, aColorSpace, someColors,null,theCoords); + + currentStream.add(myPat.getColorSpaceOut(fill)); + if(fill) + di.fill = true; + else + di.stroke = true; + } + + /* + * This sets up the style for drawing objects. + * Should only set style for elements that have changes. + * + */ + // need mask drawing + class DrawingInstruction { + boolean stroke = false; + boolean nonzero = false; // non-zero fill rule "f*", "B*" operator + boolean fill = false; + int linecap = 0; // butt + int linejoin = 0; // miter + int miterwidth = 8; + } + protected DrawingInstruction applyStyle(SVGElement area, SVGStylable style) + { + DrawingInstruction di = new DrawingInstruction(); + CSSValue sp; + sp = style.getPresentationAttribute("fill"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_RGBCOLOR) { + RGBColor col = ((CSSPrimitiveValue)sp).getRGBColorValue(); + CSSPrimitiveValue val; + val = col.getRed(); + float red = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getGreen(); + float green = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getBlue(); + float blue = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + PDFColor fillColour = new PDFColor(red, green, blue); + currentColour = fillColour; + currentStream.add(fillColour.getColorSpaceOut(true)); + di.fill = true; + } else if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_URI) { + // gradient + String str = ((CSSPrimitiveValue)sp).getCssText(); + handleGradient(str, di, true, area); + } else if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + String str = ((CSSPrimitiveValue)sp).getCssText(); + if(str.equals("none")) { + di.fill = false; + } else if(str.equals("currentColor")) { + currentStream.add(currentColour.getColorSpaceOut(true)); + di.fill = true; +// } else { +// handleGradient(str, true, area); + } + } + } + } else { + PDFColor fillColour = new PDFColor(0, 0, 0); + currentStream.add(fillColour.getColorSpaceOut(true)); + } + sp = style.getPresentationAttribute("fill-rule"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + if(sp.getCssText().equals("nonzero")) { + di.nonzero = true; + } + } + } + } else { + } + sp = style.getPresentationAttribute("stroke"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_RGBCOLOR) { + RGBColor col = ((CSSPrimitiveValue)sp).getRGBColorValue(); + CSSPrimitiveValue val; + val = col.getRed(); + float red = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getGreen(); + float green = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + val = col.getBlue(); + float blue = val.getFloatValue(CSSPrimitiveValue.CSS_NUMBER); + PDFColor fillColour = new PDFColor(red, green, blue); + currentStream.add(fillColour.getColorSpaceOut(false)); + di.stroke = true; + } else if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_URI) { + // gradient + String str = ((CSSPrimitiveValue)sp).getCssText(); + handleGradient(str, di, false, area); + } else if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + String str = ((CSSPrimitiveValue)sp).getCssText(); + if(str.equals("none")) { + di.stroke = false; +// } else { +// handleGradient(str, false, area); + } + } + } + } else { + PDFColor fillColour = new PDFColor(0, 0, 0); + currentStream.add(fillColour.getColorSpaceOut(false)); + } + sp = style.getPresentationAttribute("stroke-linecap"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + String str = sp.getCssText(); + // butt, round ,square + if(str.equals("butt")) { + currentStream.add(0 + " J\n"); + } else if(str.equals("round")) { + currentStream.add(1 + " J\n"); + } else if(str.equals("square")) { + currentStream.add(2 + " J\n"); + } + } + } + } else { + } + sp = style.getPresentationAttribute("stroke-linejoin"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + String str = sp.getCssText(); + if(str.equals("miter")) { + currentStream.add(0 + " j\n"); + } else if(str.equals("round")) { + currentStream.add(1 + " j\n"); + } else if(str.equals("bevel")) { + currentStream.add(2 + " j\n"); + } + } + } + } else { + } + sp = style.getPresentationAttribute("stroke-miterlimit"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + float width; + width = ((CSSPrimitiveValue)sp).getFloatValue(CSSPrimitiveValue.CSS_PT); + PDFNumber pdfNumber = new PDFNumber(); + currentStream.add(pdfNumber.doubleOut(width) + " M\n"); + } + } else { + } + sp = style.getPresentationAttribute("stroke-width"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + float width; + width = ((CSSPrimitiveValue)sp).getFloatValue(CSSPrimitiveValue.CSS_PT); + PDFNumber pdfNumber = new PDFNumber(); + currentStream.add(pdfNumber.doubleOut(width) + " w\n"); + } + } + sp = style.getPresentationAttribute("stroke-dasharray"); + if(sp != null) { + if(sp.getValueType() == CSSValue.CSS_VALUE_LIST) { + currentStream.add("[ "); + CSSValueList list = (CSSValueList)sp; + for(int count = 0; count < list.getLength(); count++) { + CSSValue val = list.item(count); + if(val.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + currentStream.add(((CSSPrimitiveValue)val).getFloatValue(CSSPrimitiveValue.CSS_NUMBER) + " "); + } + } + currentStream.add("] "); + sp = style.getPresentationAttribute("stroke-offset"); + if(sp != null && sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + currentStream.add(((CSSPrimitiveValue)sp).getFloatValue(CSSPrimitiveValue.CSS_NUMBER) + " d\n"); + } else { + currentStream.add("0 d\n"); + } + } +/* Vector list; + list = (Vector)sp; + currentStream.add("[ "); + for(Enumeration e = list.elements(); e.hasMoreElements(); ) { + Integer val = (Integer)e.nextElement(); + currentStream.add(val.intValue() + " "); + } + sp = style.getPropertyCSSValue("stroke-offset"); + if(sp != null) { + float width; + width = ((SVGLengthImpl)sp).getValue(); + PDFNumber pdfNumber = new PDFNumber(); + currentStream.add("] " + pdfNumber.doubleOut(width) + " d\n"); + } else { + currentStream.add("] 0 d\n"); + }*/ + + } + sp = style.getPresentationAttribute("mask"); + if(sp != null) { + String maskurl; + if(sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + maskurl = ((CSSPrimitiveValue)sp).getCssText(); +// System.out.println("mask: " + maskurl); + // get def of mask and set mask + SVGElement graph = null; + graph = locateDef(maskurl, area); + if(graph != null) { + System.out.println("mask: " + graph); +// SVGElement parent = graph.getGraphicParent(); +// graph.setParent(area); +// renderElement(svgarea, graph, posx, posy); +// graph.setParent(parent); + } + } + } + } + return di; + } + + // need to transform about the origin of the current object + protected void applyTransform(SVGAnimatedTransformList trans, SVGRect bbox) + { + // need to rotate and scale about the bbox top left + PDFNumber pdfNumber = new PDFNumber(); + if(bbox != null) { +// currentStream.add("1 0 0 1 " + pdfNumber.doubleOut(bbox.getX()) + " " + pdfNumber.doubleOut(bbox.getY()) + " cm\n"); + } + SVGTransformList list = trans.getBaseVal(); + for(int count = 0; count < list.getNumberOfItems(); count++) { + SVGMatrix matrix = ((SVGTransform)list.getItem(count)).getMatrix(); + currentStream.add(pdfNumber.doubleOut(matrix.getA()) + " " + pdfNumber.doubleOut(matrix.getB()) + " " + pdfNumber.doubleOut(matrix.getC()) + + " " + pdfNumber.doubleOut(matrix.getD()) + " " + pdfNumber.doubleOut(matrix.getE()) + " " + pdfNumber.doubleOut(matrix.getF()) + " cm\n"); + } + if(bbox != null) { +// currentStream.add("1 0 0 1 " + pdfNumber.doubleOut(-bbox.getX()) + " " + pdfNumber.doubleOut(-bbox.getY()) + " cm\n"); + } + } + + public void renderElement(FontState fontState, SVGElement area, int posx, int posy) + { + int x = posx; + int y = posy; +// CSSStyleDeclaration style = null; +// if(area instanceof SVGStylable) +// style = ((SVGStylable)area).getStyle(); + DrawingInstruction di = null; + + currentStream.add("q\n"); + if(area instanceof SVGTransformable) { + SVGTransformable tf = (SVGTransformable)area; + SVGAnimatedTransformList trans = tf.getTransform(); + SVGRect bbox = tf.getBBox(); + if(trans != null) { + applyTransform(trans, bbox); + } + } + + if(area instanceof SVGStylable) { + di = applyStyle(area, (SVGStylable)area); + } + + if (area instanceof SVGRectElement) { + SVGRectElement rg = (SVGRectElement)area; + float rectx = rg.getX().getBaseVal().getValue(); + float recty = rg.getY().getBaseVal().getValue(); + float rx = rg.getRx().getBaseVal().getValue(); + float ry = rg.getRy().getBaseVal().getValue(); + float rw = rg.getWidth().getBaseVal().getValue(); + float rh = rg.getHeight().getBaseVal().getValue(); + addRect(rectx, recty, rw, rh, rx, ry, di); + } else if (area instanceof SVGLineElement) { + SVGLineElement lg = (SVGLineElement)area; + float x1 = lg.getX1().getBaseVal().getValue(); + float y1 = lg.getY1().getBaseVal().getValue(); + float x2 = lg.getX2().getBaseVal().getValue(); + float y2 = lg.getY2().getBaseVal().getValue(); + addLine(x1,y1,x2,y2, di); + } else if (area instanceof SVGTextElementImpl) { +// currentStream.add("q\n"); +// currentStream.add(1 + " " + 0 + " " + 0 + " " + 1 + " " + 0 + " " + 0 + " cm\n"); + currentStream.add("BT\n"); + renderText(fontState, (SVGTextElementImpl)area, 0, 0, di); + currentStream.add("ET\n"); +// currentStream.add("Q\n"); + } else if (area instanceof SVGCircleElement) { + SVGCircleElement cg = (SVGCircleElement)area; + float cx = cg.getCx().getBaseVal().getValue(); + float cy = cg.getCy().getBaseVal().getValue(); + float r = cg.getR().getBaseVal().getValue(); + addCircle(cx,cy,r, di); + } else if (area instanceof SVGEllipseElement) { + SVGEllipseElement cg = (SVGEllipseElement)area; + float cx = cg.getCx().getBaseVal().getValue(); + float cy = cg.getCy().getBaseVal().getValue(); + float rx = cg.getRx().getBaseVal().getValue(); + float ry = cg.getRy().getBaseVal().getValue(); + addEllipse(cx,cy,rx,ry, di); + } else if (area instanceof SVGPathElementImpl) { + addPath(((SVGPathElementImpl)area).pathElements, posx, posy, di); + } else if (area instanceof SVGPolylineElementImpl) { + addPolyline(((SVGPolylineElementImpl)area).points, posx, posy, di, false); + } else if (area instanceof SVGPolygonElementImpl) { + addPolyline(((SVGPolygonElementImpl)area).points, posx, posy, di, true); + } else if (area instanceof SVGGElementImpl) { + renderGArea(fontState, (SVGGElementImpl)area, x, y); + } else if(area instanceof SVGUseElementImpl) { + SVGUseElementImpl ug = (SVGUseElementImpl)area; + String ref = ug.link; +// ref = ref.substring(1, ref.length()); + SVGElement graph = null; + graph = locateDef(ref, ug); + if(graph != null) { + // probably not the best way to do this, should be able + // to render without the style being set. +// SVGElement parent = graph.getGraphicParent(); +// graph.setParent(area); + // need to clip (if necessary) to the use area + // the style of the linked element is as if it was + // a direct descendant of the use element. + + // scale to the viewBox + + if(graph instanceof SVGSymbolElement) { + currentStream.add("q\n"); + SVGSymbolElement symbol = (SVGSymbolElement)graph; + SVGRect view = symbol.getViewBox().getBaseVal(); + float usex = ug.getX().getBaseVal().getValue(); + float usey = ug.getY().getBaseVal().getValue(); + float usewidth = ug.getWidth().getBaseVal().getValue(); + float useheight = ug.getHeight().getBaseVal().getValue(); + float scaleX; + float scaleY; + scaleX = usewidth / view.getWidth(); + scaleY = useheight / view.getHeight(); + currentStream.add(usex + " " + usey + " m\n"); + currentStream.add((usex + usewidth) + " " + usey + " l\n"); + currentStream.add((usex + usewidth) + " " + (usey + useheight) + " l\n"); + currentStream.add(usex + " " + (usey + useheight) + " l\n"); + currentStream.add("h\n"); + currentStream.add("W\n"); + currentStream.add("n\n"); + currentStream.add(scaleX + " 0 0 " + scaleY + " " + + usex + " " + usey + " cm\n"); + renderSymbol(fontState, symbol, posx, posy); + currentStream.add("Q\n"); + } else { + renderElement(fontState, graph, posx, posy); + } +// graph.setParent(parent); + } else { + MessageHandler.logln("Use Element: " + ref + " not found"); + } + } else if (area instanceof SVGImageElementImpl) { + SVGImageElementImpl ig = (SVGImageElementImpl)area; + renderImage(fontState, ig.link, ig.x, ig.y, ig.width, ig.height); + } else if (area instanceof SVGSVGElement) { + // the x and y pos will be wrong! + currentStream.add("q\n"); + SVGSVGElement svgel = (SVGSVGElement)area; + float svgx = svgel.getX().getBaseVal().getValue(); + float svgy = svgel.getY().getBaseVal().getValue(); + currentStream.add(1 + " 0 0 " + 1 + " " + + svgx + " " + svgy + " cm\n"); + renderSVG(fontState, svgel, (int)(x + 1000 * svgx), (int)(y + 1000 * svgy)); + currentStream.add("Q\n"); +// } else if (area instanceof SVGSymbolElement) { +// 'symbol' element is not rendered (except by 'use') + } else if (area instanceof SVGAElement) { + SVGAElement ael = (SVGAElement)area; + org.w3c.dom.NodeList nl = ael.getChildNodes(); + for(int count = 0; count < nl.getLength(); count++) { + org.w3c.dom.Node n = nl.item(count); + if(n instanceof SVGElement) { + if(n instanceof GraphicElement) { + SVGRect rect = ((GraphicElement)n).getBBox(); + if(rect != null) { +/* currentAnnotList = this.pdfDoc.makeAnnotList(); + currentPage.setAnnotList(currentAnnotList); + String dest = linkSet.getDest(); + int linkType = linkSet.getLinkType(); + currentAnnotList.addLink( + this.pdfDoc.makeLink(lrect.getRectangle(), dest, linkType)); + currentAnnotList = null; +*/ } + } + renderElement(fontState, (SVGElement)n, posx, posy); + } + } + } else if (area instanceof SVGSwitchElement) { + handleSwitchElement(fontState, posx, posy, (SVGSwitchElement)area); + } + // should be done with some cleanup code, so only + // required values are reset. + currentStream.add("Q\n"); + } + + /** + * Todo: underline, linethrough, textpath, tref + */ + public void renderText(FontState fontState, SVGTextElementImpl tg, float x, float y, DrawingInstruction di) + { + SVGTextRenderer str = new SVGTextRenderer(fontState, tg, x, y); + if(di.fill) { + if(di.stroke) { + currentStream.add("2 Tr\n"); + } else { + currentStream.add("0 Tr\n"); + } + } else if(di.stroke) { + currentStream.add("1 Tr\n"); + } + str.renderText(tg); + } + + protected float addSVGStr(FontState fs, float currentX, String str, boolean spacing) + { + boolean inbetween = false; + boolean addedspace = false; + StringBuffer pdf = new StringBuffer(); + for (int i=0; i < str.length(); i++) { + char ch = str.charAt(i); + if (ch > 127) { + pdf = pdf.append("\\"); + pdf = pdf.append(Integer.toOctalString((int)ch)); + currentX += fs.width(ch) / 1000f; + inbetween = true; + addedspace = false; + } else { + switch (ch) { + case '(' : + pdf = pdf.append("\\("); + currentX += fs.width(ch) / 1000f; + inbetween = true; + addedspace = false; + break; + case ')' : + pdf = pdf.append("\\)"); + currentX += fs.width(ch) / 1000f; + inbetween = true; + addedspace = false; + break; + case '\\' : + pdf = pdf.append("\\\\"); + currentX += fs.width(ch) / 1000f; + inbetween = true; + addedspace = false; + break; + case ' ': + case ' ': + if(spacing) { + pdf = pdf.append(' '); + currentX += fs.width(' ') / 1000f; + } else { + if(inbetween && !addedspace) { + addedspace = true; + pdf = pdf.append(' '); + currentX += fs.width(' ') / 1000f; + } + } + break; + case '\n': + case '\r': + if(spacing) { + pdf = pdf.append(' '); + currentX += fs.width(' ') / 1000f; + } + break; + default: + addedspace = false; + pdf = pdf.append(ch); + currentX += fs.width(ch) / 1000f; + inbetween = true; + break; + } + } + } + currentStream.add(pdf.toString()); + return currentX; + } + + /** + * Locates a defined element in an svg document. + * Either gets the element defined by its "id" in the current + * SVGDocument, or if the uri reference is to an external + * document it loads the document and returns the element. + */ + protected SVGElement locateDef(String ref, SVGElement currentElement) + { + int pos; + ref = ref.trim(); + pos = ref.indexOf("#"); + if(pos == 0) { + // local doc + Document doc = currentElement.getOwnerDocument(); + Element ele = doc.getElementById(ref.substring(1, ref.length())); + if(ele instanceof SVGElement) { + return (SVGElement)ele; + } + } else if(pos != -1) { + String href = ref.substring(0, pos); + if(href.indexOf(":") == -1) { + href = "file:" + href; + } + try { + // this is really only to get a cached svg image + FopImage img = FopImageFactory.Make(href); + if(img instanceof SVGImage) { + SVGDocument doc = ((SVGImage)img).getSVGDocument(); + Element ele = doc.getElementById(ref.substring(pos + 1, ref.length())); + if(ele instanceof SVGElement) { + return (SVGElement)ele; + } + } + } catch(Exception e) { + System.out.println(e); + } + } + return null; + } + + /** + * This class is used to handle the rendering of svg text. + * This is so that it can deal with the recursive rendering + * of text markup, while keeping track of the state and position. + */ + class SVGTextRenderer { + FontState fs; + String transstr; + float currentX; + float currentY; + float baseX; + float baseY; + SVGMatrix matrix; + float x; + float y; + + SVGTextRenderer(FontState fontState, SVGTextElementImpl tg, float x, float y) + { + fs = fontState; + + PDFNumber pdfNumber = new PDFNumber(); + SVGTransformList trans = tg.getTransform().getBaseVal(); + matrix = trans.consolidate().getMatrix(); + transstr = (pdfNumber.doubleOut(matrix.getA()) + + " " + pdfNumber.doubleOut(matrix.getB()) + + " " + pdfNumber.doubleOut(matrix.getC()) + + " " + pdfNumber.doubleOut(-matrix.getD()) + " "); + this.x = x; + this.y = y; + } + + void renderText(SVGTextElementImpl te) + { + DrawingInstruction di = applyStyle(te, te); + if(di.fill) { + if(di.stroke) { + currentStream.add("2 Tr\n"); + } else { + currentStream.add("0 Tr\n"); + } + } else if(di.stroke) { + currentStream.add("1 Tr\n"); + } + updateFont(te, fs); + + float tx = te.x; + float ty = te.y; + currentX = x + tx; + currentY = y + ty; + baseX = currentX; + baseY = currentY; + NodeList nodel = te.getChildNodes(); +// Vector list = te.textList; + for(int count = 0; count < nodel.getLength(); count++) { + Object o = nodel.item(count); + applyStyle(te, te); + if(o instanceof CharacterData) { + String str = ((CharacterData)o).getData(); + currentStream.add(transstr + + (currentX + matrix.getE()) + " " + + (baseY + matrix.getF()) + " Tm " + + "("); + boolean spacing = "preserve".equals(te.getXMLspace()); + currentX = addSVGStr(fs, currentX, str, spacing); + currentStream.add(") Tj\n"); + } else if(o instanceof SVGTextPathElementImpl) { + SVGTextPathElementImpl tpg = (SVGTextPathElementImpl)o; + String ref = tpg.str; + SVGElement graph = null; + graph = locateDef(ref, tpg); + if(graph instanceof SVGPathElementImpl) { + // probably not the best way to do this, should be able + // to render without the style being set. +// GraphicImpl parent = graph.getGraphicParent(); +// graph.setParent(tpg); + // set text path?? + // how should this work +// graph.setParent(parent); + } + } else if(o instanceof SVGTRefElementImpl) { + SVGTRefElementImpl trg = (SVGTRefElementImpl)o; + String ref = trg.ref; + SVGElement element = locateDef(ref, trg); + if(element instanceof SVGTextElementImpl) { +// GraphicImpl parent = graph.getGraphicParent(); +// graph.setParent(trg); + SVGTextElementImpl tele = (SVGTextElementImpl)element; + applyStyle(tele, tele); + boolean changed = false; + FontState oldfs = fs; + changed = updateFont(te, fs); + NodeList nl = tele.getChildNodes(); + boolean spacing = "preserve".equals(trg.getXMLspace()); + renderTextNodes(spacing, nl, trg.getX().getBaseVal(), trg.getY().getBaseVal(), trg.getDx().getBaseVal(), trg.getDy().getBaseVal()); + + if(changed) { + fs = oldfs; + currentStream.add("/" + fs.getFontName() + " " + fs.getFontSize() / 1000f + " Tf\n"); + } +// graph.setParent(parent); + } + } else if(o instanceof SVGTSpanElementImpl) { + SVGTSpanElementImpl tsg = (SVGTSpanElementImpl)o; + applyStyle(tsg, tsg); + boolean changed = false; + FontState oldfs = fs; + changed = updateFont(tsg, fs); + boolean spacing = "preserve".equals(tsg.getXMLspace()); + renderTextNodes(spacing, tsg.getChildNodes(), tsg.getX().getBaseVal(), tsg.getY().getBaseVal(), tsg.getDx().getBaseVal(), tsg.getDy().getBaseVal()); + +// currentX += fs.width(' ') / 1000f; + if(changed) { + fs = oldfs; + currentStream.add("/" + fs.getFontName() + " " + fs.getFontSize() / 1000f + " Tf\n"); + } + } else { + System.err.println("Error: unknown text element " + o); + } + } + } + + void renderTextNodes(boolean spacing, NodeList nl, SVGLengthList xlist, SVGLengthList ylist, SVGLengthList dxlist, SVGLengthList dylist) + { + boolean inbetween = false; + boolean addedspace = false; + int charPos = 0; + float xpos = currentX; + float ypos = currentY; + + for(int count = 0; count < nl.getLength(); count++) { + Node n = nl.item(count); + if(n instanceof CharacterData) { + StringBuffer pdf = new StringBuffer(); + String str = ((CharacterData)n).getData(); + for (int i=0; i < str.length(); i++) { + char ch = str.charAt(i); + xpos = currentX; + ypos = currentY; + if(ylist.getNumberOfItems() > charPos) { + ypos = baseY + ((Float)ylist.getItem(charPos)).floatValue(); + } + if(dylist.getNumberOfItems() > charPos) { + ypos = ypos + ((Float)dylist.getItem(charPos)).floatValue(); + } + if(xlist.getNumberOfItems() > charPos) { + xpos = baseX + ((Float)xlist.getItem(charPos)).floatValue(); + } + if(dxlist.getNumberOfItems() > charPos) { + xpos = xpos + ((Float)dxlist.getItem(charPos)).floatValue(); + } + if (ch > 127) { + pdf = pdf.append(transstr + + (xpos + matrix.getE()) + " " + + (ypos + matrix.getF()) + " Tm " + + "(" + "\\" + Integer.toOctalString((int)ch) + ") Tj\n"); + currentX = xpos + fs.width(ch) / 1000f; + currentY = ypos; + charPos++; + inbetween = true; + addedspace = false; + } else { + switch (ch) { + case '(' : + pdf = pdf.append(transstr + + (xpos + matrix.getE()) + " " + + (ypos + matrix.getF()) + " Tm " + + "(" + "\\(" + ") Tj\n"); + currentX = xpos + fs.width(ch) / 1000f; + currentY = ypos; + charPos++; + inbetween = true; + addedspace = false; + break; + case ')' : + pdf = pdf.append(transstr + + (xpos + matrix.getE()) + " " + + (ypos + matrix.getF()) + " Tm " + + "(" + "\\)" + ") Tj\n"); + currentX = xpos + fs.width(ch) / 1000f; + currentY = ypos; + charPos++; + inbetween = true; + addedspace = false; + break; + case '\\' : + pdf = pdf.append(transstr + + (xpos + matrix.getE()) + " " + + (ypos + matrix.getF()) + " Tm " + + "(" + "\\\\" + ") Tj\n"); + currentX = xpos + fs.width(ch) / 1000f; + currentY = ypos; + charPos++; + inbetween = true; + addedspace = false; + break; + case ' ': + case ' ': + if(spacing) { + currentX = xpos + fs.width(' ') / 1000f; + currentY = ypos; + charPos++; + } else { + if(inbetween && !addedspace) { + addedspace = true; + currentX = xpos + fs.width(' ') / 1000f; + currentY = ypos; + charPos++; + } + } + break; + case '\n': + case '\r': + if(spacing) { + currentX = xpos + fs.width(' ') / 1000f; + currentY = ypos; + charPos++; + } + break; + default: + addedspace = false; + pdf = pdf.append(transstr + + (xpos + matrix.getE()) + " " + + (ypos + matrix.getF()) + " Tm " + + "(" + ch + ") Tj\n"); + currentX = xpos + fs.width(ch) / 1000f; + currentY = ypos; + charPos++; + inbetween = true; + break; + } + } + currentStream.add(pdf.toString()); + } + } + } + } + + protected boolean updateFont(SVGStylable style, FontState fs) + { + boolean changed = false; + String fontFamily = fs.getFontFamily(); + CSSValue sp = style.getPresentationAttribute("font-family"); + if(sp != null && sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + fontFamily = sp.getCssText(); + } + } + if(!fontFamily.equals(fs.getFontFamily())) { + changed = true; + } + String fontStyle = fs.getFontStyle(); + sp = style.getPresentationAttribute("font-style"); + if(sp != null && sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + fontStyle = sp.getCssText(); + } + } + if(!fontStyle.equals(fs.getFontStyle())) { + changed = true; + } + String fontWeight = fs.getFontWeight(); + sp = style.getPresentationAttribute("font-weight"); + if(sp != null && sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { + if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_STRING) { + fontWeight = sp.getCssText(); + } + } + if(!fontWeight.equals(fs.getFontWeight())) { + changed = true; + } + float newSize = fs.getFontSize() / 1000f; + sp = style.getPresentationAttribute("font-size"); + if(sp != null && sp.getValueType() == CSSValue.CSS_PRIMITIVE_VALUE) { +// if(((CSSPrimitiveValue)sp).getPrimitiveType() == CSSPrimitiveValue.CSS_NUMBER) { + newSize = ((CSSPrimitiveValue)sp).getFloatValue(CSSPrimitiveValue.CSS_PT); +// } + } + if(fs.getFontSize() / 1000f != newSize) { + changed = true; + } + if(changed) { + try { + fs = new FontState(fs.getFontInfo(), fontFamily, fontStyle, + fontWeight, (int)(newSize * 1000)); + } catch(Exception fope) { + } + this.fs = fs; + + currentStream.add("/" + fs.getFontName() + " " + newSize + " Tf\n"); + } else { + if(!currentFontName.equals(fs.getFontName()) || currentFontSize != fs.getFontSize()) { +// currentFontName = fs.getFontName(); +// currentFontSize = fs.getFontSize(); + currentStream.add("/" + fs.getFontName() + " " + (fs.getFontSize()/1000) + " Tf\n"); + } + } + return changed; + } + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/pdf/fonts/package.html b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/fonts/package.html new file mode 100644 index 000000000..f3e5c6652 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/fonts/package.html @@ -0,0 +1,7 @@ + +org.apache.fop.render.pdf.fonts Package + +

PDF font information/metrics

+

Generated entirely from XML files.

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/pdf/package.html b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/package.html new file mode 100644 index 000000000..1bcf2644f --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/pdf/package.html @@ -0,0 +1,6 @@ + +org.apache.fop.render.pdf Package + +

classes for rendering to PDF

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/xml/XMLRenderer.java b/fop-0_14_0_regions/src/org/apache/fop/render/xml/XMLRenderer.java new file mode 100644 index 000000000..92dcbd575 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/xml/XMLRenderer.java @@ -0,0 +1,336 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.render.xml; + +// FOP +import org.apache.fop.svg.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +import org.apache.fop.render.Renderer; +import org.apache.fop.image.ImageArea; +import org.apache.fop.layout.*; +import org.apache.fop.pdf.*; + +// Java +import java.io.IOException; +import java.io.PrintWriter; +import java.util.Enumeration; + +/** + * Renderer that renders areas to XML for debugging purposes. + */ +public class XMLRenderer implements Renderer { + + /** indentation to use for pretty-printing the XML */ + protected int indent = 0; + + /** the application producing the XML */ + protected String producer; + + /** the writer used to output the XML */ + protected PrintWriter writer; + + /** + * set the document's producer + * + * @param producer string indicating application producing the XML + */ + public void setProducer(String producer) { + this.producer = producer; + } + + /** + * render the areas into XML + * + * @param areaTree the laid-out area tree + * @param writer the PrintWriter to give the XML to + */ + public void render(AreaTree areaTree, PrintWriter writer) + throws IOException { + MessageHandler.logln("rendering areas to XML"); + this.writer = writer; + this.writer.write("\n\n"); + writeStartTag(""); + Enumeration e = areaTree.getPages().elements(); + while (e.hasMoreElements()) { + this.renderPage((Page) e.nextElement()); + } + writeEndTag(""); + this.writer.flush(); + MessageHandler.errorln("written out XML"); + } + + /** + * write out spaces to make indent + */ + protected void writeIndent() { + StringBuffer s = new StringBuffer(); + for (int i= 0; i"); + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Box b = (Box) e.nextElement(); + b.render(this); + } + writeEndTag(""); + } + + /** + * render a block area to XML + * + * @param area the block area to render + */ + public void renderBlockArea(BlockArea area) { + writeStartTag(""); + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Box b = (Box) e.nextElement(); + b.render(this); + } + writeEndTag(""); + } + + /** + * render a display space to XML + * + * @param space the space to render + */ + public void renderDisplaySpace(DisplaySpace space) { + writeEmptyElementTag(""); + } + + /** render a foreign object area */ + public void renderForeignObjectArea(ForeignObjectArea area) + { + // if necessary need to scale and align the content + area.getObject().render(this); + } + + /** + * render an SVG area to XML + * + * @param area the area to render + */ + public void renderSVGArea(SVGArea area) { + writeEmptyElementTag(""); + } + + /** + * render an image area to XML + * + * @param area the area to render + */ + public void renderImageArea(ImageArea area) { + writeEmptyElementTag(""); + } + + /** + * render an inline area to XML + * + * @param area the area to render + */ + public void renderInlineArea(InlineArea area) { + String fontWeight = area.getFontState().getFontWeight(); + StringBuffer sb = new StringBuffer(); + String s = area.getText(); + int l = s.length(); + for (int i=0; i < l; i++) { + char ch = s.charAt(i); + if (ch>127) + sb = sb.append("&#"+(int)ch+";"); + else + sb = sb.append(ch); + } + writeElement("" + sb.toString() + + ""); + } + + /** + * render an inline space to XML + * + * @param space the space to render + */ + public void renderInlineSpace(InlineSpace space) { + writeEmptyElementTag(""); + } + + /** + * render a line area to XML + * + * @param area the area to render + */ + public void renderLineArea(LineArea area) { + String fontWeight = area.getFontState().getFontWeight(); + writeStartTag(""); + Enumeration e = area.getChildren().elements(); + while (e.hasMoreElements()) { + Box b = (Box)e.nextElement(); + b.render(this); + } + writeEndTag(""); + } + + /** + * render a page to XML + * + * @param page the page to render + */ + public void renderPage(Page page) { + AreaContainer body, before, after; + writeStartTag(""); + body = page.getBody(); + before = page.getBefore(); + after = page.getAfter(); + if (before != null) { + renderAreaContainer(before); + } + renderAreaContainer(body); + if (after != null) { + renderAreaContainer(after); + } + writeEndTag(""); + } + + /** + * render a rule area to XML + * + * @param area the area to render + */ + public void renderRuleArea(RuleArea area) { + writeEmptyElementTag(""); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/render/xml/package.html b/fop-0_14_0_regions/src/org/apache/fop/render/xml/package.html new file mode 100644 index 000000000..ecabe3547 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/render/xml/package.html @@ -0,0 +1,6 @@ + +org.apache.fop.render.xml Package + +

classes for rendering to XML for debugging

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/A.java b/fop-0_14_0_regions/src/org/apache/fop/svg/A.java new file mode 100644 index 000000000..a3f9cd1db --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/A.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:a pseudo flow object. + * + */ +public class A extends SVGObj { + + /** + * inner class for making A objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a A object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the A object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new A(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for A objects + */ + public static FObj.Maker maker() { + return new A.Maker(); + } + + /** + * constructs a A object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected A(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:a"; + } + + public SVGElement createGraphic() + { + String rf = this.properties.get("xlink:href").getString(); + SVGAElementImpl graphic; + graphic = new SVGAElementImpl(); +// graphic.setTarget(new SVGAnimatedStringImpl(rf)); + + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + SVGElement impl = ((GraphicsCreator)child).createGraphic(); + graphic.appendChild(impl); + } else if(child instanceof Defs) { + } + } + + return graphic; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/AltGlyph.java b/fop-0_14_0_regions/src/org/apache/fop/svg/AltGlyph.java new file mode 100644 index 000000000..86739386e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/AltGlyph.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +/** + * class representing svg:altGlyph pseudo flow object. + * + */ +public class AltGlyph extends SVGObj { + + /** + * inner class for making AltGlyph objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a AltGlyph object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the AltGlyph object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new AltGlyph(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for AltGlyph objects + */ + public static FObj.Maker maker() { + return new AltGlyph.Maker(); + } + + /** + * constructs a AltGlyph object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected AltGlyph(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:altGlyph"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Animate.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Animate.java new file mode 100644 index 000000000..b1f79b7ca --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Animate.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +/** + * class representing svg:Animate pseudo flow object. + * + */ +public class Animate extends SVGObj { + + /** + * inner class for making Animate objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Animate object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Animate object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Animate(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Animate objects + */ + public static FObj.Maker maker() { + return new Animate.Maker(); + } + + /** + * constructs a Animate object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Animate(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:animate"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateColor.java b/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateColor.java new file mode 100644 index 000000000..b25f20198 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateColor.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +/** + * class representing svg:AnimateColor pseudo flow object. + * + */ +public class AnimateColor extends SVGObj { + + /** + * inner class for making AnimateColor objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a AnimateColor object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the AnimateColor object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new AnimateColor(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for AnimateColor objects + */ + public static FObj.Maker maker() { + return new AnimateColor.Maker(); + } + + /** + * constructs a AnimateColor object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected AnimateColor(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:animateColor"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateMotion.java b/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateMotion.java new file mode 100644 index 000000000..facb011d5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateMotion.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +/** + * class representing svg:AnimateMotion pseudo flow object. + * + */ +public class AnimateMotion extends SVGObj { + + /** + * inner class for making AnimateMotion objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a AnimateMotion object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the AnimateMotion object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new AnimateMotion(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for AnimateMotion objects + */ + public static FObj.Maker maker() { + return new AnimateMotion.Maker(); + } + + /** + * constructs a AnimateMotion object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected AnimateMotion(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:animateMotion"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateTransform.java b/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateTransform.java new file mode 100644 index 000000000..a569c535a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/AnimateTransform.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +/** + * class representing svg:AnimateTransform pseudo flow object. + * + */ +public class AnimateTransform extends SVGObj { + + /** + * inner class for making AnimateTransform objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a AnimateTransform object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the AnimateTransform object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new AnimateTransform(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for AnimateTransform objects + */ + public static FObj.Maker maker() { + return new AnimateTransform.Maker(); + } + + /** + * constructs a AnimateTransform object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected AnimateTransform(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:animateTransform"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Circle.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Circle.java new file mode 100644 index 000000000..678fd4ba7 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Circle.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGLength; +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:Circle pseudo flow object. + * + */ +public class Circle extends SVGObj { + + /** + * inner class for making Circle objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Circle object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Circle object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Circle(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Circle objects + */ + public static FObj.Maker maker() { + return new Circle.Maker(); + } + + /** + * constructs a Circle object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Circle(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:circle"; + } + + public SVGElement createGraphic() + { + /* retrieve properties */ + SVGLength cx = ((SVGLengthProperty)this.properties.get("cx")).getSVGLength(); + SVGLength cy = ((SVGLengthProperty)this.properties.get("cy")).getSVGLength(); + SVGLength r = ((SVGLengthProperty)this.properties.get("r")).getSVGLength(); + SVGCircleElementImpl graph = new SVGCircleElementImpl(); + graph.setCx(new SVGAnimatedLengthImpl(cx)); + graph.setCy(new SVGAnimatedLengthImpl(cy)); + graph.setR(new SVGAnimatedLengthImpl(r)); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/ClipPath.java b/fop-0_14_0_regions/src/org/apache/fop/svg/ClipPath.java new file mode 100644 index 000000000..42a6f9e4a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/ClipPath.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:ClipPath pseudo flow object. + * + */ +public class ClipPath extends SVGObj { + + /** + * inner class for making ClipPath objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a ClipPath object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the ClipPath object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new ClipPath(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for ClipPath objects + */ + public static FObj.Maker maker() { + return new ClipPath.Maker(); + } + + /** + * constructs a ClipPath object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected ClipPath(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:clipPath"; + } + + SVGClipPathElementImpl clippath = new SVGClipPathElementImpl(); + + protected void addChild(FONode child) { + super.addChild(child); + if(child instanceof GraphicsCreator) { + GraphicsCreator gc = (GraphicsCreator)child; + SVGElement graph = gc.createGraphic(); + clippath.addElement(graph); +// graph.setParent(clippath); + } else { + // error + } + } + + public SVGElement createGraphic() + { + clippath.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + clippath.setId(this.properties.get("id").getString()); + return clippath; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Cursor.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Cursor.java new file mode 100644 index 000000000..1507ce04b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Cursor.java @@ -0,0 +1,105 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * + */ +public class Cursor extends SVGObj { + + /** + * inner class for making Cursor objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Cursor object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Cursor object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Cursor(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Cursor objects + */ + public static FObj.Maker maker() { + return new Cursor.Maker(); + } + + /** + * constructs a Cursor object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Cursor(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:cursor"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Defs.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Defs.java new file mode 100644 index 000000000..8ee14015e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Defs.java @@ -0,0 +1,135 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +import org.w3c.dom.svg.*; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Defs pseudo flow object. + * + */ +public class Defs extends SVGObj { + + /** + * inner class for making Defs objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Defs object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Defs object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Defs(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Defs objects + */ + public static FObj.Maker maker() { + return new Defs.Maker(); + } + + /** + * constructs a Defs object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Defs(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:defs"; + } + +// Hashtable defs = new Hashtable(); + + public SVGElement createGraphic() + { + SVGDefsElement defs = new SVGDefsElementImpl(); + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + SVGElement gi = ((GraphicsCreator)child).createGraphic(); + if(gi instanceof SVGElement) { + defs.appendChild((SVGElement)gi); +// String id = ((SVGElement)gi).getId(); +// if(!id.equals("")) { +// defs.put(id, gi); +// } else { + // no id +// System.err.println("WARNING No ID for defs element : " + gi); +// } + } + } + } + return defs; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Desc.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Desc.java new file mode 100644 index 000000000..8bf382ccf --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Desc.java @@ -0,0 +1,120 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +/** + * class representing svg:Desc pseudo flow object. + * + */ +public class Desc extends SVGObj { + + /** + * inner class for making Desc objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Desc object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Desc object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Desc(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Desc objects + */ + public static FObj.Maker maker() { + return new Desc.Maker(); + } + + /** + * the desc string + */ + protected String text = ""; + + /** + * constructs a Desc object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Desc(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:desc"; + } + + /** + * add characters to the string to display. + * + * @param data array of characters + * @param start start offset in character array + * @param length number of characters to add + */ + protected void addCharacters(char data[], int start, int length) { + this.text += new String(data, start, length - start); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Ellipse.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Ellipse.java new file mode 100644 index 000000000..d1c4e5e3b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Ellipse.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGLength; +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:Ellipse pseudo flow object. + * + */ +public class Ellipse extends SVGObj { + + /** + * inner class for making Ellipse objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Ellipse object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Ellipse object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Ellipse(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Ellipse objects + */ + public static FObj.Maker maker() { + return new Ellipse.Maker(); + } + + /** + * constructs a Ellipse object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Ellipse(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:ellipse"; + } + + public SVGElement createGraphic() + { + /* retrieve properties */ + SVGLength cx = ((SVGLengthProperty)this.properties.get("cx")).getSVGLength(); + SVGLength cy = ((SVGLengthProperty)this.properties.get("cy")).getSVGLength(); + SVGLength rx = ((SVGLengthProperty)this.properties.get("rx")).getSVGLength(); + SVGLength ry = ((SVGLengthProperty)this.properties.get("ry")).getSVGLength(); + SVGEllipseElementImpl graph = new SVGEllipseElementImpl(); + graph.setCx(new SVGAnimatedLengthImpl(cx)); + graph.setCy(new SVGAnimatedLengthImpl(cy)); + graph.setRx(new SVGAnimatedLengthImpl(rx)); + graph.setRy(new SVGAnimatedLengthImpl(ry)); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Filter.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Filter.java new file mode 100644 index 000000000..a2dc40f08 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Filter.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Filter pseudo flow object. + * + */ +public class Filter extends SVGObj { + + /** + * inner class for making Filter objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Filter object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Filter object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Filter(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Filter objects + */ + public static FObj.Maker maker() { + return new Filter.Maker(); + } + + /** + * constructs a Filter object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Filter(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:filter"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Font.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Font.java new file mode 100644 index 000000000..bffe59043 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Font.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Font pseudo flow object. + * + */ +public class Font extends SVGObj { + + /** + * inner class for making Font objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Font object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Font object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Font(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Font objects + */ + public static FObj.Maker maker() { + return new Font.Maker(); + } + + /** + * constructs a Font object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Font(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:font"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/G.java b/fop-0_14_0_regions/src/org/apache/fop/svg/G.java new file mode 100644 index 000000000..81e949e50 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/G.java @@ -0,0 +1,135 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:G pseudo flow object. + * + */ +public class G extends SVGObj { + + /** + * inner class for making G objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a G object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the G object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new G(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for G objects + */ + public static FObj.Maker maker() { + return new G.Maker(); + } + + /** + * constructs a G object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected G(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:g"; + } + + SVGGElementImpl ggraphic = new SVGGElementImpl(); + + public SVGElement createGraphic() + { + ggraphic.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + ggraphic.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + ggraphic.setId(this.properties.get("id").getString()); + ggraphic.setClassName(new SVGAnimatedStringImpl(this.properties.get("class").getString())); + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + SVGElement impl = ((GraphicsCreator)child).createGraphic(); + if(impl != null) { + if(impl instanceof SVGElementImpl) + ((SVGElementImpl)impl).setClassName(new SVGAnimatedStringImpl(((FObj)child).getProperty("class").getString())); + ggraphic.appendChild(impl); + } + } else if(child instanceof Defs) { +// System.out.println(child); +// ggraphic.addDefs(((Defs)child).createDefs()); + } + } + return ggraphic; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Glyph.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Glyph.java new file mode 100644 index 000000000..8fb8b59a6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Glyph.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Glyph pseudo flow object. + * + */ +public class Glyph extends SVGObj { + + /** + * inner class for making Glyph objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Glyph object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Glyph object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Glyph(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Glyph objects + */ + public static FObj.Maker maker() { + return new Glyph.Maker(); + } + + /** + * constructs a Glyph object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Glyph(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:glyph"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/GraphicsCreator.java b/fop-0_14_0_regions/src/org/apache/fop/svg/GraphicsCreator.java new file mode 100644 index 000000000..139bf7b8a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/GraphicsCreator.java @@ -0,0 +1,63 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.svg.SVGElement; + +/** + * + */ +public interface GraphicsCreator { + public SVGElement createGraphic(); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/HKern.java b/fop-0_14_0_regions/src/org/apache/fop/svg/HKern.java new file mode 100644 index 000000000..7632c9930 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/HKern.java @@ -0,0 +1,105 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * + */ +public class HKern extends SVGObj { + + /** + * inner class for making HKern objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a HKern object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the HKern object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new HKern(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for HKern objects + */ + public static FObj.Maker maker() { + return new HKern.Maker(); + } + + /** + * constructs a HKern object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected HKern(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:hkern"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Image.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Image.java new file mode 100644 index 000000000..1a02982e9 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Image.java @@ -0,0 +1,122 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:Image pseudo flow object. + * + */ +public class Image extends SVGObj { + + /** + * inner class for making Image objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Image object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Image object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Image(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Image objects + */ + public static FObj.Maker maker() { + return new Image.Maker(); + } + + /** + * constructs a Image object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Image(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:image"; + } + + public SVGElement createGraphic() + { + String link = this.properties.get("xlink:href").getString(); + float x = ((SVGLengthProperty)this.properties.get("x")).getSVGLength().getValue(); + float y = ((SVGLengthProperty)this.properties.get("y")).getSVGLength().getValue(); + float width = ((SVGLengthProperty)this.properties.get("width")).getSVGLength().getValue(); + float height = ((SVGLengthProperty)this.properties.get("height")).getSVGLength().getValue(); + SVGImageElementImpl graph = new SVGImageElementImpl(link, x, y, width, height); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Line.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Line.java new file mode 100644 index 000000000..7891f0e3b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Line.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.w3c.dom.svg.SVGLength; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGLineElementImpl; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:line pseudo flow object. + */ +public class Line extends SVGObj { + + /** + * inner class for making Line objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Line object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Line object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Line(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Line objects + */ + public static FObj.Maker maker() { + return new Line.Maker(); + } + + /** + * constructs a Line object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Line(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:line"; + } + + public SVGElement createGraphic() + { + /* retrieve properties */ + SVGLength x1 = ((SVGLengthProperty)this.properties.get("x1")).getSVGLength(); + SVGLength x2 = ((SVGLengthProperty)this.properties.get("x2")).getSVGLength(); + SVGLength y1 = ((SVGLengthProperty)this.properties.get("y1")).getSVGLength(); + SVGLength y2 = ((SVGLengthProperty)this.properties.get("y2")).getSVGLength(); + SVGLineElementImpl graph = new SVGLineElementImpl(); + graph.setX1(new SVGAnimatedLengthImpl(x1)); + graph.setY1(new SVGAnimatedLengthImpl(y1)); + graph.setX2(new SVGAnimatedLengthImpl(x2)); + graph.setY2(new SVGAnimatedLengthImpl(y2)); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/LinearGradient.java b/fop-0_14_0_regions/src/org/apache/fop/svg/LinearGradient.java new file mode 100644 index 000000000..b175a81e3 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/LinearGradient.java @@ -0,0 +1,133 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + +/** + * class representing svg:LinearGradient pseudo flow object. + * + */ +public class LinearGradient extends SVGObj { + + /** + * inner class for making LinearGradient objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a LinearGradient object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the LinearGradient object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new LinearGradient(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for LinearGradient objects + */ + public static FObj.Maker maker() { + return new LinearGradient.Maker(); + } + + /** + * constructs a LinearGradient object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected LinearGradient(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:linearGradient"; + } + + SVGLinearGradientElementImpl linear = new SVGLinearGradientElementImpl(); + + protected void addChild(FONode child) { + super.addChild(child); + if(child instanceof Stop) { + SVGStopElement sse = ((Stop)child).createStop(); + linear.appendChild(sse); + } + } + + public SVGElement createGraphic() + { + linear.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + linear.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + linear.setId(this.properties.get("id").getString()); + + linear.setX1(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("x1")).getSVGLength())); + linear.setX2(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("x2")).getSVGLength())); + linear.setY1(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("y1")).getSVGLength())); + linear.setY2(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("y2")).getSVGLength())); +// linear.setSpreadMethod(?); + return linear; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Marker.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Marker.java new file mode 100644 index 000000000..7fd2887d6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Marker.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Marker pseudo flow object. + * + */ +public class Marker extends SVGObj { + + /** + * inner class for making Marker objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Marker object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Marker object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Marker(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Marker objects + */ + public static FObj.Maker maker() { + return new Marker.Maker(); + } + + /** + * constructs a Marker object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Marker(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:marker"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Mask.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Mask.java new file mode 100644 index 000000000..451de833a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Mask.java @@ -0,0 +1,131 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:Mask pseudo flow object. + * + */ +public class Mask extends SVGObj { + + /** + * inner class for making Mask objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Mask object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Mask object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Mask(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Mask objects + */ + public static FObj.Maker maker() { + return new Mask.Maker(); + } + + /** + * constructs a Mask object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Mask(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:mask"; + } + + SVGMaskElementImpl mask = new SVGMaskElementImpl(); + + protected void addChild(FONode child) { + super.addChild(child); + if(child instanceof GraphicsCreator) { + GraphicsCreator gc = (GraphicsCreator)child; + SVGElement graph = gc.createGraphic(); + if(graph != null) { + mask.addElement(graph); +// graph.setParent(mask); + } + } else { + // error + } + } + + public SVGElement createGraphic() + { + mask.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + mask.setId(this.properties.get("id").getString()); + return mask; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/MissingGlyph.java b/fop-0_14_0_regions/src/org/apache/fop/svg/MissingGlyph.java new file mode 100644 index 000000000..5065e2b16 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/MissingGlyph.java @@ -0,0 +1,105 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * + */ +public class MissingGlyph extends SVGObj { + + /** + * inner class for making MissingGlyph objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a MissingGlyph object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the MissingGlyph object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new MissingGlyph(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for MissingGlyph objects + */ + public static FObj.Maker maker() { + return new MissingGlyph.Maker(); + } + + /** + * constructs a MissingGlyph object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected MissingGlyph(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:missing-glyph"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Path.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Path.java new file mode 100644 index 000000000..64a5b0a8c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Path.java @@ -0,0 +1,121 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:Path pseudo flow object. + * + */ +public class Path extends SVGObj { + + /** + * inner class for making Path objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Path object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Path object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Path(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Path objects + */ + public static FObj.Maker maker() { + return new Path.Maker(); + } + + /** + * constructs a Path object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Path(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:path"; + } + + public SVGElement createGraphic() + { + Vector pd = ((SVGD)this.properties.get("d")).getPath(); + SVGPathElementImpl graph = new SVGPathElementImpl(pd); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/PathPoint.java b/fop-0_14_0_regions/src/org/apache/fop/svg/PathPoint.java new file mode 100644 index 000000000..672a21dcd --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/PathPoint.java @@ -0,0 +1,61 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +public class PathPoint { + public float x; + public float y; + public PathPoint(float p1, float p2) + { + x = p1; + y = p2; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Pattern.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Pattern.java new file mode 100644 index 000000000..73ae9ae4d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Pattern.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Pattern pseudo flow object. + * + */ +public class Pattern extends SVGObj { + + /** + * inner class for making Pattern objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Pattern object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Pattern object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Pattern(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Pattern objects + */ + public static FObj.Maker maker() { + return new Pattern.Maker(); + } + + /** + * constructs a Pattern object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Pattern(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:pattern"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Polygon.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Polygon.java new file mode 100644 index 000000000..bd53fe4de --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Polygon.java @@ -0,0 +1,120 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * + */ +public class Polygon extends SVGObj { + + /** + * inner class for making Polygon objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Polygon object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Polygon object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Polygon(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Polygon objects + */ + public static FObj.Maker maker() { + return new Polygon.Maker(); + } + + /** + * constructs a Polygon object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Polygon(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:polygon"; + } + + public SVGElement createGraphic() + { + Vector points = ((SVGPoints)this.properties.get("points")).getPoints(); + SVGPolygonElementImpl graph = new SVGPolygonElementImpl(points); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Polyline.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Polyline.java new file mode 100644 index 000000000..05187eef1 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Polyline.java @@ -0,0 +1,121 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:Polyline pseudo flow object. + * + */ +public class Polyline extends SVGObj { + + /** + * inner class for making Polyline objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Polyline object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Polyline object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Polyline(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Polyline objects + */ + public static FObj.Maker maker() { + return new Polyline.Maker(); + } + + /** + * constructs a Polyline object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Polyline(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:polyline"; + } + + public SVGElement createGraphic() + { + Vector points = ((SVGPoints)this.properties.get("points")).getPoints(); + SVGPolylineElementImpl graph = new SVGPolylineElementImpl(points); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/RadialGradient.java b/fop-0_14_0_regions/src/org/apache/fop/svg/RadialGradient.java new file mode 100644 index 000000000..ec941801d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/RadialGradient.java @@ -0,0 +1,133 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + +/** + * class representing svg:RadialGradient pseudo flow object. + * + */ +public class RadialGradient extends SVGObj { + + /** + * inner class for making RadialGradient objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a RadialGradient object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the RadialGradient object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new RadialGradient(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for RadialGradient objects + */ + public static FObj.Maker maker() { + return new RadialGradient.Maker(); + } + + SVGRadialGradientElementImpl radial = new SVGRadialGradientElementImpl(); + + /** + * constructs a RadialGradient object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected RadialGradient(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:radialGradient"; + } + + protected void addChild(FONode child) { + super.addChild(child); + if(child instanceof Stop) { + SVGStopElement sse = ((Stop)child).createStop(); + radial.appendChild(sse); + } + } + + public SVGElement createGraphic() + { + radial.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + radial.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + radial.setId(this.properties.get("id").getString()); + + radial.setCx(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("cx")).getSVGLength())); + radial.setCy(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("cy")).getSVGLength())); + radial.setR(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("r")).getSVGLength())); + radial.setFx(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("fx")).getSVGLength())); + radial.setFy(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("fy")).getSVGLength())); + return radial; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Rect.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Rect.java new file mode 100644 index 000000000..19579470b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Rect.java @@ -0,0 +1,135 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +//import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +//import org.apache.fop.dom.svg.Graphic; +import org.apache.fop.dom.svg.SVGRectElementImpl; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGLength; +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:rect pseudo flow object. + */ +public class Rect extends SVGObj { + + /** + * inner class for making Rect objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Rect object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Rect object + */ + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Rect(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Rect objects + */ + public static FObj.Maker maker() { + return new Rect.Maker(); + } + + /** + * constructs a Rect object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Rect(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:rect"; + } + + public SVGElement createGraphic() + { + /* retrieve properties */ + SVGLength width = ((SVGLengthProperty)this.properties.get("width")).getSVGLength(); + SVGLength height = ((SVGLengthProperty)this.properties.get("height")).getSVGLength(); + SVGLength x = ((SVGLengthProperty)this.properties.get("x")).getSVGLength(); + SVGLength y = ((SVGLengthProperty)this.properties.get("y")).getSVGLength(); + SVGLength rx = ((SVGLengthProperty)this.properties.get("rx")).getSVGLength(); + SVGLength ry = ((SVGLengthProperty)this.properties.get("ry")).getSVGLength(); + SVGRectElementImpl graph = new SVGRectElementImpl(); + graph.setX(new SVGAnimatedLengthImpl(x)); + graph.setY(new SVGAnimatedLengthImpl(y)); + graph.setRx(new SVGAnimatedLengthImpl(rx)); + graph.setRy(new SVGAnimatedLengthImpl(ry)); + graph.setWidth(new SVGAnimatedLengthImpl(width)); + graph.setHeight(new SVGAnimatedLengthImpl(height)); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVG.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVG.java new file mode 100644 index 000000000..24cc09c4c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVG.java @@ -0,0 +1,213 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.ForeignObjectArea; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.w3c.dom.svg.*; + +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:svg pseudo flow object. + */ +public class SVG extends FObj implements GraphicsCreator { + + /** + * inner class for making SVG objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make an SVG object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the SVG object + */ + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new SVG(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG objects + */ + public static FObj.Maker maker() { + return new SVG.Maker(); + } + + FontState fs; + float width; + float height; + + /** + * constructs an SVG object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + public SVG(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:svg"; + } + + public SVGElement createGraphic() + { + SVGSVGElementImpl svgArea = null; + SVGLength w = ((SVGLengthProperty)this.properties.get("width")).getSVGLength(); + SVGLength h = ((SVGLengthProperty)this.properties.get("height")).getSVGLength(); + svgArea = new SVGSVGElementImpl(); + SVGAnimatedLength sal; + sal = new SVGAnimatedLengthImpl(w); + sal.setBaseVal(w); + svgArea.setWidth(sal); + sal = new SVGAnimatedLengthImpl(h); + sal.setBaseVal(h); + svgArea.setHeight(sal); + SVGLength x = ((SVGLengthProperty)this.properties.get("x")).getSVGLength(); + sal = new SVGAnimatedLengthImpl(x); + sal.setBaseVal(x); + svgArea.setX(sal); + SVGLength y = ((SVGLengthProperty)this.properties.get("y")).getSVGLength(); + sal = new SVGAnimatedLengthImpl(y); + sal.setBaseVal(y); + svgArea.setY(sal); + + svgArea.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + svgArea.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + svgArea.setId(this.properties.get("id").getString()); + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode fo = (FONode) children.elementAt(i); + if(fo instanceof GraphicsCreator) { + SVGElement impl = ((GraphicsCreator)fo).createGraphic(); + if(impl != null) { + if(impl instanceof SVGElementImpl) + ((SVGElementImpl)impl).setClassName(new SVGAnimatedStringImpl(((FObj)fo).getProperty("class").getString())); + svgArea.appendChild((org.w3c.dom.Node)impl); + } +// } else if(fo instanceof Defs) { +// svgArea.addDefs(((Defs)fo).createDefs()); + } + Status status; + } + return svgArea; + } + + /** + * layout this formatting object. + * + * @param area the area to layout the object into + * + * @return the status of the layout + */ + public Status layout(Area area) throws FOPException { + + if (!(area instanceof ForeignObjectArea)) { + // this is an error + throw new FOPException("SVG not in fo:instream-foreign-object"); + } + + if (this.marker == BREAK_AFTER) { + return new Status(Status.OK); + } + + if (this.marker == START) { + /* retrieve properties */ + String id = this.properties.get("id").getString(); + String fontFamily = this.properties.get("font-family").getString(); + String fontStyle = this.properties.get("font-style").getString(); + String fontWeight = this.properties.get("font-weight").getString(); + int fontSize = this.properties.get("font-size").getLength().mvalue(); + + this.fs = new FontState(area.getFontInfo(), fontFamily, + fontStyle, fontWeight, fontSize); + + this.width = ((SVGLengthProperty)this.properties.get("width")).getSVGLength().getValue(); + this.height = ((SVGLengthProperty)this.properties.get("height")).getSVGLength().getValue(); + + this.marker = 0; + } + + /* create an SVG area */ + /* if width and height are zero, may want to get the bounds of the content. */ + SVGArea svg = new SVGArea(fs, width, height); + SVGDocument doc = new SVGDocumentImpl(); + svg.setSVGDocument(doc); + svg.start(); + + /* add the SVG area to the containing area */ + ForeignObjectArea foa = (ForeignObjectArea)area; + foa.setObject(svg); + foa.setIntrinsicWidth(svg.getWidth()); + foa.setIntrinsicHeight(svg.getHeight()); + + doc.appendChild((SVGSVGElement)createGraphic()); + + /* finish off the SVG area */ + svg.end(); + + /* return status */ + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGD.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGD.java new file mode 100644 index 000000000..c58c92a0d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGD.java @@ -0,0 +1,129 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +/** + * + */ +public class SVGD extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + return new SVGD(propertyList, new PathData(value)); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGD.Maker(); + } + + protected PathData style; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGD(PropertyList propertyList, PathData explicitValue) { + this.propertyList = propertyList; + this.style = explicitValue; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public Vector getPath() + { + return this.style.getPath(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGDriver.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGDriver.java new file mode 100644 index 000000000..caa56640d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGDriver.java @@ -0,0 +1,336 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.apps.*; +import org.apache.fop.dom.svg.*; +import org.apache.fop.fo.FOTreeBuilder; +import org.apache.fop.fo.ElementMapping; +import org.apache.fop.fo.PropertyListMapping; +import org.apache.fop.layout.AreaTree; +import org.apache.fop.layout.FontInfo; +import org.apache.fop.render.Renderer; +import org.apache.fop.messaging.MessageHandler; + +// DOM +import org.w3c.dom.Document; +import org.w3c.dom.Node; +import org.w3c.dom.NamedNodeMap; +import org.w3c.dom.Attr; + +// SAX +import org.xml.sax.ContentHandler; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; +import org.xml.sax.SAXException; +import org.xml.sax.helpers.AttributesImpl; + +import org.w3c.dom.svg.*; + +// Java +import java.io.PrintWriter; +import java.io.IOException; + +/** + *

Primary class that drives overall FOP process. + * + *

Once this class is instantiated, methods are called to set the + * Renderer to use, the (possibly multiple) ElementMapping(s) to + * use and the PrintWriter to use to output the results of the + * rendering (where applicable). In the case of the Renderer and + * ElementMapping(s), the Driver may be supplied either with the + * object itself, or the name of the class, in which case Driver will + * instantiate the class itself. The advantage of the latter is it + * enables runtime determination of Renderer and ElementMapping(s). + * + *

Once the Driver is set up, the buildFOTree method + * is called. Depending on whether DOM or SAX is being used, the + * invocation of the method is either buildFOTree(Document) or + * buildFOTree(Parser, InputSource) respectively. + * + *

A third possibility may be used to build the FO Tree, namely + * calling getDocumentHandler() and firing the SAX events yourself. + * + *

Once the FO Tree is built, the format() and render() methods may be + * called in that order. + * + *

Here is an example use of Driver from CommandLine.java: + * + *

+ *   Driver driver = new Driver();
+ *   driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);
+ *   driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");
+ *   driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");
+ *   driver.setWriter(new PrintWriter(new FileWriter(args[1])));
+ *   driver.buildFOTree(parser, fileInputSource(args[0]));
+ *   driver.format();
+ *   driver.render();
+ * 
+ */ +public class SVGDriver { + + /** the FO tree builder */ + protected SVGTreeBuilder treeBuilder; + + /** the PrintWriter to use to output the results of the renderer */ + protected PrintWriter writer; + + /** create a new Driver */ + public SVGDriver() { + this.treeBuilder = new SVGTreeBuilder(); + } + + /** + * add the given element mapping. + * + * an element mapping maps element names to Java classes + */ + public void addElementMapping(ElementMapping mapping) { + mapping.addToBuilder(this.treeBuilder); + } + + /** + * add the element mapping with the given class name + */ + public void addElementMapping(String mappingClassName) { + createElementMapping(mappingClassName).addToBuilder(this.treeBuilder); + } + + /** + * protected method used by addElementMapping(String) to + * instantiate element mapping class + */ + protected ElementMapping createElementMapping(String mappingClassName) { + MessageHandler.logln("using element mapping " + mappingClassName); + + try { + return (ElementMapping) + Class.forName(mappingClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + mappingClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + mappingClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + mappingClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(mappingClassName + " is not an element mapping"); + } + return null; + } + + /** + * add the element mapping with the given class name + */ + public void addPropertyList(String listClassName) { + createPropertyList(listClassName).addToBuilder(this.treeBuilder); + } + + /** + * protected method used by addPropertyList(String) to + * instantiate list mapping class + */ + protected PropertyListMapping createPropertyList(String listClassName) { + MessageHandler.logln("using property list mapping " + listClassName); + + try { + return (PropertyListMapping) + Class.forName(listClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + listClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + listClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + listClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(listClassName + " is not an property list"); + } + return null; + } + + /** + * return the tree builder (a SAX DocumentHandler). + * + * used in situations where SAX is used but not via a FOP-invoked + * SAX parser. A good example is an XSLT engine that fires SAX + * events but isn't a SAX Parser itself. + */ + public ContentHandler getContentHandler() { + return this.treeBuilder; + } + + /** + * build the formatting object tree using the given SAX Parser and + * SAX InputSource + */ + public void buildSVGTree(XMLReader parser, InputSource source) + throws FOPException { + + parser.setContentHandler(this.treeBuilder); + try { + parser.parse(source); + } catch (SAXException e) { +e.printStackTrace(); + if (e.getException() instanceof FOPException) + throw (FOPException) e.getException(); + else + throw new FOPException(e.getMessage()); + } catch (IOException e) { + throw new FOPException(e.getMessage()); + } + } + + /** + * build the formatting object tree using the given DOM Document + */ + public void buildSVGTree(Document document) + throws FOPException { + + /* most of this code is modified from John Cowan's */ + + Node currentNode; + AttributesImpl currentAtts; + + /* temporary array for making Strings into character arrays */ + char[] array = null; + + currentAtts = new AttributesImpl(); + + /* start at the document element */ + currentNode = document; + + try { + while (currentNode != null) { + switch (currentNode.getNodeType()) { + case Node.DOCUMENT_NODE: + this.treeBuilder.startDocument(); + break; + case Node.CDATA_SECTION_NODE: + case Node.TEXT_NODE: + String data = currentNode.getNodeValue(); + int datalen = data.length(); + if (array == null || array.length < datalen) { + /* if the array isn't big enough, make a new + one */ + array = new char[datalen]; + } + data.getChars(0, datalen, array, 0); + this.treeBuilder.characters(array, 0, datalen); + break; + case Node.PROCESSING_INSTRUCTION_NODE: + this.treeBuilder.processingInstruction( + currentNode.getNodeName(), + currentNode.getNodeValue()); + break; + case Node.ELEMENT_NODE: + NamedNodeMap map = currentNode.getAttributes(); + currentAtts.clear(); + for (int i = map.getLength() - 1; i >= 0; i--) { + Attr att = (Attr)map.item(i); + currentAtts.addAttribute("", + att.getName(), + "", + "CDATA", + att.getValue()); + } + this.treeBuilder.startElement( + "", currentNode.getNodeName(), "", currentAtts); + break; + } + + Node nextNode = currentNode.getFirstChild(); + if (nextNode != null) { + currentNode = nextNode; + continue; + } + + while (currentNode != null) { + switch (currentNode.getNodeType()) { + case Node.DOCUMENT_NODE: + this.treeBuilder.endDocument(); + break; + case Node.ELEMENT_NODE: + this.treeBuilder.endElement( + "", currentNode.getNodeName(), "" ); + break; + } + + nextNode = currentNode.getNextSibling(); + if (nextNode != null) { + currentNode = nextNode; + break; + } + + currentNode = currentNode.getParentNode(); + } + } + } catch (SAXException e) { + throw new FOPException(e.getMessage()); + } + } + + public SVGDocument getSVGDocument() + { + return this.treeBuilder.getSVGDocument(); + } + + /** + * format the formatting object tree into an area tree + */ + public void format() + throws FOPException { + FontInfo fontInfo = new FontInfo(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGElementMapping.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGElementMapping.java new file mode 100644 index 000000000..bdedf174e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGElementMapping.java @@ -0,0 +1,111 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +import org.apache.fop.fo.TreeBuilder; +import org.apache.fop.fo.FOTreeBuilder; +import org.apache.fop.fo.ElementMapping; +import org.apache.fop.dom.svg.SVGDocumentImpl; + +public class SVGElementMapping implements ElementMapping { + + public void addToBuilder(TreeBuilder builder) { + String uri = SVGDocumentImpl.namespaceURI; + builder.addMapping(uri, "svg", SVG.maker()); + builder.addMapping(uri, "rect", Rect.maker()); + builder.addMapping(uri, "line", Line.maker()); + builder.addMapping(uri, "text", Text.maker()); + + builder.addMapping(uri, "desc", Desc.maker()); + builder.addMapping(uri, "title", Title.maker()); + builder.addMapping(uri, "circle", Circle.maker()); + builder.addMapping(uri, "ellipse", Ellipse.maker()); + builder.addMapping(uri, "g", G.maker()); + builder.addMapping(uri, "polyline", Polyline.maker()); + builder.addMapping(uri, "polygon", Polygon.maker()); + builder.addMapping(uri, "defs", Defs.maker()); + builder.addMapping(uri, "path", Path.maker()); + builder.addMapping(uri, "use", Use.maker()); + builder.addMapping(uri, "tspan", TSpan.maker()); + builder.addMapping(uri, "tref", TRef.maker()); + builder.addMapping(uri, "image", Image.maker()); + builder.addMapping(uri, "style", Style.maker()); + +// elements in progress + builder.addMapping(uri, "textPath", TextPath.maker()); + builder.addMapping(uri, "clipPath", ClipPath.maker()); + builder.addMapping(uri, "mask", Mask.maker()); + builder.addMapping(uri, "linearGradient", LinearGradient.maker()); + builder.addMapping(uri, "radialGradient", RadialGradient.maker()); + builder.addMapping(uri, "stop", Stop.maker()); + builder.addMapping(uri, "a", A.maker()); + builder.addMapping(uri, "switch", Switch.maker()); + builder.addMapping(uri, "symbol", Symbol.maker()); + +// elements below will not work + builder.addMapping(uri, "pattern", Pattern.maker()); + + builder.addMapping(uri, "marker", Marker.maker()); + builder.addMapping(uri, "animate", Animate.maker()); + builder.addMapping(uri, "altGlyph", AltGlyph.maker()); + builder.addMapping(uri, "font", Font.maker()); + builder.addMapping(uri, "glyph", Glyph.maker()); + builder.addMapping(uri, "missing-glyph", MissingGlyph.maker()); + builder.addMapping(uri, "hkern", HKern.maker()); + builder.addMapping(uri, "vkern", VKern.maker()); + builder.addMapping(uri, "set", Set.maker()); + builder.addMapping(uri, "animateMotion", AnimateMotion.maker()); + builder.addMapping(uri, "animateColor", AnimateColor.maker()); + builder.addMapping(uri, "animateTransform", AnimateTransform.maker()); + builder.addMapping(uri, "cursor", Cursor.maker()); + builder.addMapping(uri, "filter", Filter.maker()); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthListProperty.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthListProperty.java new file mode 100644 index 000000000..bcb955a16 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthListProperty.java @@ -0,0 +1,137 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +import java.util.*; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.svg.*; + +/** + * a class representing all the length properties in SVG + */ +public class SVGLengthListProperty extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + SVGAnimatedLengthListImpl anime = new SVGAnimatedLengthListImpl(); + SVGLengthListImpl len = new SVGLengthListImpl(); + anime.setBaseVal(len); + len.setValueAsString(value); + return new SVGLengthListProperty(propertyList, anime); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGLengthListProperty.Maker(); + } + + /** the length as a Length object */ + protected SVGAnimatedLengthList value; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGLengthListProperty(PropertyList propertyList, SVGAnimatedLengthList explicitValue) { + this.propertyList = propertyList; + this.value = explicitValue; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public SVGAnimatedLengthList getSVGLengthList() { + return this.value; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthProperty.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthProperty.java new file mode 100644 index 000000000..e0c68d1a6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGLengthProperty.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +/** + * a class representing all the length properties in SVG + */ +public class SVGLengthProperty extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + SVGLengthImpl len = new SVGLengthImpl(); + len.setValueAsString(value); + return new SVGLengthProperty(propertyList, len); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, "0pt"); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGLengthProperty.Maker(); + } + + /** the length as a Length object */ + protected SVGLengthImpl value; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGLengthProperty(PropertyList propertyList, SVGLengthImpl explicitValue) { + this.propertyList = propertyList; + this.value = explicitValue; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public SVGLengthImpl getSVGLength() { + return this.value; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGObj.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGObj.java new file mode 100644 index 000000000..c41b58cef --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGObj.java @@ -0,0 +1,102 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.svg.SVGElement; + +/** + * Since SVG objects are not layed out then this class checks + * that this element is not being layed out inside some incorrect + * element. + */ +public abstract class SVGObj extends FObj implements GraphicsCreator { + + /** + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + public SVGObj(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + } + + public SVGElement createGraphic() + { + return null; + } + + /** + * layout this formatting object. + * + * @param area the area to layout the object into + * @return the status of the layout + */ + public Status layout(Area area) throws FOPException + { + if (area instanceof SVGArea) { + } else { + /* otherwise generate a warning */ + System.err.println("WARNING: " + this.name + " outside svg:svg"); + } + + /* return status */ + return new Status(Status.OK); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGPoints.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGPoints.java new file mode 100644 index 000000000..866615d86 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGPoints.java @@ -0,0 +1,129 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +/** + * + */ +public class SVGPoints extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + return new SVGPoints(propertyList, new PointsData(value)); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGPoints.Maker(); + } + + protected PointsData style; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGPoints(PropertyList propertyList, PointsData explicitValue) { + this.propertyList = propertyList; + this.style = explicitValue; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public Vector getPoints() + { + return this.style.getPoints(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGPropertyListMapping.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGPropertyListMapping.java new file mode 100644 index 000000000..6be973d17 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGPropertyListMapping.java @@ -0,0 +1,119 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +import org.apache.fop.fo.*; +import org.apache.fop.fo.properties.*; +import org.apache.fop.dom.svg.SVGDocumentImpl; + +import java.util.Hashtable; + +public class SVGPropertyListMapping implements PropertyListMapping { + + public void addToBuilder(TreeBuilder builder) { + + String uri = SVGDocumentImpl.namespaceURI; + Hashtable propertyTable = new Hashtable(); + propertyTable.put("height",SVGLengthProperty.maker()); + propertyTable.put("width",SVGLengthProperty.maker()); + + propertyTable.put("x",SVGLengthProperty.maker()); + propertyTable.put("y",SVGLengthProperty.maker()); + propertyTable.put("x1",SVGLengthProperty.maker()); + propertyTable.put("x2",SVGLengthProperty.maker()); + propertyTable.put("y1",SVGLengthProperty.maker()); + propertyTable.put("y2",SVGLengthProperty.maker()); + propertyTable.put("rx",SVGLengthProperty.maker()); + propertyTable.put("ry",SVGLengthProperty.maker()); + propertyTable.put("dx",SVGLengthProperty.maker()); + propertyTable.put("dy",SVGLengthProperty.maker()); + propertyTable.put("cx",SVGLengthProperty.maker()); + propertyTable.put("cy",SVGLengthProperty.maker()); + propertyTable.put("r",SVGLengthProperty.maker()); + propertyTable.put("fx",SVGLengthProperty.maker()); + propertyTable.put("fy",SVGLengthProperty.maker()); + propertyTable.put("refX",SVGLengthProperty.maker()); + propertyTable.put("refY",SVGLengthProperty.maker()); + propertyTable.put("markerWidth",SVGLengthProperty.maker()); + propertyTable.put("markerHeight",SVGLengthProperty.maker()); + propertyTable.put("offset",SVGLengthProperty.maker()); + +/* propertyTable.put("orient",SVGOrient.maker());*/ + propertyTable.put("xlink:href",HRef.maker()); + propertyTable.put("style",SVGStyle.maker()); + propertyTable.put("transform",SVGTransform.maker()); + propertyTable.put("d",SVGD.maker()); + propertyTable.put("points",SVGPoints.maker()); + propertyTable.put("viewBox",ViewBox.maker()); + propertyTable.put("xml:space",XMLSpace.maker()); + + propertyTable.put("font-family",FontFamily.maker()); + propertyTable.put("font-style",FontStyle.maker()); + propertyTable.put("font-weight",FontWeight.maker()); + propertyTable.put("font-size",FontSize.maker()); + propertyTable.put("requiredFeatures", RequiredFeatures.maker()); + propertyTable.put("requiredExtensions", RequiredExtensions.maker()); + propertyTable.put("systemLanguage", SystemLanguage.maker()); + + propertyTable.put("id",Id.maker()); // attribute for objects + propertyTable.put("class",ElementClass.maker()); // class for styling + + builder.addPropertyList(uri, propertyTable); + propertyTable = new Hashtable(); + propertyTable.put("x",SVGLengthListProperty.maker()); + propertyTable.put("y",SVGLengthListProperty.maker()); + propertyTable.put("dx",SVGLengthListProperty.maker()); + propertyTable.put("dy",SVGLengthListProperty.maker()); + builder.addElementPropertyList(uri, "tref", propertyTable); + builder.addElementPropertyList(uri, "tspan", propertyTable); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringList.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringList.java new file mode 100644 index 000000000..22bbb21fe --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringList.java @@ -0,0 +1,81 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +import org.apache.fop.dom.svg.*; + +import java.util.*; + +/** + * + */ +class SVGStringList extends SVGListImpl { + public SVGStringList(String str) + { + parseString(str); + } + + void parseString(String str) + { + StringTokenizer st = new StringTokenizer(str, ", \n\r\t:;"); + while(st.hasMoreTokens()) { + String item = st.nextToken(); + appendItem(item); + } + } + + public Object createItem() + { + return new String(); + } + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringProperty.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringProperty.java new file mode 100644 index 000000000..5d9adb98f --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStringProperty.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +import java.util.*; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +/** + * a class representing all the length properties in SVG + */ +public class SVGStringProperty extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + return new SVGStringProperty(propertyList, value); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGStringProperty.Maker(); + } + + /** the length as a Length object */ + protected String value; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGStringProperty(PropertyList propertyList, String explicitValue) { + this.propertyList = propertyList; + this.value = explicitValue; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public String getString() { + return this.value; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStyle.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStyle.java new file mode 100644 index 000000000..8bd7da0be --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGStyle.java @@ -0,0 +1,131 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +import org.w3c.dom.css.CSSStyleDeclaration; + +/** + * + */ +public class SVGStyle extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + return new SVGStyle(propertyList, new StyleData(value)); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGStyle.Maker(); + } + + protected StyleData style; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGStyle(PropertyList propertyList, StyleData explicitValue) { + this.propertyList = propertyList; + this.style = explicitValue; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public CSSStyleDeclaration getStyle() + { + return this.style.getStyle(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/SVGTransform.java b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGTransform.java new file mode 100644 index 000000000..3c90f82d3 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/SVGTransform.java @@ -0,0 +1,128 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import org.w3c.dom.svg.SVGAnimatedTransformList; + +import java.util.*; + +/** + * + */ +public class SVGTransform extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + return new SVGTransform(propertyList, new TransformData(value)); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new SVGTransform.Maker(); + } + + protected TransformData trans; + + /** + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected SVGTransform(PropertyList propertyList, TransformData explicitValue) { + this.propertyList = propertyList; + this.trans = explicitValue; + } + + /** + * + * @return the length as a Length object + */ + public SVGAnimatedTransformList getTransform() { + return this.trans.getTransform(); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Set.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Set.java new file mode 100644 index 000000000..d35dd254f --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Set.java @@ -0,0 +1,106 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * class representing svg:Set pseudo flow object. + * + */ +public class Set extends SVGObj { + + /** + * inner class for making Set objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Set object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Set object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Set(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Set objects + */ + public static FObj.Maker maker() { + return new Set.Maker(); + } + + /** + * constructs a Set object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Set(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:set"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Stop.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Stop.java new file mode 100644 index 000000000..76f0e1af5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Stop.java @@ -0,0 +1,120 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; +import org.w3c.dom.svg.SVGLength; + +/** + * class representing svg:Stop pseudo flow object. + * + */ +public class Stop extends SVGObj { + + /** + * inner class for making Stop objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Stop object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Stop object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Stop(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Stop objects + */ + public static FObj.Maker maker() { + return new Stop.Maker(); + } + + /** + * constructs a Stop object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Stop(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:stop"; + } + + public SVGStopElement createStop() + { + SVGStopElementImpl sse = new SVGStopElementImpl(); + sse.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + SVGLength offset = ((SVGLengthProperty)this.properties.get("offset")).getSVGLength(); + sse.setOffset(new SVGAnimatedNumberImpl(offset.getValue())); // what about percentages + sse.setId(this.properties.get("id").getString()); + return sse; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Style.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Style.java new file mode 100644 index 000000000..676ec7b56 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Style.java @@ -0,0 +1,125 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + +/** + * class representing svg:Style pseudo flow object. + * + */ +public class Style extends SVGObj { + + /** + * inner class for making Style objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Style object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Style object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Style(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Style objects + */ + public static FObj.Maker maker() { + return new Style.Maker(); + } + + /** + * constructs a Style object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Style(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:style"; + } + + String styleText = ""; + protected void addCharacters(char data[], int start, int length) + { + styleText += new String(data, start, length - start); + } + + public SVGElement createGraphic() + { + SVGStyleElement sse = new SVGStyleElementImpl(styleText); +// sse.setType(this.properties.get("type").getString()); +// sse.setMedia(this.properties.get("media").getString()); +// sse.setTitle(this.properties.get("title").getString()); +// sse.setStyle(styleText); + return sse; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Switch.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Switch.java new file mode 100644 index 000000000..486752f02 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Switch.java @@ -0,0 +1,167 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class Switch extends SVGObj { + + /** + * inner class for making Line objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Line object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Line object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Switch(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Switch objects + */ + public static FObj.Maker maker() { + return new Switch.Maker(); + } + + /** + * constructs a Switch object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Switch(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:switch"; + } + + public SVGElement createGraphic() + { + /* + * There are two options + * 1) add all children and select the correct one when rendering + * 2) select the correct one now and return it rather than a switch element + * Since renderers may have different ideas, leave it up to the renderer + * to select the correct one. + */ + String rf = this.properties.get("requiredFeatures").getString(); + String re = this.properties.get("requiredExtensions").getString(); + String sl = this.properties.get("systemLanguage").getString(); + SVGList strlist; + GraphicElement graphic; + graphic = new SVGSwitchElementImpl(); + if(!rf.equals("notpresent")) { + strlist = new SVGStringList(rf); + graphic.setRequiredFeatures(strlist); + } + if(!re.equals("notpresent")) { + strlist = new SVGStringList(re); + graphic.setRequiredExtensions(strlist); + } + if(!sl.equals("notpresent")) { + strlist = new SVGStringList(sl); + graphic.setSystemLanguage(strlist); + } + + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + SVGElement impl = ((GraphicsCreator)child).createGraphic(); + if(impl instanceof SVGTests) { + SVGTests testable = (SVGTests)impl; + rf = child.getProperty("requiredFeatures").getString(); + re = child.getProperty("requiredExtensions").getString(); + sl = child.getProperty("systemLanguage").getString(); + if(!rf.equals("notpresent")) { + strlist = new SVGStringList(rf); + testable.setRequiredFeatures(strlist); + } + if(!re.equals("notpresent")) { + strlist = new SVGStringList(re); + testable.setRequiredExtensions(strlist); + } + if(!sl.equals("notpresent")) { + strlist = new SVGStringList(sl); + testable.setSystemLanguage(strlist); + } + graphic.appendChild((GraphicElement)impl); + } + } else if(child instanceof Defs) { + } + } + + return graphic; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Symbol.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Symbol.java new file mode 100644 index 000000000..5463055ff --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Symbol.java @@ -0,0 +1,156 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + +import java.util.StringTokenizer; + +/** + * + */ +public class Symbol extends SVGObj { + + /** + * inner class for making Symbol objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Symbol object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Symbol object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Symbol(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Symbol objects + */ + public static FObj.Maker maker() { + return new Symbol.Maker(); + } + + /** + * constructs a Symbol object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Symbol(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:symbol"; + } + + public SVGElement createGraphic() + { + String box = this.properties.get("viewBox").getString(); + StringTokenizer st = new StringTokenizer(box, " "); + float x = 0; + float y = 0; + float width = 0; + float height = 0; + try { + if(st.hasMoreTokens()) { + x = Float.parseFloat(st.nextToken()); + } + if(st.hasMoreTokens()) { + y = Float.parseFloat(st.nextToken()); + } + if(st.hasMoreTokens()) { + width = Float.parseFloat(st.nextToken()); + } + if(st.hasMoreTokens()) { + height = Float.parseFloat(st.nextToken()); + } + } catch(Exception e) { + } + SVGRect rect = new SVGRectImpl(); + rect.setX(x); + rect.setY(y); + rect.setWidth(width); + rect.setHeight(height); + SVGSymbolElementImpl graphic; + graphic = new SVGSymbolElementImpl(); + String id = this.properties.get("id").getString(); + graphic.setId(id); + graphic.setViewBox(new SVGAnimatedRectImpl(rect)); + + int numChildren = this.children.size(); + for (int i = 0; i < numChildren; i++) { + FONode child = (FONode) children.elementAt(i); + if(child instanceof GraphicsCreator) { + SVGElement impl = ((GraphicsCreator)child).createGraphic(); + graphic.appendChild(impl); + } + } + + return graphic; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/TRef.java b/fop-0_14_0_regions/src/org/apache/fop/svg/TRef.java new file mode 100644 index 000000000..8d4f93846 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/TRef.java @@ -0,0 +1,130 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.*; + +/** + * + */ +public class TRef extends SVGObj implements TextElement { + + /** + * inner class for making Line objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Line object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Line object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new TRef(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for TRef objects + */ + public static FObj.Maker maker() { + return new TRef.Maker(); + } + + /** + * constructs a TRef object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected TRef(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:tref"; + } + + public SVGElement createTextElement() + { + SVGTRefElementImpl tref = new SVGTRefElementImpl(); + tref.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + Property prop; + prop = this.properties.get("x"); + SVGAnimatedLengthList xlist = ((SVGLengthListProperty)prop).getSVGLengthList(); + tref.xlist = xlist; + prop = this.properties.get("y"); + SVGAnimatedLengthList ylist = ((SVGLengthListProperty)prop).getSVGLengthList(); + tref.ylist = ylist; + prop = this.properties.get("dx"); + SVGAnimatedLengthList dxlist = ((SVGLengthListProperty)prop).getSVGLengthList(); + tref.dxlist = dxlist; + prop = this.properties.get("dy"); + SVGAnimatedLengthList dylist = ((SVGLengthListProperty)prop).getSVGLengthList(); + tref.dylist = dylist; + tref.ref = this.properties.get("xlink:href").getString(); + tref.setId(this.properties.get("id").getString()); + return tref; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/TSpan.java b/fop-0_14_0_regions/src/org/apache/fop/svg/TSpan.java new file mode 100644 index 000000000..f4b7624c5 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/TSpan.java @@ -0,0 +1,148 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.CharacterDataImpl; +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; +import org.w3c.dom.CharacterData; + +/** + * class representing svg:tspan pseudo flow object. + * + */ +public class TSpan extends SVGObj implements TextElement { + + /** + * inner class for making tspan objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Line object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Line object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new TSpan(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Line objects + */ + public static FObj.Maker maker() { + return new TSpan.Maker(); + } + + SVGTSpanElementImpl tspan = new SVGTSpanElementImpl(); + String text = ""; + /** + * add characters to the string to display. + * + * @param data array of characters + * @param start start offset in character array + * @param length number of characters to add + */ + protected void addCharacters(char data[], int start, int length) + { + this.text = new String(data, start, length - start); + CharacterData cd = new CharacterDataImpl(); + cd.setData(text); + tspan.appendChild(cd); +// tspan.str = this.text; + } + + /** + * constructs a TSpan object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected TSpan(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:tspan"; + } + + public SVGElement createTextElement() + { + tspan.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); +/* CharacterData cd = new CharacterDataImpl(); + cd.setData(text); + tspan.appendChild(cd);*/ + Property prop; + prop = this.properties.get("x"); + tspan.xlist = ((SVGLengthListProperty)prop).getSVGLengthList(); + prop = this.properties.get("y"); + tspan.ylist = ((SVGLengthListProperty)prop).getSVGLengthList(); + prop = this.properties.get("dx"); + tspan.dxlist = ((SVGLengthListProperty)prop).getSVGLengthList(); + prop = this.properties.get("dy"); + tspan.dylist = ((SVGLengthListProperty)prop).getSVGLengthList(); + tspan.setId(this.properties.get("id").getString()); + return tspan; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Text.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Text.java new file mode 100644 index 000000000..35e6ac964 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Text.java @@ -0,0 +1,184 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; +import org.apache.fop.fo.properties.XMLSpace; + +import java.util.*; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGTextElementImpl; +import org.apache.fop.dom.svg.SVGArea; +import org.apache.fop.dom.CharacterDataImpl; + +import org.w3c.dom.svg.SVGElement; +import org.w3c.dom.CharacterData; + +/** + * class representing svg:text pseudo flow object. + * + */ +public class Text extends SVGObj { + + /** + * inner class for making SVG Text objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make an SVG Text object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the SVG Text object + */ + public FObj make(FObj parent, PropertyList propertyList) + throws FOPException { + return new Text(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Text objects + */ + public static FObj.Maker maker() { + return new Text.Maker(); + } + + /** + * the string of text to display + */ + Vector textList = new Vector(); + + /** + * constructs an SVG Text object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Text(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:text"; + } + + SVGTextElementImpl textGraph = new SVGTextElementImpl(); + + /** + * add characters to the string to display. + * + * @param data array of characters + * @param start start offset in character array + * @param length number of characters to add + */ + protected void addCharacters(char data[], int start, int length) + { + textList.addElement(new String(data, start, length - start)); + } + + /** + * The children need to be added in order so that the text data + * is also added in order. + */ + protected void addChild(FONode child) { + super.addChild(child); + if(child instanceof TextElement) { + TextElement te = (TextElement)child; + SVGElement graph = te.createTextElement(); + textList.addElement(graph); + } else { + // error + } + } + + public SVGElement createGraphic() + { + int numChildren = this.textList.size(); + for (int i = 0; i < numChildren; i++) { + Object obj = textList.elementAt(i); + if(obj instanceof SVGElement) { + SVGElement child = (SVGElement)obj; + textGraph.appendChild(child); + } else if(obj instanceof String) { + String str = (String)obj; + CharacterData cd = new CharacterDataImpl(); + cd.setData(str); + textGraph.appendChild(cd); + } +// System.out.println(child); + } + /* retrieve properties */ + textGraph.x = ((SVGLengthProperty)this.properties.get("x")).getSVGLength().getValue(); + textGraph.y = ((SVGLengthProperty)this.properties.get("y")).getSVGLength().getValue(); +// textGraph.textList = textList; + textGraph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + textGraph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + textGraph.setId(this.properties.get("id").getString()); + switch((this.properties.get("xml:space")).getEnum()) { + case XMLSpace.DEFAULT: + textGraph.setXMLspace("default"); + break; + case XMLSpace.PRESERVE: + textGraph.setXMLspace("preserve"); + break; + } + return textGraph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/TextElement.java b/fop-0_14_0_regions/src/org/apache/fop/svg/TextElement.java new file mode 100644 index 000000000..92486066b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/TextElement.java @@ -0,0 +1,63 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +import org.apache.fop.dom.svg.*; + +import org.w3c.dom.svg.SVGElement; + +/** + * + */ +public interface TextElement { + public SVGElement createTextElement(); +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/TextPath.java b/fop-0_14_0_regions/src/org/apache/fop/svg/TextPath.java new file mode 100644 index 000000000..0e1c96799 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/TextPath.java @@ -0,0 +1,124 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * class representing svg:TextPath pseudo flow object. + * + */ +public class TextPath extends SVGObj implements TextElement { + + /** + * inner class for making TextPath objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a TextPath object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the TextPath object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new TextPath(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for TextPath objects + */ + public static FObj.Maker maker() { + return new TextPath.Maker(); + } + + /** + * constructs a TextPath object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected TextPath(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:textPath"; + } + + String text = ""; + protected void addCharacters(char data[], int start, int length) + { + text += new String(data, start, length - start); + } + + public SVGElement createTextElement() + { + SVGTextPathElementImpl graph = null; + String link = this.properties.get("xlink:href").getString(); + graph = new SVGTextPathElementImpl(link, text.trim()); + graph.setId(this.properties.get("id").getString()); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/TextProperty.java b/fop-0_14_0_regions/src/org/apache/fop/svg/TextProperty.java new file mode 100644 index 000000000..48f8153ce --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/TextProperty.java @@ -0,0 +1,131 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "Fop" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.datatypes.*; +import org.apache.fop.apps.FOPException; + +import java.util.*; + +/** + * + */ +public class TextProperty extends Property { + + /** + * inner class for making SVG Length objects. + */ + public static class Maker extends Property.Maker { + + /** + * whether this property is inherited or not. + * + * @return is this inherited? + */ + public boolean isInherited() { return false; } + + /** + * make an SVG Length property with the given value. + * + * @param propertyList the property list this is a member of + * @param value the explicit string value of the property + */ + public Property make(PropertyList propertyList, String value) + throws FOPException { + return new TextProperty(propertyList, value); + } + + /** + * make an SVG Length property with the default value. + * + * @param propertyList the property list the property is a member of + */ + public Property make(PropertyList propertyList) throws FOPException { + return make(propertyList, ""); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for SVG Length objects + */ + public static Property.Maker maker() { + return new TextProperty.Maker(); + } + + /** the length as a Length object */ + protected String str; + + /** + * construct an SVG length (called by the Maker). + * + * @param propertyList the property list this is a member of + * @param explicitValue the explicit value as a Length object + */ + protected TextProperty(PropertyList propertyList, String s) + { + this.propertyList = propertyList; + this.str = s; + } + + /** + * get the length + * + * @return the length as a Length object + */ + public String getString() + { + return this.str; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Title.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Title.java new file mode 100644 index 000000000..a8f8cd89a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Title.java @@ -0,0 +1,119 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +/** + * + */ +public class Title extends SVGObj { + + /** + * inner class for making Title objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Title object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Title object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Title(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Title objects + */ + public static FObj.Maker maker() { + return new Title.Maker(); + } + + /** + * the title string + */ + protected String text = ""; + + /** + * constructs a Title object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Title(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:title"; + } + + /** + * add characters to the string to display. + * + * @param data array of characters + * @param start start offset in character array + * @param length number of characters to add + */ + protected void addCharacters(char data[], int start, int length) { + this.text += new String(data, start, length - start); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/Use.java b/fop-0_14_0_regions/src/org/apache/fop/svg/Use.java new file mode 100644 index 000000000..b8efe193c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/Use.java @@ -0,0 +1,122 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; + +import org.w3c.dom.svg.SVGElement; + +/** + * + */ +public class Use extends SVGObj { + + /** + * inner class for making Use objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a Use object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the Use object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new Use(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for Use objects + */ + public static FObj.Maker maker() { + return new Use.Maker(); + } + + /** + * constructs a Use object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected Use(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:use"; + } + + public SVGElement createGraphic() + { + String str = this.properties.get("xlink:href").getString(); + SVGUseElementImpl graph = new SVGUseElementImpl(str); + graph.setStyle(((SVGStyle)this.properties.get("style")).getStyle()); + graph.setTransform(((SVGTransform)this.properties.get("transform")).getTransform()); + graph.setId(this.properties.get("id").getString()); + graph.setX(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("x")).getSVGLength())); + graph.setY(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("y")).getSVGLength())); + graph.setWidth(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("width")).getSVGLength())); + graph.setHeight(new SVGAnimatedLengthImpl(((SVGLengthProperty)this.properties.get("height")).getSVGLength())); + return graph; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/VKern.java b/fop-0_14_0_regions/src/org/apache/fop/svg/VKern.java new file mode 100644 index 000000000..78c2f67c8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/VKern.java @@ -0,0 +1,105 @@ +/*-- $Id$ -- + + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without modifica- + tion, are permitted provided that the following conditions are met: + + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber . For more information on the Apache + Software Foundation, please see . + + */ + +package org.apache.fop.svg; + +// FOP +import org.apache.fop.fo.*; +import org.apache.fop.layout.Area; +import org.apache.fop.layout.FontState; +import org.apache.fop.apps.FOPException; + +import org.apache.fop.dom.svg.*; +import org.apache.fop.dom.svg.SVGArea; +/** + * + */ +public class VKern extends SVGObj { + + /** + * inner class for making VKern objects. + */ + public static class Maker extends FObj.Maker { + + /** + * make a VKern object. + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + * + * @return the VKern object + */ + public FObj make(FObj parent, PropertyList propertyList) throws FOPException + { + return new VKern(parent, propertyList); + } + } + + /** + * returns the maker for this object. + * + * @return the maker for VKern objects + */ + public static FObj.Maker maker() { + return new VKern.Maker(); + } + + /** + * constructs a VKern object (called by Maker). + * + * @param parent the parent formatting object + * @param propertyList the explicit properties of this object + */ + protected VKern(FObj parent, PropertyList propertyList) { + super(parent, propertyList); + this.name = "svg:vkern"; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/svg/package.html b/fop-0_14_0_regions/src/org/apache/fop/svg/package.html new file mode 100644 index 000000000..537adb42d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/svg/package.html @@ -0,0 +1,7 @@ + +org.apache.fop.svg Package + +

Classes that add basic SVG support to FOP

+

This includes flow objects, areas and properties.

+ + \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/Command.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/Command.java new file mode 100644 index 000000000..fac40424a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/Command.java @@ -0,0 +1,61 @@ +package org.apache.fop.viewer; +/* + Juergen Verwohlt: Juergen.Verwohlt@jcatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jcatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jcatalog.com + */ + +import java.awt.event.ActionEvent; +import org.apache.fop.messaging.MessageHandler; +import javax.swing.AbstractAction; +import javax.swing.ImageIcon; +import java.net.*; + + +/** + * Klasse für UI-Kommandos. Die Kommandos können in das Menüsystem oder + * in eine Toolbar eingefügt werden.
+ * Commands unterstützen mehrsprachigkeit.
+ * Durch überschreiben der Methode doit kann die Klasse customisiert werden. + * Über die Methode undoit kann Undo-Funktionalität unterstützt werden.
+ * + * @author Juergen.Verwohlt@jcatalog.com + * @version 1.0 18.03.99 + */ +public class Command extends AbstractAction { + + public static String IMAGE_DIR = "/org/apache/fop/viewer/Images/"; + + public Command(String name) { + this(name, (ImageIcon)null); + } + + public Command(String name, ImageIcon anIcon) { + super(name, anIcon); + } + + + public Command(String name, String iconName) { + super(name); + String path = IMAGE_DIR + iconName + ".gif"; + URL url = getClass().getResource(path); + if (url == null) { + MessageHandler.errorln("Icon not found: " + path); + } + else + putValue(SMALL_ICON, new ImageIcon(url)); + } + + + public void actionPerformed(ActionEvent e) { + doit(); + } + + public void doit() { + MessageHandler.errorln("Not implemented."); + } + + public void undoit() { + MessageHandler.errorln("Not implemented."); + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/GoToPageDialog.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/GoToPageDialog.java new file mode 100644 index 000000000..c5b1f4198 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/GoToPageDialog.java @@ -0,0 +1,88 @@ +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ + +package org.apache.fop.viewer; + +import java.awt.*; +import javax.swing.*; +import java.awt.event.*; + +import org.apache.fop.messaging.MessageHandler; + +public class GoToPageDialog extends JDialog { + JPanel panel1 = new JPanel(); + GridBagLayout gridBagLayout1 = new GridBagLayout(); + JLabel pgNbLabel = new JLabel(); + JTextField pgNbField = new JTextField(); + JButton okButton = new JButton(); + JButton cancelButton = new JButton(); + + int pageNumber = -1; + + public GoToPageDialog(Frame frame, String title, boolean modal) { + super(frame, title, modal); + try { + jbInit(); + pack(); + } + catch(Exception ex) { + MessageHandler.errorln("GoToPageDialog: Konstruktor: " + ex.getMessage()); + } + } + + public GoToPageDialog() { + this(null, "", false); + } + + void jbInit() throws Exception { + panel1.setLayout(gridBagLayout1); + pgNbLabel.setText("Page number"); + okButton.setText("Ok"); + okButton.addActionListener(new java.awt.event.ActionListener() { + + public void actionPerformed(ActionEvent e) { + okButton_actionPerformed(e); + } + }); + cancelButton.setText("Cancel"); + cancelButton.addActionListener(new java.awt.event.ActionListener() { + + public void actionPerformed(ActionEvent e) { + cancelButton_actionPerformed(e); + } + }); + panel1.setMinimumSize(new Dimension(250, 78)); + getContentPane().add(panel1); + panel1.add(pgNbLabel, new GridBagConstraints(0, 0, 1, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(10, 10, 10, 5), 0, 0)); + panel1.add(pgNbField, new GridBagConstraints(1, 0, 1, 1, 1.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.BOTH, new Insets(10, 5, 10, 10), 0, 0)); + panel1.add(okButton, new GridBagConstraints(0, 1, 1, 1, 0.0, 0.0 + ,GridBagConstraints.EAST, GridBagConstraints.NONE, new Insets(0, 0, 10, 5), 0, 0)); + panel1.add(cancelButton, new GridBagConstraints(1, 1, 1, 1, 0.0, 0.0 + ,GridBagConstraints.WEST, GridBagConstraints.NONE, new Insets(0, 10, 10, 10), 0, 0)); + } + + void okButton_actionPerformed(ActionEvent e) { + try { + pageNumber = Integer.parseInt(pgNbField.getText()); + dispose(); + } catch (Exception ex) { + pgNbField.setText("???"); + } + + } + + void cancelButton_actionPerformed(ActionEvent e) { + pageNumber = -1; + dispose(); + } + + public int getPageNumber() { + return pageNumber; + } +} \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/IconToolBar.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/IconToolBar.java new file mode 100644 index 000000000..8704aec91 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/IconToolBar.java @@ -0,0 +1,35 @@ +package org.apache.fop.viewer; + +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ + + +import javax.swing.*; +import java.beans.PropertyChangeListener; + +public class IconToolBar extends JToolBar { + + public JButton add(Action a) { + String name = (String) a.getValue(Action.NAME); + Icon icon = (Icon) a.getValue(Action.SMALL_ICON); + return add(a, name, icon); + } + + public JButton add(Action a, String name, Icon icon) { + JButton b = new JButton(icon); + b.setToolTipText(name); + b.setEnabled(a.isEnabled()); + b.addActionListener(a); + add(b); + PropertyChangeListener actionPropertyChangeListener = + createActionChangeListener(b); + a.addPropertyChangeListener(actionPropertyChangeListener); + return b; + } +} + + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/Images/Print.gif b/fop-0_14_0_regions/src/org/apache/fop/viewer/Images/Print.gif new file mode 100644 index 0000000000000000000000000000000000000000..e715fe67f5f3d1bcbe5d5c5d3f386cdb3d6c5d10 GIT binary patch literal 992 zcmXX_Pe_z;5S>(Lvq*)M4U$SFN<5g;!RXLJrs*LOTDnxwWekE29<;#2ia}ywK^+>x zaQj1M9YP}l6O`;wPDv0!&|ZW(6fC4cc$(gPxG?+u=9}NVdGF0`M`wHM;qz%q(?5z& z4xji&Y&>%DE<>3N<(x7&d4&7?{Jawmh>eHG>m2GiJP>HeWs1dOp-?ch+1c5tsVP+* z85tQE7!Z+cHrv+L#>{nfbyZbW?&hxU;?8k2b5l2QLrPImb5&PyWmk%eVlL_;F6=_+ zb2evn7H4(_HFHuYaY6y800j!#kWx%AH4`&7qnL(F)l^K`lwvrFq9$U(CKOz7m(^H| z*_c2Ltww4jhAD)3APX>X1v#)m4O4*)Xkek4LPzAH%BmEaFcX=G3ad~^1O*gXlv$ae z7>saNNt9R#s^9@Qq8k=KGZ;V{C<6?PK@nF$0#ktvXkbye6=mcsLg5^gVJ0$WVS`%5+*^P>_Q3dM=BHFuNwuxvvHQ^op5oyY#=BPHc>%@zRh2hfd{xg%6x48G=YHNLKdDs2xX+AfY z`n+@W+UERZWoKVQ&DD~Q<8LOXA20P(bmVuW_vE_9DtZRDHP1Zh9xBhLs-Lbr>dx2S z9$hTyd9W~gEI)X+@zCmR>yP)_#Vto<_B`Fiz-9WA~5 L_g=qbh>rXR0$R@L literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/Images/firstpg.gif b/fop-0_14_0_regions/src/org/apache/fop/viewer/Images/firstpg.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d0315d749b6b2e49c93d3b7d088d193cbb5e5f5 GIT binary patch literal 885 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/Images/prevpg.gif b/fop-0_14_0_regions/src/org/apache/fop/viewer/Images/prevpg.gif new file mode 100644 index 0000000000000000000000000000000000000000..3c8cce4b60d5c4c759888928534a1d8c70d446b0 GIT binary patch literal 867 zcmV-p1DyOvNk%w1VHf}y0QUd@000010RaL60s{jB1Ox;H1qB8M1_uWR2nYxX2?+`c z3JVJh3=9kn4Gj(s4i66x5D*X%5fKs+5)%^>6ciK{6%`g178e&67#J8C85tTH8XFrM z92^`S9UUGX9v>ecARr(iAt53nA|oRsBqSsyB_$>%CMPE+C@3f?DJd!{Dl021EG#T7 zEiEoCE-x=HFfcGNF)=bSGBYzXG&D3dH8nOiHa9mnI5;>tIXOByIy*Z%JUl!-Jv}}? zK0iM{KtMo2K|w-7LPJACL_|bIMMXwNMn^|SNJvOYNl8jdN=r*iOiWBoO-)WtPESuy zP*6}&QBhJ-Qd3h?R8&+|RaI72R##V7SXfwDSy@_IT3cINTwGjTU0q&YUSD5dU|?Wj zVPRroVq;@tWMpJzWo2e&W@l$-XlQ6@X=!R|YHMq2Y;0_8ZEbFDZf|dIaBy&OadC2T za&vQYbaZreb#-=jc6WDoczAeud3kzzdV70&e0+R;eSLm@et&;|fPjF3fq{a8f`fyD zgoK2Jg@uNOhKGlTh=_=ZiHVAeii?YjjEszpjg5|uj*pLzkdTm(k&%*;l9Q8@l$4Z} zm6ev3mY0{8n3$NEnVFiJnwy)OoSdAUot>VZo}ZteprD|kp`oIpqNAguq@<*!rKP5( zrl+T;sHmu^si~@}s;jH3tgNi9t*x%EuCK4Ju&}VPv9YqUva_?Zw6wIfwY9dkwzs#p zxVX5vxw*Q!y1To(yu7@dCU$jHda z$;ryf%FD~k%*@Qq&CSlv&d<-!(9qD)(b3Y<($mw^)YR0~)z#M4*4Nk9*x1lt)=I7_<=;-L_>FMg~>g((4 z?Ck9A?d|UF?(gsK@bK{Q@$vHV^7Hfa^z`)g_4W4l_V@Sq`1ttw`T6?#`uqF){QUg= z{r&#_{{R2~A^8LW006xJEC2ui02lxm06+*p0DB1>NU)&6g9ia9M98qPmNwTELlOrF7q_|RKOO-88f<#HPCc%IJ06WFzox1=4 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/LoadableProperties.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/LoadableProperties.java new file mode 100644 index 000000000..95010f25b --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/LoadableProperties.java @@ -0,0 +1,80 @@ +package org.apache.fop.viewer; + +import java.io.*; +import org.apache.fop.messaging.MessageHandler; +import java.util.*; + +/** + * Erweitert Hashtable um die Methode load. + * Die Zeilen der Textdatei, die mit # oder ! anfangen sind Kommentarzeilen. + * Eine gültige Zeile ist entweder eine Kommentarzeile oder eine Zeile mit dem + * Gleichheitszeichen "in der Mitte". + * Die Klasse LoadableProperties lässt im Gegensatz zu der Klasse Properties die + * Schlüsselwerte mit Leerzeichen zu. + * + * @version 02.12.99 + * @author Stanislav.Gorkhover@jCatalog.com + * + */ +public class LoadableProperties extends Hashtable { + + public LoadableProperties() { + super(); + } + + + public void load(InputStream inStream) throws IOException { + + BufferedReader in = new BufferedReader(new InputStreamReader(inStream, "8859_1")); + + String aKey; + String aValue; + int index; + String line = getNextLine(in); + while (line != null) { + line = line.trim(); + if (isValid(line)) { + index = line.indexOf("="); + aKey = line.substring(0, index); + aValue = line.substring(index + 1); + put(aKey, aValue); + } + line = getNextLine(in); + } + } + + + private boolean isValid(String str) { + if (str == null) + return false; + if (str.length() > 0) { + if (str.startsWith("#") || str.startsWith("!")) { + return false; + } + } + else { + return false; + } + + int index = str.indexOf("="); + if (index > 0 && str.length() > index) { + return true; + } + else { + MessageHandler.logln(getClass().getName() + ": load(): invalid line " + + str + "." + " Character '=' missed."); + return false; + } + } + + private String getNextLine(BufferedReader br) { + try { + return br.readLine(); + } catch (Exception e) { + return null; + } + + } + + +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/MessageException.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/MessageException.java new file mode 100644 index 000000000..53da10fc3 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/MessageException.java @@ -0,0 +1,68 @@ +package org.apache.fop.viewer; + +import java.lang.Exception; + +/** + * Die Klasse MessageException ist eine Exception, die + * mit einer Meldung und deren Parametern versehen werden kann. + * Dadurch kann die Meldung über den Exception-Mechanismus an die + * Aufrufer hochgereicht werden, bis schliesslich ein Aufrufer die + * Meldung zur Anzeige bringt. + * + * @author Juergen.Verwohlt@jCatalog.com + * @version 1.0 28.05.99 + * + */ +public class MessageException extends Exception { + + /** Angabe der auslösenden Exception, wie z.B. NullPointerException. + * Dieses Feld ist optional. + */ + protected Exception exception; + + /** + * ID der Meldung, die für diese Exception ausgegeben werden soll + */ + protected String messageId; + + /** + * Parameterliste zur Meldung + */ + protected String[] parameterList; + + + // Konstruktoren + + public MessageException() { + this("UNKNOWN_EXCEPTION"); + } + + public MessageException(String aMessageId) { + this(aMessageId, null); + } + + public MessageException(String aMessageId, String[] aParameterList) { + this(aMessageId, aParameterList, null); + } + + public MessageException(String aMessageId, String[] aParameterList, Exception anException) { + super(aMessageId); + messageId = aMessageId; + parameterList = aParameterList; + exception = anException; + } + + // Zugriffsmethoden + + public String getMessageId() { + return messageId; + } + + public String[] getParameterList() { + return parameterList; + } + + public Exception getException() { + return exception; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/MessagesDialog.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/MessagesDialog.java new file mode 100644 index 000000000..33b763b0c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/MessagesDialog.java @@ -0,0 +1,230 @@ +package org.apache.fop.viewer; + +import javax.swing.*; + +import java.beans.*; +import java.io.*; +import java.util.*; +import java.awt.*; +import java.awt.event.*; + + +import org.apache.fop.apps.*; + + +/** + * Die Klasse MessagesDialog dient der Anzeige von Meldungen. + * Die Klasse erweitert JOptionPane um die Möglichkeit, auf Knopfdruck + * eine Detailanzeige einzublenden, in der z.B. bei Fehlern der StackTrace ausgegeben + * werden kann. + * + * @author Juergen.Verwohlt@jCatalog.com + * @version 1.0 09.06.99 + */ +public class MessagesDialog extends JOptionPane { + + static Translator res; + + public static void setTranslator(Translator aRes) { + res = aRes; + iniConstants(); + } + + + static String DETAIL_OPTION; + static String YES_OPTION; + static String NO_OPTION; + static String CANCEL_OPTION; + static String OK_OPTION; + + static String[] defaultDetailOption; + static String[] yesNoDetailOption; + static String[] yesNoCancelDetailOption; + static String[] okCancelDetailOption; + + static String[] defaultOption; + static String[] yesNoOption; + static String[] yesNoCancelOption; + static String[] okCancelOption; + + + + private static void iniConstants() { + DETAIL_OPTION = res.getString("Details"); + YES_OPTION = res.getString("Yes"); + NO_OPTION = res.getString("No"); + CANCEL_OPTION = res.getString("Cancel"); + OK_OPTION = res.getString("Ok"); + + defaultDetailOption = new String[] { OK_OPTION, DETAIL_OPTION }; + yesNoDetailOption = new String[] { YES_OPTION, NO_OPTION, DETAIL_OPTION }; + yesNoCancelDetailOption = new String[] { YES_OPTION, NO_OPTION, CANCEL_OPTION, DETAIL_OPTION }; + okCancelDetailOption = new String[] { OK_OPTION, CANCEL_OPTION, DETAIL_OPTION }; + + defaultOption = new String[] { OK_OPTION }; + yesNoOption = new String[] { YES_OPTION, NO_OPTION }; + yesNoCancelOption = new String[] { YES_OPTION, NO_OPTION, CANCEL_OPTION }; + okCancelOption = new String[] { OK_OPTION, CANCEL_OPTION }; + } + + + protected String detailInformation = null; + protected JDialog dialog = null; + protected boolean showsDetails = false; + +// MessagesDialog.showConfirmDialog(null,preparedMes,title, +// optionTypeIndex,messageTypeIndex); + + public MessagesDialog(Object message, int messageType, int optionType, + Icon icon, Object[] options, Object initialValue) { + super(message, messageType, optionType, icon, options, initialValue); + setMinimumSize(new Dimension(240, 96)); + } + + public static int showConfirmDialog(Component parentComponent, Object message, + String title, int optionType, int messageType) { + Object[] options; + + switch (optionType) { + case JOptionPane.YES_NO_OPTION: + options = yesNoOption; break; + case JOptionPane.YES_NO_CANCEL_OPTION: + options = yesNoCancelOption; break; + case JOptionPane.OK_CANCEL_OPTION: + options = okCancelOption; break; + default: + options = defaultOption; + } + + MessagesDialog pane = new MessagesDialog(message, messageType, + JOptionPane.DEFAULT_OPTION, null, + options, options[0]); + + pane.setInitialValue(options[0]); + + JDialog dialog = pane.createDialog(parentComponent, title); + + pane.setDialog(dialog); + pane.selectInitialValue(); + + dialog.show(); + + Object selectedValue = pane.getValue(); + + if(selectedValue == null) + return CLOSED_OPTION; + + if (selectedValue.equals(OK_OPTION)) + return JOptionPane.OK_OPTION; + if (selectedValue.equals(CANCEL_OPTION)) + return JOptionPane.CANCEL_OPTION; + if (selectedValue.equals(YES_OPTION)) + return JOptionPane.YES_OPTION; + if (selectedValue.equals(NO_OPTION)) + return JOptionPane.NO_OPTION; + + return CLOSED_OPTION; + } + + /** + * Öffnet ein Dialogfenster, bei dem zusätzlich zu den spez. Buttons noch ein + * 'Detail'-Button erscheint. Wird dieser Knopf vom Benutzer betätigt, erscheint + * die übergebene Detailinformation in einem scrollbaren Bereich des Dialogs. + */ + public static int showDetailDialog(Component parentComponent, Object message, String title, int optionType, + int messageType, Icon icon, String newDetailInformation) { + Object[] options; + + switch (optionType) { + case JOptionPane.YES_NO_OPTION: + options = yesNoDetailOption; break; + case JOptionPane.YES_NO_CANCEL_OPTION: + options = yesNoCancelDetailOption; break; + case JOptionPane.OK_CANCEL_OPTION: + options = okCancelDetailOption; break; + default: + options = defaultDetailOption; + } + + MessagesDialog pane = new MessagesDialog(message, messageType, + JOptionPane.DEFAULT_OPTION, icon, + options, options[0]); + + pane.setDetailInformation(newDetailInformation); + pane.setInitialValue(options[0]); + + JDialog dialog = pane.createDialog(parentComponent, title); + + pane.setDialog(dialog); + pane.selectInitialValue(); + + dialog.show(); + + Object selectedValue = pane.getValue(); + + if(selectedValue == null) + return CLOSED_OPTION; + + if (((String)selectedValue).equals(DETAIL_OPTION)) + return CLOSED_OPTION; + + if (selectedValue.equals(OK_OPTION)) + return JOptionPane.OK_OPTION; + if (selectedValue.equals(CANCEL_OPTION)) + return JOptionPane.CANCEL_OPTION; + if (selectedValue.equals(YES_OPTION)) + return JOptionPane.YES_OPTION; + if (selectedValue.equals(NO_OPTION)) + return JOptionPane.NO_OPTION; + + return CLOSED_OPTION; + } + + /** + * Die Methode fügt in den übergebenen Dialog eine scrollbare Textkomponente ein, + * in der die Detailinformation angezeigt wird. + * + * @param JDialog dialog Der Dialog, in den die Textkomponente eingefügt werden soll + */ + protected void displayDetails(JDialog dialog) { + if (getDetailInformation() != null && dialog != null && showsDetails == false) { + showsDetails = true; + JScrollPane aScrollPane = new JScrollPane(); + JTextArea aTextArea = new JTextArea(); + StringWriter aStringWriter = new StringWriter(); + + aTextArea.setText(getDetailInformation()); + aTextArea.setEditable(false); + + aScrollPane.getViewport().add(aTextArea, null); + dialog.getContentPane().add(aScrollPane, BorderLayout.SOUTH); + aScrollPane.setPreferredSize(new Dimension(320, 240)); + dialog.pack(); + } + } + + // Zugriff + + public void setValue(Object aValue) { + if (aValue != null && DETAIL_OPTION.equals(aValue)) + displayDetails(getDialog()); + else + super.setValue(aValue); + } + + public String getDetailInformation() { + return detailInformation; + } + + public void setDetailInformation(String aValue) { + detailInformation = aValue; + } + + public JDialog getDialog() { + return dialog; + } + + public void setDialog(JDialog aValue) { + dialog = aValue; + } +} diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialog.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialog.java new file mode 100644 index 000000000..8aeb7325c --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialog.java @@ -0,0 +1,388 @@ +package org.apache.fop.viewer; + +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ + +import java.awt.*; +import java.awt.print.*; +import java.awt.event.*; +import java.awt.image.BufferedImage; + +import javax.swing.*; + +import org.apache.fop.layout.*; +import org.apache.fop.render.awt.*; + +/** + * Frame and User Interface for Preview + */ +public class PreviewDialog extends JFrame implements ProgressListener { + + protected Translator res; + + protected int currentPage = 0; + protected int pageCount = 0; + + protected AWTRenderer renderer; + + protected IconToolBar toolBar = new IconToolBar(); + + protected Command printAction; + protected Command firstPageAction; + protected Command previousPageAction; + protected Command nextPageAction; + protected Command lastPageAction; + + protected JLabel zoomLabel = new JLabel(); //{public float getAlignmentY() { return 0.0f; }}; + protected JComboBox scale = new JComboBox() { + public float getAlignmentY() { return 0.5f; }}; + + protected JScrollPane previewArea = new JScrollPane(); + // protected JLabel statusBar = new JLabel(); + protected JPanel statusBar = new JPanel(); + protected GridBagLayout statusBarLayout = new GridBagLayout(); + + protected JLabel statisticsStatus = new JLabel(); + protected JLabel processStatus = new JLabel(); + protected JLabel infoStatus = new JLabel(); + protected JLabel previewImageLabel = new JLabel(); + + /** + * Create a new PreviewDialog that uses the given renderer and translator. + * + * @param aRenderer the to use renderer + * @param aRes the to use translator + */ + public PreviewDialog(AWTRenderer aRenderer, Translator aRes) { + res = aRes; + renderer = aRenderer; + + printAction = new Command(res.getString("Print"), "Print") { + public void doit() {print();}}; + firstPageAction = + new Command(res.getString("First page"), "firstpg") { + public void doit() {goToFirstPage(null);}}; + previousPageAction = + new Command(res.getString("Previous page"), "prevpg") { + public void doit() {goToPreviousPage(null);}}; + nextPageAction = new Command(res.getString("Next page"),"nextpg") { + public void doit() {goToNextPage(null);}}; + lastPageAction = new Command(res.getString("Last page"), "lastpg") { + public void doit() {goToLastPage(null);}}; + + setDefaultCloseOperation(DISPOSE_ON_CLOSE); + this.setSize(new Dimension(379, 476)); + previewArea.setMinimumSize(new Dimension(50, 50)); + + this.setTitle("FOP: AWT-" + res.getString("Preview")); + + scale.addItem("25"); + scale.addItem("50"); + scale.addItem("75"); + scale.addItem("100"); + scale.addItem("150"); + scale.addItem("200"); + + scale.setMaximumSize(new Dimension(80, 24)); + scale.setPreferredSize(new Dimension(80, 24)); + + scale.addActionListener(new java.awt.event.ActionListener() { + public void actionPerformed(ActionEvent e) { + scale_actionPerformed(e); + } + }); + + scale.setSelectedItem("100"); + renderer.setScaleFactor(100.0); + + zoomLabel.setText(res.getString("Zoom")); + + this.setJMenuBar(setupMenue()); + + this.getContentPane().add(toolBar, BorderLayout.NORTH); + + toolBar.add(printAction); + toolBar.addSeparator(); + toolBar.add(firstPageAction); + toolBar.add(previousPageAction); + toolBar.add(nextPageAction); + toolBar.add(lastPageAction); + toolBar.addSeparator(); + toolBar.add(zoomLabel, null); + toolBar.addSeparator(); + toolBar.add(scale, null); + + this.getContentPane().add(previewArea, BorderLayout.CENTER); + this.getContentPane().add(statusBar, BorderLayout.SOUTH); + + statisticsStatus.setBorder(BorderFactory.createEtchedBorder()); + processStatus.setBorder(BorderFactory.createEtchedBorder()); + infoStatus.setBorder(BorderFactory.createEtchedBorder()); + + statusBar.setLayout(statusBarLayout); + + processStatus.setPreferredSize(new Dimension(200, 21)); + statisticsStatus.setPreferredSize(new Dimension(100, 21)); + infoStatus.setPreferredSize(new Dimension(100, 21)); + processStatus.setMinimumSize(new Dimension(200, 21)); + statisticsStatus.setMinimumSize(new Dimension(100, 21)); + infoStatus.setMinimumSize(new Dimension(100, 21)); + statusBar.add(processStatus, + new GridBagConstraints(0, 0, 2, 1, 2.0, 0.0, + GridBagConstraints.CENTER, + GridBagConstraints.HORIZONTAL, + new Insets(0, 0, 0, 5), 0, 0)); + statusBar.add(statisticsStatus, + new GridBagConstraints(2, 0, 1, 2, 1.0, 0.0, + GridBagConstraints.CENTER, + GridBagConstraints.HORIZONTAL, + new Insets(0, 0, 0, 5), 0, 0)); + statusBar.add(infoStatus, + new GridBagConstraints(3, 0, 1, 1, 1.0, 0.0, + GridBagConstraints.CENTER, + GridBagConstraints.HORIZONTAL, + new Insets(0, 0, 0, 0), 0, 0)); + + previewArea.getViewport().add(previewImageLabel); + showPage(); + } + + /** + * Create a new menubar to be shown in this window. + * + * @return the newly created menubar + */ + private JMenuBar setupMenue() { + JMenuBar menuBar; + JMenuItem menuItem; + JMenu menu; + JMenu subMenu; + + menuBar = new JMenuBar(); + menu = new JMenu(res.getString("File")); + subMenu = new JMenu("OutputFormat"); + subMenu.add(new Command("mHTML")); + subMenu.add(new Command("mPDF")); + subMenu.add(new Command("mRTF")); + subMenu.add(new Command("mTEXT")); + // menu.add(subMenu); + // menu.addSeparator(); + menu.add(new Command(res.getString("Print")) { + public void doit(){print();}}); + menu.addSeparator(); + menu.add(new Command(res.getString("Exit")) { + public void doit() {dispose();}} ); + menuBar.add(menu); + menu = new JMenu(res.getString("View")); + menu.add(new Command(res.getString("First page")) { + public void doit() {goToFirstPage(null);}} ); + menu.add(new Command(res.getString("Previous page")) { + public void doit() {goToPreviousPage(null);}} ); + menu.add(new Command(res.getString("Next page")) { + public void doit() {goToNextPage(null);}} ); + menu.add(new Command(res.getString("Last page")) { + public void doit() {goToLastPage(null);}} ); + menu.add(new Command(res.getString("Go to Page") + " ...") { + public void doit() {goToPage(null);}} ); + menu.addSeparator(); + subMenu = new JMenu(res.getString("Zoom")); + subMenu.add(new Command("25%") { + public void doit() {setScale(25.0);}} ); + subMenu.add(new Command("50%") { + public void doit() {setScale(50.0);}} ); + subMenu.add(new Command("75%") { + public void doit() {setScale(75.0);}} ); + subMenu.add(new Command("100%") { + public void doit() {setScale(100.0);}} ); + subMenu.add(new Command("150%") { + public void doit() {setScale(150.0);}} ); + subMenu.add(new Command("200%") { + public void doit() {setScale(200.0);}} ); + menu.add(subMenu); + menu.addSeparator(); + menu.add(new Command(res.getString("Default zoom")) { + public void doit() {setScale(100.0);}} ); + menuBar.add(menu); + menu = new JMenu(res.getString("Help")); + menu.add(new Command(res.getString("Index"))); + menu.addSeparator(); + menu.add(new Command(res.getString("Introduction"))); + menu.addSeparator(); + menu.add(new Command(res.getString("About")){ + public void doit() {startHelpAbout(null);}} ); + menuBar.add(menu); + return menuBar; + } + + //Aktion Hilfe | Info durchgeführt + + /** + * Show the About box + * + * @param e a value of type 'ActionEvent' + */ + public void startHelpAbout(ActionEvent e) { + PreviewDialogAboutBox dlg = new PreviewDialogAboutBox(this); + Dimension dlgSize = dlg.getPreferredSize(); + Dimension frmSize = getSize(); + Point loc = getLocation(); + dlg.setLocation((frmSize.width - dlgSize.width) / 2 + loc.x, + (frmSize.height - dlgSize.height) / 2 + loc.y); + dlg.setModal(true); + dlg.show(); + } + + /** + * Change the current visible page + * + * @param number the page number to go to + */ + private void goToPage(int number) { + currentPage = number; + renderer.setPageNumber(number); + showPage(); + } + + /** + * Shows the previous page. + */ + private void goToPreviousPage(ActionEvent e) { + if (currentPage <= 0) + return; + currentPage--; + goToPage(currentPage); + } + + + /** + * Shows the next page. + */ + private void goToNextPage(ActionEvent e) { + if (currentPage >= pageCount - 1) + return; + currentPage++; + goToPage(currentPage); + } + + /** + * Shows the last page. + */ + private void goToLastPage(ActionEvent e) { + + if (currentPage == pageCount - 1) return; + currentPage = pageCount - 1; + + goToPage(currentPage); + } + + /** + * Shows a page by number. + */ + private void goToPage(ActionEvent e) { + + GoToPageDialog d = new GoToPageDialog(this, res.getString("Go to Page"), true); + d.setLocation((int) getLocation().getX() + 50, (int) getLocation().getY() + 50); + d.show(); + currentPage = d.getPageNumber(); + + if (currentPage < 1 || currentPage > pageCount) + return; + + currentPage--; + + goToPage(currentPage); + } + + /** + * Shows the first page. + */ + private void goToFirstPage(ActionEvent e) { + if (currentPage == 0) + return; + currentPage = 0; + goToPage(currentPage); + } + + private void print() { + PrinterJob pj = PrinterJob.getPrinterJob(); + // Nicht nötig, Pageable get a Printable. + // pj.setPrintable(renderer); + pj.setPageable(renderer); + + if (pj.printDialog()) { + try { + pj.print(); + } catch(PrinterException pe) { + pe.printStackTrace(); + } + } + } + + public void setScale(double scaleFactor) { + + if (scaleFactor == 25.0) + scale.setSelectedIndex(0); + else if (scaleFactor == 50.0) + scale.setSelectedIndex(1); + else if (scaleFactor == 75.0) + scale.setSelectedIndex(2); + else if (scaleFactor == 100.0) + scale.setSelectedIndex(3); + else if (scaleFactor == 150.0) + scale.setSelectedIndex(4); + else if (scaleFactor == 200.0) + scale.setSelectedIndex(5); + + renderer.setScaleFactor(scaleFactor); + showPage(); + } + + void scale_actionPerformed(ActionEvent e) { + setScale(new Double((String)scale.getSelectedItem()).doubleValue()); + } + + public void progress(int percentage) { + processStatus.setText(percentage + "%"); + } + + public void progress(int percentage, String message) { + processStatus.setText(message + " " + percentage + "%"); + } + + public void progress(String message) { + processStatus.setText(message); + } + + public void showPage() { + BufferedImage pageImage = null; + Graphics graphics = null; + + + renderer.render(currentPage); + pageImage = renderer.getLastRenderedPage(); + if (pageImage == null) + return; + graphics = pageImage.getGraphics(); + graphics.setColor(Color.black); + graphics.drawRect(0, 0, pageImage.getWidth() - 1, + pageImage.getHeight() -1 ); + + previewImageLabel.setIcon(new ImageIcon(pageImage)); + + pageCount = renderer.getPageCount(); + + statisticsStatus.setText(res.getString("Page") + " " + + (currentPage + 1) + " " + + res.getString("of") + " " + + pageCount); + } + + public void dispose() { + System.exit(0); + } +} // class PreviewDialog + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialogAboutBox.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialogAboutBox.java new file mode 100644 index 000000000..9aea565d6 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/PreviewDialogAboutBox.java @@ -0,0 +1,98 @@ + +package org.apache.fop.viewer; + +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ + + +import java.awt.*; +import java.awt.event.*; +import javax.swing.*; +import javax.swing.border.*; + +import org.apache.fop.apps.Version; + + + +public class PreviewDialogAboutBox extends Dialog implements ActionListener { + + JPanel panel1 = new JPanel(); + JPanel panel2 = new JPanel(); + JPanel insetsPanel1 = new JPanel(); + JPanel insetsPanel2 = new JPanel(); + JPanel insetsPanel3 = new JPanel(); + JButton button1 = new JButton(); + JLabel imageControl1 = new JLabel(); + ImageIcon imageIcon; + JLabel label1 = new JLabel(); + JLabel label2 = new JLabel(); + JLabel label3 = new JLabel(); + JLabel label4 = new JLabel(); + BorderLayout borderLayout1 = new BorderLayout(); + BorderLayout borderLayout2 = new BorderLayout(); + FlowLayout flowLayout1 = new FlowLayout(); + FlowLayout flowLayout2 = new FlowLayout(); + GridLayout gridLayout1 = new GridLayout(); + String product = "FOP AWT-Preview"; + String version = "Version: " + Version.getVersion(); + String copyright = "See xml.apache.org"; + String comments = "";//"Print Preview"; + + public PreviewDialogAboutBox(Frame parent) { + super(parent); + enableEvents(AWTEvent.WINDOW_EVENT_MASK); + + //imageIcon = new ImageIcon(getClass().getResource("Hier der Grafikname")); + this.setTitle("Info"); + setResizable(false); + panel1.setLayout(borderLayout1); + panel2.setLayout(borderLayout2); + insetsPanel1.setLayout(flowLayout1); + insetsPanel2.setLayout(flowLayout1); + insetsPanel2.setBorder(new EmptyBorder(10, 10, 10, 10)); + gridLayout1.setRows(4); + gridLayout1.setColumns(1); + label1.setText(product); + label2.setText(version); + label3.setText(copyright); + label4.setText(comments); + insetsPanel3.setLayout(gridLayout1); + insetsPanel3.setBorder(new EmptyBorder(10, 60, 10, 10)); + button1.setText("OK"); + button1.addActionListener(this); + insetsPanel2.add(imageControl1, null); + panel2.add(insetsPanel2, BorderLayout.WEST); + this.add(panel1, null); + insetsPanel3.add(label1, null); + insetsPanel3.add(label2, null); + insetsPanel3.add(label3, null); + insetsPanel3.add(label4, null); + panel2.add(insetsPanel3, BorderLayout.CENTER); + insetsPanel1.add(button1, null); + panel1.add(insetsPanel1, BorderLayout.SOUTH); + panel1.add(panel2, BorderLayout.NORTH); + pack(); + } + + protected void processWindowEvent(WindowEvent e) { + if (e.getID() == WindowEvent.WINDOW_CLOSING) { + cancel(); + } + super.processWindowEvent(e); + } + + void cancel() { + dispose(); + } + + public void actionPerformed(ActionEvent e) { + if (e.getSource() == button1) { + cancel(); + } + } +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/ProgressListener.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/ProgressListener.java new file mode 100644 index 000000000..751838917 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/ProgressListener.java @@ -0,0 +1,16 @@ +package org.apache.fop.viewer; + +/* + originally contributed by + Juergen Verwohlt: Juergen.Verwohlt@jCatalog.com, + Rainer Steinkuhle: Rainer.Steinkuhle@jCatalog.com, + Stanislav Gorkhover: Stanislav.Gorkhover@jCatalog.com + */ + + +public interface ProgressListener { + public void progress(int percentage); + public void progress(String message); + public void progress(int percentage, String message); +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/SecureResourceBundle.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/SecureResourceBundle.java new file mode 100644 index 000000000..3f68d6c16 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/SecureResourceBundle.java @@ -0,0 +1,98 @@ +package org.apache.fop.viewer; + +import java.util.*; +import org.apache.fop.messaging.MessageHandler; +import java.io.*; + + +/** + * Die Klasse SecureResourceBundle ist ein Resourceundle, das im Falle eines fehlenden + * Eintrages keinen Absturz verursacht, sondern die Meldung + * Key key not found zurückgibt. + * @see PropertyResourceBundle + * + * @author Stanislav.Gorkhover@jCatalog.com + * @version 1.0 18.03.1999 + */ +public class SecureResourceBundle extends ResourceBundle implements Translator { + + // Fehlende keys mit einer Meldung zurückgeben. + private boolean isMissingEmphasized = false; + + //private Properties lookup = new Properties(); + private LoadableProperties lookup = new LoadableProperties(); + + private boolean isSourceFound = true; + + public void setMissingEmphasized(boolean flag) { + isMissingEmphasized = flag; + } + + /** + * Kreiert ein ResourceBundle mit der Quelle in in. + */ + + public SecureResourceBundle(InputStream in) { + try { + lookup.load(in); + } catch(Exception ex) { + MessageHandler.logln("Abgefangene Exception: " + ex.getMessage()); + isSourceFound = false; + } + } + + + + public Enumeration getKeys() { + return lookup.keys(); + } + + + + /** + * Händelt den abgefragten Key, liefert entweder den zugehörigen Wert oder eine Meldung. + * Die null wird nie zurückgegeben. + * Schreibt die fehlenden Suchschlüssel in die Protokoll-Datei. + * @return Object
    + *
  • den zu dem Suchschlüssel key gefundenen Wert, falls vorhanden,
    + *
  • Meldung Key key not found, falls der Suchschlüssel fehlt + * und die Eigenschaft "jCatalog.DevelopmentStartModus" in der ini-Datei aus true gesetzt ist. + *
  • Meldung Key is null, falls der Suchschlüssel null ist. + *
+ * + */ + public Object handleGetObject(String key) { + + if (key == null) + return "Key is null"; + + Object obj = lookup.get(key); + if (obj != null) + return obj; + else { + if (isMissingEmphasized) { + MessageHandler.logln(getClass().getName() + ": missing key: " + key); + return getMissedRepresentation(key.toString()); + } + else + return key.toString(); + } + } + + /** + * Stellt fest, ob es den Key gibt. + */ + public boolean contains(String key) { + return (key == null || lookup.get(key) == null) ? false : true; + } + + + private String getMissedRepresentation(String str) { + return ""; + } + + public boolean isSourceFound() { + return isSourceFound; + } + +} \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/Translator.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/Translator.java new file mode 100644 index 000000000..6c4da08f8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/Translator.java @@ -0,0 +1,29 @@ +package org.apache.fop.viewer; + + +/** + * Definition für die Übersetzer-Klassen. + * + * @version 03.12.99 + * @author Stanislav.Gorkhover@jCatalog.com + * + */ +public interface Translator { + + /** + * Übersetzt ein Wort. + */ + public String getString(String key); + /** + * Ein Translator soll die fehlenden keys hervorheben können. + */ + public void setMissingEmphasized(boolean b); + /** + * Gibt an ob die Übersetzungsquelle gefunden ist. + */ + public boolean isSourceFound(); + /** + * Gibt an ob ein Key in der Übersetzungsquelle vorhanden ist. + */ + public boolean contains(String key); +} \ No newline at end of file diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/UserMessage.java b/fop-0_14_0_regions/src/org/apache/fop/viewer/UserMessage.java new file mode 100644 index 000000000..360cbb236 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/UserMessage.java @@ -0,0 +1,346 @@ +package org.apache.fop.viewer; + +import java.awt.*; +import org.apache.fop.messaging.MessageHandler; +import java.io.*; +import java.awt.event.*; +import java.util.*; +import javax.swing.*; +import javax.swing.JComponent.*; + + + +/** + * Klasse UserMessage ist ein utility zum Abfragen oder zum Informieren des Benutzers.
+ * Eine Meldung besteht aus dem Identifikator (Suchschlüssel im Meldungspool), einem Dialogtitel, einem Buttonset und + * dem Meldungstext mit eventuellen Platzhaltern für die Parameter. + * + * @author S. Gorkhover + * @version 18.03.1999 + * + * @changed 23.04.99 Juergen.Verwohlt@jCatalog.com + * @subject Weitere Ausgabemethoden: show(String, String) und show(String,String,Frame) + * + * @changed 28.05.99 Juergen.Verwohlt@jCatalog.com + * @subject MessageException unterstützen + * + * @changed 09.06.99 Juergen.Verwohlt@jCatalog.com + * @subject Neue Klasse MessagesException zur Anzeige verwenden + */ +public class UserMessage { + + private static Translator res = null; + + public static void setTranslator(Translator aRes) { + res = aRes; + if (res == null) { + MessageHandler.logln("UserMessage: setTranslator(null) !"); + res = new SecureResourceBundle(null); + } + + MessagesDialog.setTranslator(res); + } + + + // Zulässige Werte für Dialogart: + /** + * Möglicher Wert des Meldungstypes. Fenster-Title "Info" (de). + */ + private static final int INFO = JOptionPane.PLAIN_MESSAGE; + /** + * Möglicher Wert des Meldungstypes. Fenster-Title "Warnung" (de). + */ + private static final int WARNING = JOptionPane.WARNING_MESSAGE; + /** + * Möglicher Wert des Meldungstypes. Fenster-Title "Frage" (de). + */ + private static final int QUESTION = JOptionPane.QUESTION_MESSAGE; + /** + * Möglicher Wert des Meldungstypes. Fenster-Title "Fehler" (de). + */ + private static final int ERROR = JOptionPane.ERROR_MESSAGE; + /** + * Möglicher Wert des Meldungstypes. Fenster-Title "Systemfehler" (de). + */ + private static final int SYS_ERROR = JOptionPane.ERROR_MESSAGE; + + + + /* Style Constanten orientieren sich auf die + * Constanten der ButtonDialog-Klasse und legen das Dialog-ButtonSet fest. + */ + /** Wert für Setzten keines Buttons */ + public static final int STYLE_NOBUTTON = -2; + /** Wert für Setzten von nur Ja-Button.*/ + public static final int STYLE_Y = JOptionPane.DEFAULT_OPTION; + //ButtonDialog.YES; // = 1 + /** Wert für Setzten von Ja- und Nein-Buttons.*/ + public static final int STYLE_Y_N = JOptionPane.YES_NO_OPTION; + //ButtonDialog.YES_NO; // = 2; + /** Wert für Setzten von Ja-, Nein-und Abbruch Buttons.*/ + public static final int STYLE_Y_N_C = JOptionPane.YES_NO_CANCEL_OPTION; + //ButtonDialog.YES_NO_CANCEL; // = 3; + + + // Platzhalter für Parameter in der Properties-Datei + private static final String PARAMETER_TAG = "&&&"; + + + /** + * Benutzer-Antwort-Constanten orientieren sich auf die + * Constanten der ButtonDialog-Klasse + */ + /**Möglicher Rückgabewert @see ButtonDialog*/ + public static final int YES = JOptionPane.YES_OPTION; + //ButtonDialog.YES; // = 2 + /**Möglicher Rückgabewert @see ButtonDialog*/ + public static final int NO = JOptionPane.NO_OPTION; + //ButtonDialog.NO; // = 4; + /**Möglicher Rückgabewert @see ButtonDialog*/ + public static final int CANCEL = JOptionPane.CANCEL_OPTION; + //ButtonDialog.CANCEL; // = 8; + + + // Default-Values + private static int buttonType = STYLE_Y; + private static int iconType = WARNING; + private static String currentIconName = ""; + private static String actMessId = null; + // private static MessagesDialog nobuttonDialog = null; + + + /** + * Ersetzt die eventuellen Platzhalter durch die übergebenen Parameter + */ + static String prepareMessage(String rawText, String[] par) { + MessageHandler.logln("prepareMessage(): " + rawText + ", parameter: " + par); + int index = rawText.indexOf(PARAMETER_TAG); + String composedMess = ""; + if ((index == -1) && (par == null)) return rawText; + if ((index != -1) && (par == null)) { + MessageHandler.logln("Message " + actMessId+ " erwartet Parameter. Aufgerufen ohne Parameter"); + return rawText; + } + if ((index == -1) && (par != null)) { + MessageHandler.logln("Message " + actMessId + " erwartet keine Parameter. Aufgerufen mit folgenden Parametern:"); + for(int i = 0; i < par.length; ++i) + MessageHandler.logln(par[i].toString()); + return rawText; + } + int tagCount = 0; + while (rawText.indexOf(PARAMETER_TAG) != -1) { + index = rawText.indexOf(PARAMETER_TAG); + try { + composedMess += rawText.substring(0, index) + par[tagCount]; + } catch(ArrayIndexOutOfBoundsException ex) { + MessageHandler.logln("Anzahl der übergebenen Parameter zu der Meldung " + actMessId + " ist weniger als erwartet."); + ex.printStackTrace(); + return composedMess + rawText; + } + rawText = rawText.substring(index+PARAMETER_TAG.length()); + tagCount++; + } + composedMess += rawText; + if (tagCount != par.length) + MessageHandler.logln("Die zu der Meldung " + actMessId + " übergebenen Parameter sind mehr als die Meldung vorsieht."); + return composedMess; + } + + /** + * Gibt den Title fürs Dialogfenster. + * Dieser wird durch die Dialogart festgelegt + * (erster Teil in der MeldungsDefinition in der Properties-Datei). + */ + static String getTitle(String strVal) { + String title = null; + int choice = getValue(strVal); + switch (choice) { + case INFO : title = "Info"; currentIconName = "info.gif"; break; + case WARNING : title = "Warning"; currentIconName = "warn.gif"; break; + case QUESTION : title = "Question"; currentIconName = "quest.gif"; break; + case ERROR : title = "Error"; currentIconName = "error.gif"; break; + default : title = "Ungültiger IonType für diese Meldung. Prüfen in Übersetzungsdatei."; + } + return title; + } + + /** + * Liefert den Wert der über den Nemen übergebenen Klassenvariablen. + */ + static int getValue(String fieldName) { + + int val = -1; + if (fieldName.equals("INFO")) return INFO; + else if (fieldName.equals("WARNING")) return WARNING; + else if (fieldName.equals("ERROR")) return ERROR; + else if (fieldName.equals("SYS_ERROR")) return SYS_ERROR; + else if (fieldName.equals("QUESTION")) return QUESTION; + else if (fieldName.equals("STYLE_NOBUTTON")) return STYLE_NOBUTTON; + else if (fieldName.equals("STYLE_Y")) return STYLE_Y; + else if (fieldName.equals("STYLE_Y_N")) return STYLE_Y_N; + else if (fieldName.equals("STYLE_Y_N_C")) return STYLE_Y_N_C; + return val; + } + + private static String getStackTrace(Exception exception) { + + if (exception == null) + return "null"; + + String stack = ""; + + StringWriter strWriter = new StringWriter(); + exception.printStackTrace(new PrintWriter(strWriter)); + stack = strWriter.toString(); + stack = stack.replace('\r', ' '); + stack = stack.replace('\t', ' '); + return stack; + } + + private static int display(String textID, String[] param, Exception exception, Frame frame) { + + String translatedMes = ""; + String preparedMes = ""; + String messageType = ""; + String optionType = ""; + String title = ""; + MessagesDialog dialog = null; + actMessId = textID; + + boolean messageFound = res.contains(textID); + translatedMes = res.getString(textID); + + if (messageFound) { + try { + messageType = translatedMes.substring(0, translatedMes.indexOf(':')); + translatedMes = translatedMes.substring(translatedMes.indexOf(':')+1); + + optionType = translatedMes.substring(0, translatedMes.indexOf(':')); + translatedMes = translatedMes.substring(translatedMes.indexOf(':')+1); + + } catch(Exception ex) { + MessageHandler.logln("FALSCHES FORMAT: MESSAGE: " + textID); + } + } + else { // Message not found + MessageHandler.logln("UserMessage: textID '" + textID + "' not found. Return " + + "value 'CANCEL' = " + CANCEL); + + //return CANCEL; + + messageType = "ERROR"; + optionType = "STYLE_Y"; + translatedMes = "textID '"+textID +"' not found." + + "\nIt is possible the message file not found."; + } + + preparedMes = prepareMessage(translatedMes, param); + // Exception exception = getException(param); + + // WARNING -> nach Warnung übersetzen + title = res.getString(getTitle(messageType)); + + // WARNING -> JOptionPane.WARNING_MESSAGE + int messageTypeIndex = getValue(messageType); + + // Button Set idetifizieren + int optionTypeIndex = getValue(optionType); + + int result = CANCEL; + + if (exception != null) { + String str = getStackTrace(exception); + if (exception instanceof MessageException ) { + MessageException ex = (MessageException)exception; + if (ex.getException() != null) + str += "\n" + getStackTrace(ex.getException()); + } + result = MessagesDialog.showDetailDialog(null, preparedMes, title, + optionTypeIndex, messageTypeIndex, null, str); + } + else { + if (optionTypeIndex == STYLE_NOBUTTON) { + // Wird nicht mehr unterstützt + MessageHandler.logln("UserMessage: STYLE_NOBUTTON wird nicht unterstützt"); + return result; + } + else { + result = MessagesDialog.showConfirmDialog(null,preparedMes,title, + optionTypeIndex,messageTypeIndex); + } + } + return result; + } + + /** + * Öffnet das Dialogfenster mit der Übersetzung der per Suchschlüssel übergebenen Meldung + * mit eingesetzten Parametern. Für die Übersetzung der Parameter trägt die aufrufende Stelle die Sorge. + * Der Dialog ist modal zum Frame frame. + * @param
    + *
  • textID - Suchschlüssel der Meldung im Meldungspool, + *
  • param - Array der in die Meldung einzusetztenden Parameter, + *
  • frame - das Fenster, zu dem der Dialog modal ist. + *
+ * @return
    + *
  • -1 wenn keine Rückgabe möglich ist oder Dialog NICHT MODAL ist. + *
  • ButtonDialog.YES = 2 + *
  • ButtonDialog.NO = 4 + *
  • ButtonDialog.CANCEL = 8 + *
  • Wird das Dialog-Fenster ohne Buttonklick geschlossen (Kreuzchen oben rechts), so ist die Rückgabe gleich ButtonDialog.CANCEL. + *
+ */ + public static int show(String messageId, String[] parameterList, + Exception anException, Frame parentFrame) { + return display(messageId, parameterList, anException, parentFrame); + } + + public static int show(String messageId, String[] parameterList, + Exception anException) { + return display(messageId, parameterList, anException, (Frame)null); + } + + public static int show(String messageId, String[] parameterList, + Frame parentFrame) { + return display(messageId, parameterList, (Exception)null, parentFrame); + } + + public static int show(String messageId, String[] parameterList) { + return display(messageId, parameterList, (Exception)null, (Frame)null); + } + + public static int show(String messageId, String parameter, + Frame parentFrame) { + return display(messageId, new String[] { parameter }, (Exception)null, parentFrame); + } + + public static int show(String messageId, String parameter) { + return display(messageId, new String[] { parameter }, (Exception)null, (Frame)null); + } + + public static int show(String messageId, Frame parentFrame) { + return display(messageId, (String[])null, (Exception)null, parentFrame); + } + + public static int show(String messageId) { + return display(messageId, (String[])null, (Exception)null, (Frame)null); + } + + public static int show(String messageId, Exception anException, Frame aFrame) { + return display(messageId, (String[])null, anException, aFrame); + } + + public static int show(String messageId, Exception anException) { + return display(messageId, (String[])null, anException, (Frame)null); + } + + public static int show(Exception anException, Frame aFrame) { + if (anException instanceof MessageException) { + MessageException ex = (MessageException)anException; + return show(ex.getMessageId(), ex.getParameterList(), ex, aFrame); + } + else + return show("UNHANDLED_EXCEPTION", (String[])null, anException, aFrame); + } + +} + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.de b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.de new file mode 100644 index 000000000..8db0001a8 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.de @@ -0,0 +1,78 @@ +############################################################################### +# +# In dieser Datei werden im Abschnitt "Messages" Meldungen auf deutsch +# definiert. +# Zu beachten: Beim Definieren einer neuen neuen Meldung, diese soweit möglich +# in allen Sprachen anlegen. +# +# +# +# MELDUNG DEFINIEREN +# ================== +# +# Eine Meldung hat eine eindeutige textuelle ID. Diese steht links vom Gleichheitszeichen. +# Zu jeder Meldung wird angegeben: +# - iconType (Typen siehe unten) +# - buttonType (Typen siehe unten) +# - Meldungstext mit evtl. Platzhaltern für Parameter. +# +# Ein Parameterplatzhalter ist ein dreifaches kaumänisches "und". Siehe Beispielmeldung +# "No_Records_found". +# +# Die Angaben erfolgen in einer Zeile, jeweils durch einen Doppelpunkt getrennt. +# +# Format: +# =:: +# +# Zulässige Werte für: +# iconType: +# INFO +# WARNING +# ERROR +# QUESTION +# +# buttonType: +# STYLE_Y ("yes" Button) +# STYLE_Y_N ("yes" and "no" Buttons) +# STYLE_Y_N_C ("yes", "no" and "cancel" Buttons) +# +# +# Beispiel mit einem String-Array: +# ================================ +# Messagedefinition: +# No_Records_found=WARNING:STYLE_Y:Die Tabelle &&& enthält keinen Eintrag. Erwartet mind. &&&. Weitermachen? +# Aufruf: +# answer = UserMessage.show("No_Records_found", new String[] {"Mitarbeiter", "" + minNumber}, aShowFrame); +# if (answer == UserMessage.NO) +# return; +# +# Beispiel mit einer Exception: +# ============================= +# Messagedefinition: +# UNEXPECTED_EXCEPTION=ERROR:STYLE_Y:Wow! An exception! +# +# Aufruf: +# try { +# String str = null; +# int index = str.indexOf("abc"); +# } catch (Exception ex) { +# UserMessage.show("UNEXPECTED_EXCEPTION", ex); +# } +# +# +# +# +################################################################################################# + + +# Titles +Info=Info +Warning=Warnung +Question=Frage +Error=Fehler + +# Messages +TRANSLATION_SOURCE_NOT_FOUND=WARNING:STYLE_Y:Die Übersetzungsdatei &&& ist nicht gefunden. +UNKNOWN_EXCEPTION=ERROR:STYLE_Y:Unbekannter Fehler +UNHANDLED_EXCEPTION=ERROR:STYLE_Y:Interner Fehler + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.en b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.en new file mode 100644 index 000000000..7e8953845 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/messages.en @@ -0,0 +1,80 @@ +############################################################################### +# +# This file contains the english messages. +# +# NOTICE: When defining a new message it has to be created in message files for each language. +# +# +# +# +# DEFINING A MESSAGE +# ================== +# +# A message has a uinique CHARACTER ID. It is placed on the left hand side of the equation. +# For each message there are additional switches: +# - iconType (see below) +# - buttonType (see below) +# - messageText may contain placeholders for parameters. + +# A placeholder pattern is a "&&&" . See Examplemessage "No_Records_found". +# +# A messsage definition is placed within a single row, its switches are seperated by a colon ":". +# +# Format: +# ======= +# =:: +# +# +# Allowed values for: +# =================== +# iconType: +# INFO +# WARNING +# ERROR +# QUESTION +# +# buttonType: +# STYLE_Y ("yes" Button) +# STYLE_Y_N ("yes" and "no" Buttons) +# STYLE_Y_N_C ("yes", "no" and "cancel" Buttons) +# +# +# Example with a parameter array: +# ================================ +# Message definition: +# No_Records_found=WARNING:STYLE_Y:The Table &&& has no records. Expected at least &&&. Continue? +# Aufruf: +# answer = UserMessage.show("No_Records_found", new String[] {"Employee", "" + minNumber}, aShowFrame); +# if (answer == UserMessage.NO) +# return; +# +# Example with an Exception: +# ============================= +# Message definition: +# UNEXPECTED_EXCEPTION=ERROR:STYLE_Y:Wow! An exception! +# +# Aufruf: +# try { +# String str = null; +# int index = str.indexOf("abc"); +# } catch (Exception ex) { +# UserMessage.show("UNEXPECTED_EXCEPTION", ex); +# } +# +# +# +# +################################################################################################# + + +# Titles +Info=Info +Warning=Warning +Question=Question +Error=Error + +# Messages +TRANSLATION_SOURCE_NOT_FOUND=WARNING:STYLE_Y:The translation file &&& is not found. +UNKNOWN_EXCEPTION=ERROR:STYLE_Y:Unknown error. +UNHANDLED_EXCEPTION=ERROR:STYLE_Y:Internal error. + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.de b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.de new file mode 100644 index 000000000..400a326ba --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.de @@ -0,0 +1,45 @@ +File=Datei + +Exit=Beenden + +View=Anzeige + +Previous page=Vorherige Seite + +Next page=Nächste Seite + +Last page=Letzte Seite + +Help=Hilfe + +Default zoom=Standardzoom + +Introduction=Einleitung + +About=Über + +Show=Anzeigen + +Preview=Vorschau + +First page=Erste Seite + +Print=Drucken + +Page=Seite + +of=von + +Init parser=Initializiere Parser + +Init mappings=Initializiere Abbildung + +Build FO tree=Baue FO-Baum + +Layout FO tree=Formatiere FO-Baum + +Render=Gebe aus + +Close=Schließen + +Go to Page=Gehe zur Seite diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.en b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.en new file mode 100644 index 000000000..acf0ef669 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.en @@ -0,0 +1,4 @@ +# Diese Datei ist nur dafür da, daß die Warnung +# "Übersetzungsdatei nicht gefunden" nicht hochkommt. +# Die Suchschlüssel für die zu übersetzenden Begriffe sind +# englisch. Daher wäre eine Übersetzung redundant. diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fi b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fi new file mode 100644 index 000000000..97219031d --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fi @@ -0,0 +1,16 @@ +File=Tiedosto +Print=Tulosta +Exit=Poistu +View=Näytä +First page=Ensimmäinen sivu +Previous page=Edellinen sivu +Next page=Seuraava sivu +Last page=Viimeinen sivu +Default zoom=Normaali zoom +Help=Ohje +Index=Sisällys +Introduction=Esittely +About=Tietoja +Page=Sivu + + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fr b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fr new file mode 100644 index 000000000..5287dcbb9 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.fr @@ -0,0 +1,13 @@ +File=Fichier +Print=Imprimer +Exit=Quitter +View=Affichage +First page=Première page +Previous page=Page précédente +Next page=Page suivante +Last page=Dernière page +Help=Aide +Default zoom=Zoom par défaut +Introduction=Introduction +About=A propos + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.it b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.it new file mode 100644 index 000000000..05cdb0a0a --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.it @@ -0,0 +1,14 @@ +File=File +Exit=Esci +View=Vista +First page=Prima pagina +Previous page=Pagina precedente +Next page=Pagina seguente +Last page=Ultima pagina +Help=Aiuto +Default zoom=Zoom di default +Introduction=Introduzione +About=Riguardo a... +Index=Indice +Print=Stampa + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.pl b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.pl new file mode 100644 index 000000000..9b727e151 --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.pl @@ -0,0 +1,17 @@ +File=Plik +Print=Drukuj +Exit=Zakoñcz +View=Widok +First page=Pierwsza strona +Previous page=Poprzednia strona +Next page=Nastêpna strona +Last page=Ostatnia strona +Zoom=Powiêkszenie +Default zoom=Domy¶lne powiekszenie +Help=Pomoc +Index=Indeks +Introduction=Wstêp +About=O programie +Page=Strona + + diff --git a/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.ru b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.ru new file mode 100644 index 000000000..84309253e --- /dev/null +++ b/fop-0_14_0_regions/src/org/apache/fop/viewer/resources/resources.ru @@ -0,0 +1,38 @@ +File=Ôàéë + +Exit=Çàêîí÷èòü + +View=Âèä + +First page=Ïåðâàÿ ñòðàíèöà + +Previous page=Ïðåäûäóùàÿ ñòðàíèöà + +Next page=Ñëåäóþùàÿ ñòðàíèöà + +Last page=Ïîñëåäíÿÿ ñòðàíèöà + +Go to Page=Èäòè ê ñòðàíèöå + +Help=Ïîìîùü + +Default zoom=Ñòàíäàðòíûé ìàñøòàá + +Introduction=Ââåäåíèå + +About=Î ïðîãðàììå + +Show=Ïîêàç + +Preview=Ïðîñìîòð + +Print=Ïå÷àòàòü + +Page=Ñòðàíèöà + +of=èç + +Zoom=Ìàñøòàá + +Close=Çàêðûòü + diff --git a/fop-0_14_0_regions/src/overview.html b/fop-0_14_0_regions/src/overview.html new file mode 100644 index 000000000..af1f3c055 --- /dev/null +++ b/fop-0_14_0_regions/src/overview.html @@ -0,0 +1,9 @@ + +FOP Overview + +

FOP is an XSL formatter and renderer that works with an XSLT transformer to +produce PDF (and eventually other output formats) from XML documents.

+ +
+ + \ No newline at end of file -- 2.39.5

To get an overview of the FOP process, begin with the class org.apache.fop.apps.Driver.

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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/design/fo.gif b/fop-0_14_0_regions/docs/design/fo.gif new file mode 100644 index 0000000000000000000000000000000000000000..ada937797384cb144e50cef88a3ede842b8fa98c GIT binary patch literal 67063 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 Nz0+I0oh1SQ06Y45BvSwY literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/design/fop.gif b/fop-0_14_0_regions/docs/design/fop.gif new file mode 100644 index 0000000000000000000000000000000000000000..52547bb6c48e60ca0036ce878475a211d5f58596 GIT binary patch literal 27458 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/design/image.gif b/fop-0_14_0_regions/docs/design/image.gif new file mode 100644 index 0000000000000000000000000000000000000000..fc5be83eb17a18384e25597cbf865d5b2d93b668 GIT binary patch literal 24718 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/design/layout.gif b/fop-0_14_0_regions/docs/design/layout.gif new file mode 100644 index 0000000000000000000000000000000000000000..09f04af3a1155a43d77a09a7307d4a3e92b9fafb GIT binary patch literal 68250 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/design/pagination.gif b/fop-0_14_0_regions/docs/design/pagination.gif new file mode 100644 index 0000000000000000000000000000000000000000..a82658f70f73474d6d07fe270c4b3f7b8d43e662 GIT binary patch literal 52924 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 z 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 U-#EuR?(vUO;y8XHR}TWfoZo2$Fa+w1!a94t&J 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 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/border.fo b/fop-0_14_0_regions/docs/examples/fo/border.fo new file mode 100644 index 000000000..6312578ca --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/border.fo @@ -0,0 +1,173 @@ + + + + + + + + + + + + + + + + + + + + + + + PX7.net + + + 44 Liberty St + + + Newburyport, MA 01950 + + + 978-462-1152 + + + + + Sales Receipt + + + + + DATE + + + + + 01/01/2000 + + + + + SALE # + + + + + 1 + + + + + SOLD TO + + + + + + + + + SHIP TO + + + + + + + + + PMT METHOD + + + + + Check + + + + + CHECK # + + + + + 1234 + + + + + + + + + + + + QUANTITY + + + DESCRIPTION + + + RATE + + + AMOUNT + + + + + 1 + + + Widget + + + $22.23 + + + 22.31 + + + + + 3 + + + Nuts + + + $12.00 + + + 36.00 + + + + + + + + Please remit to the above address + + + + + Total + + + + + $3.00 + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/extensive.fo b/fop-0_14_0_regions/docs/examples/fo/extensive.fo new file mode 100644 index 000000000..ad8c18363 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/extensive.fo @@ -0,0 +1,147 @@ + + + + + + + + +A Block +An End Aligned Block +A Centered Block +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. Alignment is default. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. Alignment is end. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. Alignment is centered. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. I'm going to keep going so I can get three lines to check how all but the last justify. There, that should do it. Alignment is justified. +A block for comparison +A block with 12pt space-before +A block for comparison +A block with 12pt space-after +A block for comparison +A block with both 12pt space-before and space-after +A block for comparison +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. There is a start-indent of 50pt. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. There is an end-indent of 50pt. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. There is a start-indent and end-indent of 50pt. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. The font-size is set to 15pt. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. The line-height is set to 20pt. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. The font-size is set to 15pt and the line-height is set to 20pt. +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. The font-size is set to 15pt and the line-height is set to 15pt. +A block within a block +Text beforeA block within a blockText after +Text beforeA block within a block with 50pt start-intentText after +And again for the page break, text beforeA block within a block with 50pt start-intentText after +Text beforeA block with 50pt start-indent within a block with 50pt start-intentText after +Text beforeA block with 100pt start-indent within a block with 50pt start-intentText after + + + +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. + + + +This is a multiple line block that extends over more than one line. There should be appropriate line breaks.This is a multiple line block that extends over more than one line. There should be appropriate line breaks.This is a multiple line block that extends over more than one line. There should be appropriate line breaks. + + + + + +This is a multiple line block that extends over more than one line. There should be appropriate line breaks. The list-block has a start-indent of 50pt and a text-align of justified. + + + +This is a multiple line block that extends over more than one line. There should be appropriate line breaks.This is a second multiple line block that extends over more than one line. There should be appropriate line breaks.This is a third multiple line block that extends over more than one line. There should be appropriate line breaks. + + + + + +This is a multiple line block that extends over more than one line. There should be appropriate line breaks.This is a multiple line block with start-indent 100pt that extends over more than one line. There should be appropriate line breaks.This is a multiple line block that extends over more than one line. There should be appropriate line breaks. + + + +This is a multiple line block that extends over more than one line. There should be appropriate line breaks.This is an embedded multiple line block that extends over more than one line. There should be appropriate line breaks.This is a multiple line block that extends over more than one line. There should be appropriate line breaks. + + + + + + A block in a list-item-body + + + + + + + + This is a list item in a list that is itself a list item + + + + + + Next Stage + Right, now we are ready to try some newly implemented things like rules. What follows is a display rule of default thickness 1pt and a space-before and space-after of 12pt. + + Now what follows is a leader of thickness 5pt with start-indent of 100pt (same space-before/after as before). + + Colour + black + green + silver + lime + gray + olive + white + yellow + maroon + navy + red + blue + purple + teal + fuchsia + aqua + Wrap + This is a rather long sentence that is going to keep on going and going, not really to demonstrate anything other that normal wrapping because the following paragraph will show what happens when wrap-option is set to no-wrap. + This is a rather long sentence that is going to keep on going and going to demonstrate what happens when wrap-option is set to no-wrap which is unlike the preceding sentence where it defaults to wrap. + This is a rather long sentence that is going to keep on going and going, not really to demonstrate anything other that normal wrapping but it differs from the first of these three sentences in that wrap is set explicitly. + + Embedded SVG + + + + + + Hello SVG! + + + The above is an example of an SVG graphic + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/fonts.fo b/fop-0_14_0_regions/docs/examples/fo/fonts.fo new file mode 100644 index 000000000..8e6e42e46 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/fonts.fo @@ -0,0 +1,65 @@ + + + + + + + + + + + + + + + + + + + + +Helvetica + + +! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~    ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ + + + +Times Roman + + +! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~    ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ + + + +Courier + + +! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~    ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ + + + + ZapfDingbats: + + +! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~    ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ + + + + + Symbol: + + +! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~    ¡ ¢ £ ¤ ¥ ¦ § ¨ © ª « ¬ ® ¯ ° ± ² ³ ´ µ ¶ · ¸ ¹ º » ¼ ½ ¾ ¿ À Á Â Ã Ä Å Æ Ç È É Ê Ë Ì Í Î Ï Ð Ñ Ò Ó Ô Õ Ö × Ø Ù Ú Û Ü Ý Þ ß à á â ã ä å æ ç è é ê ë ì í î ï ð ñ ò ó ô õ ö ÷ ø ù ú û ü ý þ + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/images.fo b/fop-0_14_0_regions/docs/examples/fo/images.fo new file mode 100644 index 000000000..4d2b4209f --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/images.fo @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +1. FOP test for images + + A GIF image in FOP + + + + + + A transparent GIF image in FOP + + + + + + A JPEG image in FOP + + + + + + A BMP image in FOP + + + + + + + This section is only required to show that the layout still works. + + + + + + + + + + +A. Appendix + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/instream.fo b/fop-0_14_0_regions/docs/examples/fo/instream.fo new file mode 100644 index 000000000..327a6aa64 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/instream.fo @@ -0,0 +1,132 @@ + + + + + + + + + + + + + + + SVG placed in flow before anything + + + This is used to show how foreign objects are placed in a line area. + + + + + + + SVG placed in flow after a block + + + + Some block text to separate instream objects. + + + Some text before + + + + + + + + + and some after the svg element. + + + A text line below the instream object. + + + + + + + + + SVG placed in a block + + + + + A text line below the block. + + + A text line with an instream foreign object that is before the line break. + + + + + + + + + +With some text on the next line. With a bit more text to go over the to the next line. + + + A text line with an instream foreign object that is after the line break. +With some text on the next line. With a bit + + + + + + + + + +more text to go over the to the next line. + + + A text line with an instream foreign object that is over the line break. +With some text + + + + + + + + + +on the next line. With a bit more text to go over the to the next line to +see it handles it properly. + + + The next block has an instream object wider than the area. + + + + + + + + + + SVG placed in a really wide block + + + + + This block has an instream object wider than the area after this text + + + + + + + + SVG placed in a really wide block + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/leader.fo b/fop-0_14_0_regions/docs/examples/fo/leader.fo new file mode 100644 index 000000000..0fe7ee16f --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/leader.fo @@ -0,0 +1,84 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a + W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from + another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its + widespread deployment. - Here comes a line (thickness: 3pt). + + + + + + + + + + This document specifies a syntax created by subsetting an existing, widely used international text processing standard + (Standard Generalized Markup Language, ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web. It + is a product of the W3C XML Activity, details of which can be found at http://www.w3.org/XML. A list of current W3C + Recommendations and other technical documents can be found at http://www.w3.org/TR. - Here comes a line (thickness: 1pt (default)) + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/link.fo b/fop-0_14_0_regions/docs/examples/fo/link.fo new file mode 100644 index 000000000..ea9c226a9 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/link.fo @@ -0,0 +1,124 @@ + + + + + + + + + + + + + + + + + + + + + + 0. Normal text without link + + + + + 1. normal.pdf + + + + --- + + + + 2. A one line example (text-align='start'): normal.pdf + + + + --- + + + + 3. A multiline text (text-align='start'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 4. A multiline text (text-align='centered'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 5. A multiline text (text-align='end'). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + --- + + + + 6. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + + 7. A multiline text (text-align='start', space-before.optimum=6pt, font-family=serif, padding-top="3pt"). The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/list.fo b/fop-0_14_0_regions/docs/examples/fo/list.fo new file mode 100644 index 000000000..5cbd6f46c --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/list.fo @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + XSL-FO Example: simple list - p. + + + + + + + + Validity Constraint: Standalone Document Declaration + + + + + The standalone document declaration must have the value "no" if + any external markup declarations contain declarations of: + + + + + + + + + + + + + + + attributes with default values, if elements to which these attributes apply appear in the document without specifications of values for these attributes, or + + + + + + + + + + + + + + entities (other than amp, lt, gt, apos, quot), if references to those entities appear in the document, or + + + + + + + + + + + + + + attributes with values subject to normalization, where the attribute appears in the document with a value which will + + + + + + + + + + + + + + change as a result of normalization, or + + + + + + + + + + + + + + element types with element content, if white space occurs directly within any instance of those types. + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/normal.fo b/fop-0_14_0_regions/docs/examples/fo/normal.fo new file mode 100644 index 000000000..c17f4ebc2 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/normal.fo @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML Recommendation - p. + + + + + + + + Extensible Markup Language (XML) 1.0 + + + + + Abstract + + + + + The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. + + + + + Status of this document + + + + + This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a + W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from + another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its + widespread deployment. This enhances the functionality and interoperability of the Web. + + + + + This document specifies a syntax created by subsetting an existing, widely used international text processing standard + (Standard Generalized Markup Language, ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web. It + is a product of the W3C XML Activity, details of which can be found at http://www.w3.org/XML. A list of current W3C + Recommendations and other technical documents can be found at http://www.w3.org/TR. + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/readme.fo b/fop-0_14_0_regions/docs/examples/fo/readme.fo new file mode 100644 index 000000000..6da46eab6 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/readme.fo @@ -0,0 +1,1349 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +This is not the latest Fop documentation, but just an fo example. FOP - p. + + + + + +FOP: An Open-Source XSL Formatter and Renderer +A) + What is FOP? + FOP is the world's first print formatter driven by XSL formatting + objects. It is a Java 1.1 application that reads a formatting object + tree and then turns it into a PDF document. The formatting object + tree, can be in the form of an XML document (output by an XSLT engine + like XT or Xalan) or can be passed in memory as a DOM Document or (in + the case of XT) SAX events. + + + FOP is part of Apache's XML project. The homepage of FOP is + http://xml.apache.org/fop + + + + + + + + B) + Downloading FOP + The latest release version is FOP 12.0 + + () + . + NOTE: you do not have to unjar or unzip this jar file. + Documentation can be downloaded here as HMTL file + + () + or + as PDF file + + () + . + To run FOP from the command line, see Running FOP. If you are interested in + embedding FOP in a Java application of your own, see Embedding FOP. + + You can also download the source code v. 12.0 + + () + as jar file + + + + + + C) + Running FOP + + 1) Prerequisites + Following software must be installed: + a) Java 1.1.x or later + For the fo-file viewer mode of FOP (see below) you must have the swing classes installed. + From Java 1.2 on (aka Java 2) they are part of the standard java distribution. + If you use Java 1.1.x you must seperately include the swing classes, which can + be found at the + Sun website + + (http://java.sun.com/products/jfc/#download-swing) + . + + b) An XML parser which supports SAX and DOM like + Xerces-J + + (http://xml.apache.org/xerces-j/index.html) + . + c) If you have to produce the flow objects files, which are the input for FOP, + you need a transformation utility to create this files from your xml files. + Normally this is an XSLT stylesheet processor like + XT + + (http://www.jclark.com/xml/xt.html) + + or XALAN + + (http://xml.apache.org/xalan/index.html) + . + + + + 2) Starting FOP as an standalone application + There are three ways to run FOP from the command line. + a) Batch processing formatting objects (fo) files: + java org.apache.fop.apps.CommandLine fo-file pdf-file + b) Batch processing xml files (includes production of the fo-files): + java org.apache.fop.apps.CommandLine xml-file xsl-file pdf-file + c) Previewing the fo-file: + java org.apache.fop.apps.AWTCommandLine fo-file + Each method uses next to the fop classes other packages. The following describes + each method in detail. + + a) Method One + One is to first use an XSLT engine to produce the formatting object tree as an + XML document and then running the class org.apache.fop.apps.CommandLine with the + formatting object file name and PDF filename as arguments. You will need to include + FOP and your XML Parser in your classpath and so you might invoke + + java -cp fop_x_xx_x.jar;xerces.jar + org.apache.fop.apps.CommandLine fo-file pdf-file + If your SAX Parser is other than Xerces, you will need to set the property + org.xml.sax.parser to the SAX Parser class to use. The following example shows + the command line, if you use XP, the XML parser from James Clark: + + java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver + -cp fop_x_xx_x.jar;sax.jar;xt.jar;xp.jar;xerces.jar + org.apache.fop.apps.AWTCommandLine formatting-tree-file pdf-file + (You have to include xerces.jar or another xml parser which supports DOM in your classpath.) + + + b) Method Two + Rather than performing transformation with an XSLT before invoking FOP, it is + possible, if you use XT as your XSLT engine, to just call FOP and have it call + XT for you. To do this, run the class org.apache.fop.apps.CommandLine with the + source XML file name, XSL file name and PDF file name as arguments. You will + need to include FOP, SAX, your SAX Parser and XT in your classpath and so you might + invoke + + java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver + -cp fop_x_xx_x.jar;xt.jar;xerces.jar + org.apache.fop.apps.CommandLine xml-file xsl-file pdf-file + Again, if your SAX Parser is other than Xerces, you will need to set the property + org.xml.sax.parser to the SAX Parser class to use. + + + + c) Method Three + If you already produced the FO file, you can preview the results of your + transformation without using any pdf viewer by invoking FOP with the viewer + application. You will need to include FOP and your XML Parser in your classpath + + java -cp fop_x_xx_x.jar;xerces.jar + org.apache.fop.apps.AWTCommandLine fo-file + The viewer uses the swing classes. + Note: If you are using java 2 or later (i.e. jdk 1.2. or later) you can put all + needed jar files into the subdirectory jdk1.2.x\jre\lib\ext (windows example). Then + FOP can be started without classpath: + + java org.apache.fop.apps.CommandLine fo-file pdf-file + + + + 3) Running FOP on MacOS + + Ensure that you have a recent MRJ, and that you have downloaded and + unpacked the XP and SAX distributions. The xp.jar and sax.jar files work + as is on MacOS. + + Drag the FOP jarfile onto the JBindery icon. When the first dialog + appears, type "org.apache.fop.apps.CommandLine" in the "Class name" field. + Using UNIX syntax, type the names of the input formatting-object file and + the output PDF in the "Optional parameters" field. + + Click on the Classpath icon. To add the xp.jar and sax.jar files, click + the "Add .zip file" button, navigate to the file in question, and click + Open. + + Once both are added (the FOP jarfile will already be in the list), click + Run. A "stdout" window will appear and display FOP runtime messages. + + + + 4) Problems + If you have problems running FOP, please have a look at the + FOP FAQ + + (faq.html) + . If you don't find a solution there, + you can ask for help on the list fop-dev@xml.apache.org. Maybe it's bug and + maybe somebody is already working on it. + + + + + + + + + + + D) + Embedding FOP + Instantiate org.apache.fop.apps.Driver. Once this class is + instantiated, methods are called to set the + Renderer to use, the (possibly multiple) ElementMapping(s) to + use and the PrintWriter to use to output the results of the + rendering (where applicable). In the case of the Renderer and + ElementMapping(s), the Driver may be supplied either with the + object itself, or the name of the class, in which case Driver will + instantiate the class itself. The advantage of the latter is it + enables runtime determination of Renderer and ElementMapping(s). + + Once the Driver is set up, the buildFOTree method + is called. Depending on whether DOM or SAX is being used, the + invocation of the method is either buildFOTree(Document) or + buildFOTree(Parser, InputSource) respectively. + + A third possibility may be used to build the FO Tree, namely + calling getDocumentHandler() and firing the SAX events yourself. + + Once the FO Tree is built, the format() and render() methods may be + called in that order. + + Here is an example use of Driver from CommandLine.java: + Driver driver = new Driver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.setWriter(new PrintWriter(new FileWriter(args[1]))); + driver.buildFOTree(parser, fileInputSource(args[0])); + driver.format(); + driver.render(); + + + + + + + E) + What's Implemented? + Also see STATUS for what is being worked on. + + 1) Formatting Objects + + + +· + + +root + + + + +· + + +layout-master-set + + + + +· + + +simple-page-master + + + + +· + + +region-body + + + + +· + + +region-before + + + + +· + + +region-after + + + + +· + + +page-sequence + + + + +· + + +sequence-specification + + + + +· + + +sequence-specifier-single + + + + +· + + +sequence-specifier-repeating + + + + +· + + +sequence-specifier-alternating + + + + +· + + +flow + + + + +· + + +static-content + + + + +· + + +block + + + + +· + + +list-block + + + + +· + + +list-item + + + + +· + + +list-item-label + + + + +· + + +list-item-body + + + + +· + + +page-number + + + + +· + + +display-sequence + + + + +· + + +inline + + + + +· + + +display-rule + + + + +· + + +display-graphic + + + + +· + + +table (minimal support) + + + + +· + + +table-column (minimal support) + + + + +· + + +table-body (minimal support) + + + + +· + + +table-row (minimal support) + + + + +· + + +table-cell (minimal support) + + + + + + + 2) Properties + + + +· + + +end-indent + + + + +· + + +page-master-name + + + + +· + + +page-master-first + + + + +· + + +page-master-repeating + + + + +· + + +page-master-odd + + + + +· + + +page-master-even + + + + +· + + +margin-top (only on pages and regions) + + + + +· + + +margin-bottom (only on pages and regions) + + + + +· + + +margin-left (only on pages and regions) + + + + +· + + +margin-right (only on pages and regions) + + + + +· + + +extent + + + + +· + + +page-width + + + + +· + + +page-height + + + + +· + + +flow-name + + + + +· + + +font-family + + + + +· + + +font-style + + + + +· + + +font-weight + + + + +· + + +font-size + + + + +· + + +line-height + + + + +· + + +text-align + + + + +· + + +text-align-last + + + + +· + + +space-before.optimum + + + + +· + + +space-after.optimum + + + + +· + + +start-indent + + + + +· + + +end-indent + + + + +· + + +provisional-distance-between-starts + + + + +· + + +provisional-label-separation + + + + +· + + +rule-thickness + + + + +· + + +color + + + + +· + + +wrap-option + + + + +· + + +white-space-treatment + + + + +· + + +break-before + + + + +· + + +break-after + + + + +· + + +text-indent + + + + +· + + +href + + + + +· + + +column-width + + + + +· + + +background-color + + + + +· + + +padding-top (only in conjunction with background color) + + + + +· + + +padding-left (only in conjunction with background color) + + + + +· + + +padding-bottom (only in conjunction with background color) + + + + +· + + +padding-right (only in conjunction with background color) + + + + + + + + + + F) + Limitations + Although FOP implements the above listed fo objects and properties, sometimes it does so + only in a limited way. + + + list-block + The fo working draft allows describes two ways to markup lists.The list-block must have as + children either: 1) pairs of fo:list-item-label and fo:list-item-body formatting objects, or + 2) fo:list-item formatting objects. + At the moment FOP only implements the second way. Therefore a list has a basic structure like this: + <fo:list-block> + <fo:list-item> + <fo:list-item-label><fo:block></fo:block></fo:list-item-label> + <fo:list-item-body><fo:block></fo:block></fo:list-item-body> + </fo:list-item> + </fo:list-block> + + + Padding + Padding works in conjunction with indents and spaces. It is only implemented + for blocks. At the moment padding can't be used to make extra space (indents+spaces + must be used), but only to control how much the background-color extends beyond + the content rectangle. + + + + Tables + There two limitations for tables: 1) FOP needs you to explicitly specify column widths + 2) Cells have to contain block-level FOs. They can't contain straight character data. + + A working basic example of a table looks like this: + <fo:table> + <fo:table-column column-width="150pt"/> + <fo:table-column column-width="150pt"/> + <fo:table-body font-size="10pt" font-family="sans-serif"> + <fo:table-row> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + </fo:table-row> + <fo:table-row> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + </fo:table-row> + <fo:table-row> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + <fo:table-cell> + <fo:block>text</fo:block> + </fo:table-cell> + </fo:table-row> + </fo:table-body> + </fo:table> + + + + + + + + + + + + G) + Bugs + see STATUS file + + + + + + + H) + Compiling FOP + + 1. Prerequisites + + a) Java 1.1.x or later + If you use Java 1.1.x you must also seperately include the swing classes, which can + be found at the + Sun website + + (http://java.sun.com/products/jfc/#download-swing) + . From Java 1.2 on (aka Java 2) they are part of the standard + distribution. + + + + b) An XML parser + An XML parser which supports DOM like + Xerces-J + + (http://xml.apache.org/xerces-j/index.html) + . + + + c) XT from James Clark + Some of the Java source code in FOP is generated from XML using + XSLT. XT must be used to generate this code. + XT is an XSL stylesheet processor written in java. At the moment you + can't use any other processor, because the make file makes use of some + proprietary features of Clark's xt which allow to write output in more + then one document. You can find XT at + James Clark's website + + (http://www.jclark.com/xml/xt.html) + . You have to use XT version 19991105 or later. + (Under windows you shouldn't use the prepackaged xt.exe but also the + generic jar file, otherwise make won't work) + + XT relies on an sax parser like XP (also J. Clark), which can be + downloaded at James + Clark's Website + + (http://www.jclark.com/xml/xp/index.html) + + + + + d) make + Under windows it has been reported that the use of the cygnus solutions port + of the GNU utilities works. You can find it at + Cygnus Solutions + + (http://sourceware.cygnus.com/cygwin/) + + + + + + Compiling FOP on MacOS + + We strongly recommend the use of Codewarrior Java. This Readme will + contain a link to more information in the near future. + + + + + + + + + I) + Getting involved + 1. Subscribe to fop-dev@xml.apache.org by sending an email + to fop-dev-subscribe@xml.apache.org + 2. Read the archives to fop-dev to get an idea of the issues being + discussed. + 3. Subscribe to fop-cvs@xml.apache.org by sending an email to + fop-cvs-subscribe@xml.apache.org (it is important + that you follow changes being made). + 4. Try :-) to wrap your head around the XSL working draft. + 5. Get CVS working on your system. + 6. Ask, on fop-dev, any questions you have at all about the code, design, etc. + 7. When you feel comfortable modifying the code, send diffs to + fop-dev with your contributions. + 8. Have fun! + + + + + + + J) + FOP Relevant Specifications + + + +· + + + +XML Recommendation + + (http://www.w3.org/TR/REC-xml) + + + + + + +· + + + +XSL-FO Working Draft + + (http://www.w3.org/TR/WD-xsl/) + + + + + + +· + + + +XSLT Recommendation + + (http://www.w3.org/TR/xslt) + + + + + + +· + + + +PDF Documentation + + (http://partners.adobe.com/asn/developer/acrosdk/DOCS/pdfspec.pdf) + + + + + + +· + + + +Simple API for XML (SAX) + + (http://www.megginson.com/SAX/) + + + + + + +· + + + +Document Object Model (DOM) + + (http://www.w3.org/TR/REC-DOM-Level-1) + + + + + + +· + + + +Namespaces in XML Recommendation + + (http://www.w3.org/TR/REC-xml-names/) + + + + + + +· + + + +Java JDK 1.1 Documentation + + (http://java.sun.com/products/jdk/1.1/docs/index.html) + + + + + + + + + + + + K) + Licence + ============================================================================ + The Apache Software License, Version 1.1 + ============================================================================ + Copyright (C) 1999 The Apache Software Foundation. All rights reserved. + Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met: + 1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. + + + 2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + + + 3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. + + + 4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. + + + 5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. + + THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + + This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber <jtauber@jtauber.com>. For more information on the Apache + Software Foundation, please see http://www.apache.org/ + + (http://www.apache.org/) + . + + + + Content + + + + + + + + +A) + + + +What is FOP? + + + + + + + +B) + + + +Downloading FOP + + + + + + + +C) + + + +Running FOP + + + + + + + +D) + + + +Embedding FOP + + + + + + + +E) + + + +What's Implemented? + + + + + + + +F) + + + +Limitations + + + + + + + +G) + + + +Bugs + + + + + + + +H) + + + +Compiling FOP + + + + + + + +I) + + + +Getting involved + + + + + + + +J) + + + +FOP Relevant Specifications + + + + + + + +K) + + + +Licence + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/fo/table.fo b/fop-0_14_0_regions/docs/examples/fo/table.fo new file mode 100644 index 000000000..2e4b6bcb6 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/fo/table.fo @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + FOP - p. + + + + + + + Content + + + + + + + + + + A) + + + What is FOP? + + + + + B) + + + Downloading FOP + + + + + C) + + + Running FOP + + + + + D) + + + Embedding FOP + + + + + E) + + + What's Implemented? + + + + + F) + + + Limitations + + + + + G) + + + Bugs + + + + + H) + + + Compiling FOP + + + + + I) + + + Getting involved + + + + + J) + + + FOP Relevant Specifications + + + + + K) + + + Licence + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/basic1.fo b/fop-0_14_0_regions/docs/examples/pagination/basic1.fo new file mode 100644 index 000000000..537f008df --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/basic1.fo @@ -0,0 +1,112 @@ + + + + + + + + + + + + + + + + + + + + + + + + + XML Recommendation - p. + + + + + + + + Extensible Markup Language (XML) 1.0 + + + + + Abstract + + + + + The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + + Status of this document + + + + + This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a + W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from + another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its + widespread deployment. This enhances the functionality and interoperability of the Web. For further information go to + normal.pdf + + + + + This document specifies a syntax created by subsetting an existing, widely used international text processing standard + (Standard Generalized Markup Language, ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web. It + is a product of the W3C XML Activity, details of which can be found at http://www.w3.org/XML. A list of current W3C + Recommendations and other technical documents can be found at http://www.w3.org/TR. + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/basic2.fo b/fop-0_14_0_regions/docs/examples/pagination/basic2.fo new file mode 100644 index 000000000..83c2280ee --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/basic2.fo @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + XML Recommendation - p. + + + + + + + + Extensible Markup Language (XML) 1.0 + + + + + Abstract + + + + + The Extensible Markup Language (XML) is a subset of SGML that is completely described in this document. Its goal is to + enable generic SGML to be served, received, and processed on the Web in the way that is now possible with HTML. XML + has been designed for ease of implementation and for interoperability with both SGML and HTML. For further information + go to normal.pdf + + + + + Status of this document + + + + + This document has been reviewed by W3C Members and other interested parties and has been endorsed by the Director as a + W3C Recommendation. It is a stable document and may be used as reference material or cited as a normative reference from + another document. W3C's role in making the Recommendation is to draw attention to the specification and to promote its + widespread deployment. This enhances the functionality and interoperability of the Web. For further information go to + normal.pdf + + + + + This document specifies a syntax created by subsetting an existing, widely used international text processing standard + (Standard Generalized Markup Language, ISO 8879:1986(E) as amended and corrected) for use on the World Wide Web. It + is a product of the W3C XML Activity, details of which can be found at http://www.w3.org/XML. A list of current W3C + Recommendations and other technical documents can be found at http://www.w3.org/TR. + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/common_regnames.fo b/fop-0_14_0_regions/docs/examples/pagination/common_regnames.fo new file mode 100644 index 000000000..5add07fb6 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/common_regnames.fo @@ -0,0 +1,305 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + Journey to the Shores + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/bad_region_name.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/bad_region_name.fo new file mode 100644 index 000000000..98bf7b76e --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/bad_region_name.fo @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/duplicate_flownames.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/duplicate_flownames.fo new file mode 100644 index 000000000..cf50a2a9a --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/duplicate_flownames.fo @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/errors_readme.txt b/fop-0_14_0_regions/docs/examples/pagination/errors/errors_readme.txt new file mode 100644 index 000000000..65cc6e3f3 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/errors_readme.txt @@ -0,0 +1,52 @@ +This set of files is meant to illustrate the interpretation +of the spec as it relates to the following FO's: fo:region-*, +fo:static-content, fo:page-sequence, and fo:flow, as well as +all other pagination FO's in general. + +These files should _not_ process properly. + +Descriptions: + +1. unique_region_names_in_pm.fo + +According to Section 7.33.15, identifiers used as the value of +'region-name' must be unique within a simple page master. This file +assigns the same name to 2 regions in the same SPM. + +2. missing_sc_flowname.fo, missing_flow_flowname.fo + +According to Section 7.33.5, the 'flow-name' must be provided for +each fo:flow and each fo:static-content. A processor _may_ +continue processng after reporting this error; FOP currently +does not. + +These files illustrate the consequences of omitting the 'flow-name' +property. + +3. bad_region_name.fo + +According to Section 7.33.15, there are reserved words (that are also +defaults) for region-names. If you use one, assign it to the correct +region. FOP stops after reporting this error. + +4. unmapped_flow_name.fo, duplicate_flow_name.fo + +According to Section 7.33.5, flow names must be assigned, and must be +unique. A duplicate flow name is an error; a processor may continue, +but FOP doesn't. + +An unmapped flow-name is not an error, but a warning is generated. You +likely didn't want this. In this example FOP will run to completion, +but you'll be missing the page number on the first page. + +5. regnames_not_same_class.fo + +According to Section 7.33.15, re-use of region-names, including the +defaults, demands that duplicate region-names be assigned to the same +class of region. When you use the defaults and have multiple page +masters, this happens implicitly. + +FOP throws an exception if the same region-name is used for one class +of region in one page-master, and another class in another page-master. + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/missing_flow_flowname.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/missing_flow_flowname.fo new file mode 100644 index 000000000..e0b890de7 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/missing_flow_flowname.fo @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/missing_sc_flowname.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/missing_sc_flowname.fo new file mode 100644 index 000000000..b59946f1b --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/missing_sc_flowname.fo @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/regnames_not_same_class.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/regnames_not_same_class.fo new file mode 100644 index 000000000..a00a3ed52 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/regnames_not_same_class.fo @@ -0,0 +1,306 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + Journey to the Shores + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/unique_region_names_in_pm.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/unique_region_names_in_pm.fo new file mode 100644 index 000000000..752d685d2 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/unique_region_names_in_pm.fo @@ -0,0 +1,313 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/errors/unmapped_flow_name.fo b/fop-0_14_0_regions/docs/examples/pagination/errors/unmapped_flow_name.fo new file mode 100644 index 000000000..1d5e91133 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/errors/unmapped_flow_name.fo @@ -0,0 +1,312 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_2pageseqs.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_2pageseqs.fo new file mode 100644 index 000000000..6aa18e6c7 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_2pageseqs.fo @@ -0,0 +1,1078 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + p. + + + + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_alt.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_alt.fo new file mode 100644 index 000000000..127c85070 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_alt.fo @@ -0,0 +1,1053 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + p. + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_bnb.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_bnb.fo new file mode 100644 index 000000000..65909b3bc --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_bnb.fo @@ -0,0 +1,1055 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + EMPTY PAGE + + + + + + p. + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_rep.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep.fo new file mode 100644 index 000000000..ab71e9c54 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep.fo @@ -0,0 +1,1022 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + p. + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats.fo new file mode 100644 index 000000000..0baf0956a --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats.fo @@ -0,0 +1,1024 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + p. + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_expl.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_expl.fo new file mode 100644 index 000000000..0baf0956a --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_expl.fo @@ -0,0 +1,1024 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + p. + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_nl.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_nl.fo new file mode 100644 index 000000000..09e75969b --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_rep_max_repeats_nl.fo @@ -0,0 +1,1024 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + John Franklin - Journey to the Shores of the Polar Sea + + + + + + p. + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_sc001.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_sc001.fo new file mode 100644 index 000000000..15ef78699 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_sc001.fo @@ -0,0 +1,1072 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/franklin_sc002.fo b/fop-0_14_0_regions/docs/examples/pagination/franklin_sc002.fo new file mode 100644 index 000000000..1cd00c320 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/franklin_sc002.fo @@ -0,0 +1,1152 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Chapter XI + + + + + + + + of the Polar Sea + + + + + + + + Journey to the Shores + + + + + + + + + + +Journey across the barren Grounds - Difficulty and delay in crossing Copper-Mine River - +Melancholy and fatal Results thereof - Extreme Misery of the whole Party - Murder of +Mr. Hood - Death of several of the Canadians - Desolate State of Fort Enterprise - +Distress suffered at that Place - Dr. Richardson's Narrative - Mr. Back's Narrative - +Conclusion. + + + + + 1821. August 17. + + + + +MY original intention, whenever the season should +compel us to relinquish the survey, had been to return by the way +of the Copper-Mine River, and in pursuance of my arrangement +with the Hook to travel to Slave Lake through the line of woods +extending thither by the Great Bear and Marten Lakes, but our +scanty stock of provision and the length of the voyage rendered it +necessary to make for a nearer place. We had already found that +the country, between Cape Barrow and the Copper-Mine River, +would not supply our wants, and this it seemed probable would now +be still more the case ; besides, at this advanced season, we expected +the frequent recurrence of gales, which would cause great detention, +if not danger in proceeding along that very rocky part of the coast. +I determined, therefore, to make at once for Arctic Sound, where +we had found the animals more numerous than at any other place ; +and entering Hood's River, to advance up that stream as far as it +was navigable, and then to construct small canoes out of the +materials of the larger ones, which could be carried in crossing the +barren grounds to Fort Enterprise. + + + August 19. + + + + +We were almost beaten out of our comfortless abodes +by rain during the night, and this morning the gale continued +without diminution. The thermometer fell to 33 deg. Two men were +sent with Junius to search for the deer which Augustus had killed. +Junius returned in the evening bringing part of the meat, but owing +to the thickness of the weather, his companions parted from him +and did not make their appearance. Divine service was read. On +the 20th we were presented with the most chilling prospect, the +small pools of water being frozen over, the ground being covered +with snow, and the thermometer at the freezing point at mid-day. +Flights of geese were passing to the southward. The wind however +was more moderate, having changed to the eastward. Considerable +anxiety prevailing respecting Belanger and Michel, the two men +who strayed from Junius yesterday, the rest were sent out to look +for them. The search was successful, and they all returned in the +evening. The stragglers were much fatigued, and had suffered +severely from the cold, one of them having his thighs frozen, and +what under our present circumstances was most grievous, they had +thrown away all the meat. The wind during the night returned to +the north-west quarter, blew more violently than ever, and raised a +very turbulent sea. The next day did not improve our condition, +the snow remained on the ground, and the small pools were frozen. +Our hunters were sent out, but they returned after a fatiguing +day's march without having seen any animals. We made a scanty +meal off a handful of pemmican, after which only half a bag +remained. + + + + +The wind abated after midnight, and the surf diminished rapidly, +which caused us to be on the alert at a very early hour on the 22d, +but we had to wait until six A.M. for the return of Augustus who +had continued out all night on an unsuccessful pursuit of deer. +It appears that he had walked a few miles farther along the coast, +than the party had done on the 18th, and from a sketch he drew on +the sand, we were confirmed in our former opinion that the shore +inclined more to the eastward beyond Point Turnagain. He also +drew a river of considerable size, that discharges its waters into +Walker's Bay; on the banks of which stream he saw a piece of +wood, such as the Esquimaux use in producing fire, and other marks +so fresh that he supposed they had recently visited the spot. We +therefore left several iron materials for them. Our men, cheered by +the prospect of returning, embarked with the utmost alacrity; and, +paddling with unusual vigour, carried us across Riley's and Walker's +Bays, a distance of twenty miles before noon, when we landed on +Slate-Clay Point, as the wind had freshened too much to permit us +to continue the voyage. The whole party went to hunt, but returned +without success in the evening, drenched with the heavy rain which +commenced soon after they had set out. Several deer were seen, +but could not be approached in this naked country; and as our +stock of pemmican did not admit of serving out two meals, we went +dinnerless to bed. + + + + +Soon after our departure to-day, a sealed tin-case, sufficiently +buoyant to float, was thrown overboard, containing a short account of +our proceedings, and the position of the most conspicuous points. +The wind blew off the land, the water was smooth, and as the sea +is in this part more free from islands than in any other, there was +every probability of its being driven off the shore into the current ; +which, as I have before mentioned, we suppose, from the circumstance +of Mackenzie's River being the only known stream that +brings down the wood we have found along the shores, to set to the +eastward. + + + August 23. + + + + +A severe frost caused us to pass a comfortless night. +At two P.M. we set sail, and the men voluntarily launched out to +make a traverse of fifteen miles across Melville Sound, before a +strong wind and heavy sea. The privation of food, under which +our voyagers were then labouring, absorbed every other terror; +otherwise the most powerful persuasion could not have induced +them to attempt such a traverse. It was with the utmost difficulty +that the canoes were kept from turning their broadsides to the +waves, though we sometimes steered with all the paddles. One of +them narrowly escaped being overset by this accident, happening +in mid-channel, where the waves were so high that the mast-head +of our canoe was often hid from the other, though it was sailing +within hail. The annexed plate, from Mr. Back's sketch, will convey +to the reader an accurate idea of the peril of our situation. + + + + +The traverse, however, was made;we were then near a high +rocky lee shore, on which a heavy surf was beating. The wind +being on the beam, the canoes drifted fast to leeward; and, on +rounding a point, the recoil of the sea from the rocks was so great +that they were with difficulty kept from foundering. We looked in +vain for a sheltered bay to land in ; but, at length, being unable to +weather another point, we were obliged to put ashore on the open +beach, which, fortunately, was sandy at this spot. The debarkation +was effected in the manner represented in the plate; and, fortunately, +without further injury than the splitting of the head of +the second canoe, which was easily repaired. + + + + +Our encampment being near to the place where we killed the deer +on the 11th, almost the whole party went out to hunt, but they +returned in the evening without having seen any game. The +berries, however, were ripe and plentiful, and, with the addition +of some country tea, furnished a supper. There were some showers +in the afternoon,and the weather was cold, the thermometer +being 42 deg, but the evening and night were calm and fine. It may be +remarked that the mosquitoes disappeared when the late gales +commenced. + + + August 25. + + + + +Embarking at three A. M., we stretched across +the eastern entrance of Bathurst's Inlet, and arrived at an island, +which I have named after Colonel Barry, of Newton Barry. Some +deer being seen on the beach, the hunters went in pursuit of +them, and succeeded in killing three females, which enabled us to +save our last remaining meal of pemmican. They saw also some +fresh tracks of musk oxen on the banks of a small stream, which +flowed into a lake in the centre of the island. These animals must +have crossed a channel, at least, three miles wide, to reach the nearest +of these islands. Some specimens of variegated pebbles and jasper +were found here imbedded in the amygdaloidal rock. + + + + +Re-embarking at two P.M., and continuing through what was +supposed to be a channel between two islands, we found our passage +barred by a gravelly isthmus of only ten yards in width ; the canoes +and cargoes were carried across it, and we passed into Bathurst's Inlet +through another similar channel, bounded on both sides by steep +rocky hills. The wind then changing from S.E. to N.W. brought +heavy rain, and we encamped at seven P.M., having advanced +eighteen miles. + + + + +Starting this morning with a fresh breeze in our favour, +we soon reached that part of Barry's Island where the canoes were +detained on the 2d and 3rd of this month, and contrary to what we +then experienced, the deer were now plentiful. The hunters killed +two, and we were relieved from all apprehension of an immediate +want of food. One would suppose the deer were about to retire to +the main shore from their assembling at this time in such numbers +on the islands nearest to the coast. Those we saw were generally +females with their young, and all of them very lean. + + + + +The wind continued in the same direction until we had rounded +Point Wollaston, and then changed to a quarter, which enabled us +to steer for Hood's River, which we ascended as high as the first +rapid and encamped. Here terminated our voyage on the Arctic +sea, during which we had gone over six hundred and fifty geographical +miles. Our Canadian voyagers could not restrain their expressions +of joy at having turned their backs on the sea, and +they passed the evening talking over their past adventures with +much humour and no little exaggeration. The consideration that +the most painful, and certainly the most hazardous, part of the +journey was yet to come, did not depress their spirits at all. It is +due to their character to mention that they displayed much courage +in encountering the dangers of the sea, magnified to them by their +novelty. + + + + +The shores between Cape Barrow and Cape Flinders, including +the extensive branches of Arctic and Melville Sounds, and Bathurst's +Inlet, may be comprehended in one great gulf, which I have distinguished +by the appellation of George IV.'s Coronation Gulf, in +honour of His Most Gracious Majesty, the latter name being added +to mark the time of its discovery. The Archipelago of islands which +fringe the coast from Copper-Mine River to Point Turnagain, I have +named in honour of His Royal Highness the Duke of York. + + + + +It may be deserving of notice that the extremes in temperature +of the sea water during our voyage were 53 deg and 35 deg, but its general +temperature was between 43 deg and 48 deg. Throughout our return from +Point Turnagain we observed that the sea had risen several feet +above marks left at our former encampments. This may, perhaps, +be attributed to the north-west gales. + + + August 26. + + + + +Previous to our departure this morning, an assortment +of iron materials, beads, looking-glasses, and other articles +were put up in a conspicuous situation for the Esquimaux, and the +English Union was planted on the loftiest sand-hill, where it might +be seen by any ships passing in the offing. Here also, was deposited +in a tin bow a letter containing an outline of our proceedings, the +latitude and longitude of the principal places, and the course we +intended to pursue towards Slave Lake. + + + + +Embarking at eight A.M. we proceeded up the river, which is full +of sandy shoals, but sufficiently deep for canoes in the channels. It is +from one hundred to two hundred yards wide, and is bounded by high +and steep banks of clay. We encamped at a cascade of eighteen or +twenty feet high, which is produced by a ridge of rock crossing the +river, and the nets were set. A mile below this cascade Hood's +River is joined by a stream half its own size, which I have called +James' Branch. Bear and deer tracks had been numerous on the +banks of the river when we were here before, but not a single recent +one was to be seen at this time. Credit, however, killed a small +deer at some distance inland, which, with the addition of berries, +furnished a delightful repast this evening. The weather was remarkably +fine, and the temperature so mild, that the mosquitoes again +made their appearance, but not in any great numbers. Our distance +made to-day was not more than six miles. + + + + +The next morning the net furnished us with ten white fish +and trout. Having made a further deposit of iron work for the +Esquimaux we pursued our voyage up the river, but the shoals and +rapids in this part were so frequent, that we walked along the banks +the whole day, and the crews laboured hard in carrying the canoes +thus lightened over the shoals or dragging them up the rapids, yet +our journey in a direct line was only about seven miles. In the +evening we encamped at the lower end of a narrow chasm through +which the river flows for upwards of a mile. The walls of this +chasm are upwards of two hundred feet high, quite perpendicular, +and in some places only a few yards apart. The river precipitates +itself into it over a rock, forming two magnificent and picturesque +falls close to each other. The upper fall is about sixty feet high, and +the lower one at least one hundred, but perhaps considerably more, +for the narrowness of the chasm into which it fell prevented us from +seeing its bottom, and we could merely discern the top of the spray +far beneath our feet. The lower fall is divided into two, by an +insulated column of rock which rises about forty feet above it. The +whole descent of the river at this place probably exceeds two +hundred and fifty feet. The rock is very fine felspathose sandstone. +It has a smooth surface and a light red colour. I have named these +magnificent cascades Wilberforce Falls, as a tribute of my respect +for that distinguished philanthropist and Christian. Messrs. Back and +Hood took beautiful sketches of this majestic scene, which are +combined in the annexed plate. + + + + +The river being surveyed from the summit of a hill, above these +falls, appeared so rapid and shallow, that it seemed useless to +attempt proceeding any farther in the large canoes. I therefore +determined on constructing out of their materials two smaller ones +of sufficient size to contain three persons, for the purpose of crossing +any river that might obstruct our progress. This operation was +accordingly commenced, and by the 31st both the canoes being +finished, we prepared for our departure on the following day. + + + + +The leather which had been preserved for making shoes was +equally divided among the men, two pairs of flannel socks were given +to each person, and such articles of warm clothing as remained, were +issued to those who most required them. They were also furnished +with one of the officers' tents. This being done, I communicated to +the men my intention of proceeding in as direct a course as possible +to the part of Point Lake, opposite to our spring encampment +which was only distant one hundred and forty-nine miles in a +straight line. They received the communication cheerfully, considered +the journey to be short, and left me, in high spirits, to +arrange their own packages. The stores, books, &c., which were not +absolutely necessary to be carried, were then put up in boxes to be +left en cache here, in order that the men's burdens might be as light +as possible. + + + + +The next morning was warm, and very fine. Every one was on +the alert at an early hour, being anxious to commence the journey. +Our luggage consisted of ammunition, nets, hatchets, ice chisels, +astronomical instruments, clothing, blankets, three kettles, and +the two canoes, which were each carried by one man. The +officers carried such a portion of their own things as their strength +would permit;the weight carried by each man was about ninety +pounds, and with this we advanced at the rate of about a mile an +hour, including rests. In the evening the hunters killed a lean cow, +out of a large drove of musk-oxen; but the men were too much +laden to carry more than a small portion of its flesh. The alluvial +soil, which towards the mouth of the river spreads into plains, +covered with grass and willows, was now giving place to a more +barren and hilly country; so that we could but just collect sufficient +brush wood to cook our suppers. The part of the river we skirted +to-day was shallow, and flowed over a bed of sand ; its width about +one hundred and twenty yards. About midnight our tent was blown +down by a squall, and we were completely drenched with rain before +it could be re-pitched. + + + + +In the morning of the 1st of September a fall of snow took +place; the canoes became a cause of delay, by the difficulty of +carrying them in a high wind, and they sustained much damage +from the falls of those who had charge of them. The face of the +country was broken by hills of moderate elevation, but the ground +was plentifully strewed with small stones, which, to men bearing +heavy burthens, and whose feet were protected only by soft moose +skin shoes, occasioned great pain. At the end of eleven miles we +encamped, and sent for a musk-ox and a deer, which St. Germain +and Augustus had killed. The day was extremely cold, the ther-mometer +varying between 34 deg and 36 deg. In the afternoon a heavy +fall of snow took place, on the wind changing from north-west to +south-west. We found no wood at the encampment, but made a +fire of moss to cook the supper, and crept under our blankets for +warmth. At sun-rise the thermometer was at 31 deg, and the wind +fresh from north-west; but the weather became mild in the course +of the forenoon, and the snow disappeared from the gravel. The +afternoon was remarkably fine, and the thermometer rose to 50 deg. +One of the hunters killed a musk-ox. The hills in this part are +lower and more round-backed than those we passed yesterday, and +exhibited but little naked rock; they were covered with lichens. + + + + +Having ascertained from the summit of the highest hill near the +tents, that the river continued to preserve a west course; and fear-ing +that by pursuing it further we might lose much time, and un-necessarily +walk over a great deal of ground, I determined on +quitting its banks the next day, and making as directly as we could for +Point Lake. We accordingly followed the river on the 3d, only to +the place where the musk-ox had been killed last evening, and after +the meat was procured, crossed the river in our two canoes lashed +together. We now emerged from the valley of the river, and entered +a level, but very barren, country, varied only by small lakes and +marshes, the ground being covered with small stones. Many old tracks +of rein-deer were seen in the clayey soil, and some more recent +ones of the musk-ox. We encamped on the borders of Wright's +River, which flows to the eastward; the direct distance walked to-day +being ten miles and three-quarters. The next morning was +very fine, and,as the day advanced, the weather became quite +warm. We set out at six A. M., and, having forded the river, +walked over a perfectly level country, interspersed with small lakes, +which communicated with each other, by streams running in various +directions. No berry-bearing plants were found in this part, the +surface of the earth being thinly covered in the moister places with +a few grasses, and on the drier spots with lichens. + + + + +Having walked twelve miles and a half, we encamped at seven P.M., +and distributed our last piece of pemmican, and a little arrow-root +for supper, which afforded but a scanty meal. This evening was +warm, but dark clouds overspread the sky. Our men now began to +find their burdens very oppressive, and were much fatigued by this +day's march, but did not complain. One of them was lame from an +inflammation in the knee. Heavy rain commenced at midnight, and +continued without intermission until five in the morning, when it +was succeeded by snow on the wind changing to north-west, which +soon increased to a violent gale. As we had nothing to eat, and +were destitute of the means of making a fire, we remained in our +beds all the day ; but the covering of our blankets was insufficient to +prevent us from feeling the severity of the frost, and suffering in-convenience +from the drifting of the snow into our tents. There +was no abatement of the storm next day ; our tents were completely +frozen, and the snow had drifted around them to a depth of three +feet, and even in the inside there was a covering of several inches on +our blankets. Our suffering from cold, in a comfortless canvass tent +in such weather, with the temperature at 20 deg, and without fire, +will easily be imagined;it was, however, less than that which we +felt from hunger. + + + + +The morning of the 7th cleared up a little, but the wind was still +strong, and the weather extremely cold. From the unusual con-tinuance +of the storm, we feared the winter had set in with all its +rigour, and that by longer delay we should only be exposed to an +accumulation of difficulties; we therefore prepared for our journey, +although we were in a very unfit condition for starting, being weak +from fasting, and our garments stiffened by the frost. We had no +means of making a fire to thaw them, the moss, at all times difficult +to kindle, being now covered with ice and snow. A considerable +time was consumed in packing up the frozen tents and bed clothes, +the wind blowing so strong that no one could keep his hands long +out of his mittens. + + + + +Just as we were about to commence our march, I was seized with +a fainting fit, in consequence of exhaustion and sudden exposure to +the wind; but after eating a morsel of portable soup, I recovered, so +far as to be able to move on. I was unwilling at first to take this +morsel of soup, which was diminishing the small and only remaining +meal for the party; but several of the men urged me to it, with +much kindness. The ground was covered a foot deep with snow, +the margin of the lakes was incrusted with ice, and the swamps over +which we had to pass were entirely frozen; but the ice not being +sufficiently strong to bear us, we frequently plunged knee-deep in +water. Those who carried the canoes were repeatedly blown down +by the violence of the wind, and they often fell, from making an +insecure step on a slippery stone; on one of these occasions, the +largest canoe was so much broken as to be rendered utterly unser-viceable. +This was felt as a serious disaster, as the remaining canoe +having through mistake been made too small, it was doubtful +whether it would be sufficient to carry us across a river. Indeed +we had found it necessary in crossing Hood's River, to lash the two +canoes together. As there was some suspicion that Benoit, who +carried the canoe, had broken it intentionally, he having on a former +occasion been overheard by some of the men to say, that he would +do so when he got it in charge, we closely examined him on the +point; he roundly denied having used the expressions attributed to +him, and insisted that it was broken by his falling accidentally; and +as he brought men to attest the latter fact, who saw him tumble, we +did not press the matter further. I may here remark that our +people had murmured a good deal at having to carry two canoes, +though they were informed of the necessity of taking both, in case +it should be deemed advisable to divide the party; which it had +been thought probable we should be obliged to do, if animals proved +scarce, in order to give the whole the better chance of procuring +subsistence, and also for the purpose of sending forward some of the +best walkers to search for Indians, and to get them to meet us with +supplies of provision. The power of doing this was now at an end. +As the accident could not be remedied we turned it to the best +account by making a fire of the bark and timbers of the broken +vessel, and cooked the remainder of our portable soup and arrow-root. +This was a scanty meal after three days' fasting, but it served +to allay the pangs of hunger, and enabled us to proceed at a quicker +pace than before. The depth of the snow caused us to march in +Indian file, that is in each other's steps; the voyagers taking it in +turn to lead the party. A distant object was pointed out to this +man in the direction we wished to take, and Mr. Hood followed +immediately behind him, to renew the bearings, and keep him from +deviating more than could be helped from the mark. It may be +here observed, that we proceeded in this manner throughout our +route across the barren grounds. + + + + +In the afternoon we got into a more hilly country, where the +ground was strewed with large stones. The surface of these was +covered with lichens of the genus gyrophora, which the Canadians +term tripe de roche. A considerable quantity was gathered, and +with half a partridge each, (which were shot in the course of the +day,) furnished us with a slender supper, which we cooked with a +few willows, dug up from beneath the snow. We passed a comfortless +night in our damp clothes, but took the precaution of sleeping upon +our socks and shoes to prevent them from freezing. This plan was +afterwards adopted throughout the journey. + + + + +At half past five in the morning we proceeded; and after walking +about two miles, came to Cracroft's River, flowing to the westward, +with a very rapid current over a rocky channel. We had much diffi-culty +in crossing this, the canoe being useless, not only from the bot-tom +of the channel being obstructed by large stones, but also from its +requiring gumming, an operation which, owing to the want of wood +and the frost, we were unable to perform. However, after following +the course of the river some way, we effected a passage by means of a +range of large rocks that crossed a rapid. As the current was strong, +and many of the rocks were covered with water to the depth of two +or three feet, the men were exposed to much danger in carrying their +heavy burthens across, and several of them actually slipped into the +stream, but were immediately rescued by the others. Junius went +farther up the river in search of a better crossing place, and did not +rejoin us to-day. As several of the party were drenched from head to +foot, and we were all wet to the middle, our clothes became stiff with +the frost, and we walked with much pain for the remainder of the day. +The march was continued to a late hour, being anxious to rejoin the +hunters who had gone before, but we were obliged to encamp at the +end of ten miles and a quarter, without seeing them. Our only +meal to-day consisted of a partridge each, (which the hunters shot,) +mixed with tripe de roche. This repast although scanty for men, +with appetites such as our daily fatigue created, proved a cheerful +one, and was received with thankfulness. Most of the men had to +sleep in the open air, in consequence of the absence of Credit, who +carried their tent; but we fortunately found an unusual quantity of +roots to make a fire, which prevented their suffering much from the +cold, though the thermometer was at 17 deg. + + + + +We started at six on the 9th, and at the end of two miles re-gained +our hunters, who were halting on the borders of a lake amidst +a clump of stunted willows. This lake stretched to the westward as +far as we could see, and its waters were discharged by a rapid stream +one hundred and fifty yards wide. Being entirely ignorant where +we might be led by pursuing the course of the lake, and dreading +the idea of going a mile unnecessarily out of the way, we deter-mined +on crossing the river if possible; and the canoe was gummed +for the purpose, the willows furnishing us with fire. But we had to +await the return of Junius before we could make the traverse. In +the mean time we gathered a little tripe de roche, and breakfasted +upon it and a few partridges that were killed in the morning. +St. Germain and Adam were sent upon some recent tracks of deer. +Junius arrived in the afternoon, and informed us that he had seen +a large herd of musk-oxen on the banks of Cracroft's River, and had +wounded one of them, but it had escaped. He brought about four +pounds of meat, the remains of a deer that had been devoured by +the wolves. The poor fellow was much fatigued, having walked +throughout the night, but as the weather was particularly favourable +for our crossing the river, we could not allow him to rest. After he +had taken some refreshment we proceeded to the river. The canoe +being put into the water was found extremely ticklish, but it was +managed with much dexterity by St. Germain, Adam, and Peltier, +who ferried over one passenger at a time, causing him to lie flat in its +bottom, by no means a pleasant position, owing to its leakiness, but +there was no alternative. The transport of the whole party was +effected by five o'clock, and we walked about two miles further, and +encamped, having come five miles and three quarters on a south-west +course. Two young alpine hares were shot by St. Germain, which, +with the small piece of meat brought in by Junius, furnished the +supper of the whole party. There was no tripe de roche here. The +country had now become decidedly hilly, and was covered with snow. +The lake preserved its western direction, as far as I could see from +the summit of the highest mountain near the encampment. We +subsequently learned from the Copper Indians, that the part at +which we had crossed the river was the Congecatha-wha-chaga of +Hearne, of which I had little idea at the time, not only from the +difference of latitude, but also from its being so much farther east of +the mouth of the Copper-Mine River, than his track is laid down. +He only making one degree and three quarters difference of lon-gitude, +and we, upwards of four. Had I been aware of the fact, +several days harassing march, and a disastrous accident would have +been prevented by keeping on the western side of the lake, instead +of crossing the river. We were informed also, that this river is +the Anatessy or River of Strangers, and is supposed to fall into +Bathurst's Inlet; but although the Indians have visited its mouth, +their description was not sufficient to identify it with any of the +rivers whose mouths we had seen. It probably falls in that part of +the coast which was hid from our view by Goulburn's or Elliot's +Islands. + + + September 10. + + + + +We had a cold north wind, and the atmosphere +was foggy. The thermometer 18 deg at five A.M. In the course of +our march this morning, we passed many small lakes; and the +ground becoming higher and more hilly as we receded from the +river, was covered to a much greater depth with snow. This ren-dered +walking not only extremely laborious, but also hazardous in +the highest degree;for the sides of the hills, as is usual throughout +the barren grounds, abounding in accumulations of large angular +stones, it often happened that the men fell into the interstices +with their loads on their backs, being deceived by the smooth +appearance of the drifted snow. If any one had broken a limb +here, his fate would have been melancholy indeed; we could neither +have remained with him, nor carried him on. We halted at ten to +gather tripe de roche,but it was so frozen, that we were quite +benumbed with cold before a sufficiency could be collected even for +a scanty meal. On proceeding our men were somewhat cheered, by +observing on the sandy summit of a hill, from whence the snow had +been blown, the summer track of a man; and afterwards by seeing +several deer tracks on the snow. About noon the weather cleared +up a little, and, to our great joy, we saw a herd of musk-oxen +grazing in a valley below us. The party instantly halted, and the +best hunters were sent out; they approached the animals with the +utmost caution, no less than two hours being consumed before they +got within gun-shot. In the mean time we beheld their proceed-ings +with extreme anxiety, and many secret prayers were, doubtless, +offered up for their success. At length they opened their fire, and +we had the satisfaction of seeing one of the largest cows fall; another +was wounded, but escaped. This success infused spirit into our +starving party. To skin and cut up the animal was the work of a +few minutes. The contents of its stomach were devoured upon +the spot, and the raw intestines, which were next attacked, were +pronounced by the most delicate amongst us to be excellent. A few +willows, whose tops were seen peeping through the snow in the bottom +of the valley, were quickly grubbed, the tents pitched, and supper +cooked, and devoured with avidity. This was the sixth day since we +had had a good meal. The tripe de roche, even where we got +enough, only serving to allay the pangs of hunger for a short time. +After supper, two of the hunters went in pursuit of the herd, but +could not get near them. + + + + +We were detained all the next day by a strong southerly wind, +and were much incommoded in the tents by the drift snow. The +temperature was 20 deg. The average for the last ten days about +24.5 deg. We restricted ourselves to one meal to-day as we were at +rest, and there was only meat remaining sufficient for the next day. + + + + +The gale had not diminished on the 12th, and, as we were +fearful of its continuance for some time, we determined on going +forward; our only doubt regarded the preservation of the canoe, +but the men promised to pay particular attention to it, and the +most careful persons were appointed to take it in charge. The snow +was two feet deep, and the ground much broken, which rendered +the march extremely painful. The whole party complained more of +faintness and weakness than they had ever done before; their +strength seemed to have been impaired by the recent supply of +animal food. In the afternoon the wind abated, and the snow ceased; +cheered with the change we proceeded forward at a quicker pace, +and encamped at six P. M., having come eleven miles. Our supper +consumed the last of our meat. + + + + +We set out on the 13th, in thick hazy weather, and, after an hour's +march, had the extreme mortification to find ourselves on the +borders of a large lake, which we subsequently learned from the +Indians was named Contwoy-to, or Rum Lake; neither of its extre- +mities could be seen, and as the portion which lay to the east +seemed the widest, we coasted along to the westward portion in +search of a crossing-place. This lake being bounded by steep and +lofty hills, our march was very fatiguing. Those sides which were +exposed to the sun, were free from snow, and we found upon them +some excellent berries. We encamped at six P. M., having come +only six miles and a half. Credit was then missing, and he did not +return during the night. We supped off a single partridge and +some tripe de roche;this unpalatable weed was now quite nau-seous +to the whole party, and in several it produced bowel com-plaints. +Mr. Hood was the greatest sufferer from this cause. This +evening we were extremely distressed, at discovering that our im-provident +companions,since we left Hood's River, had thrown +away three of the fishing-nets, and burnt the floats ; they knew we +had brought them to procure subsistence for the party, when the +animals should fail, and we could scarcely believe the fact of their +having wilfully deprived themselves of this resource, especially +when we considered that most of them had passed the greater part of +their servitude in situations where the nets alone had supplied them +with food. Being thus deprived of our principal resource, that of +fishing, and the men evidently getting weaker every day, it became +necessary to lighten their burthens of every thing except ammunition, +clothing, and the instruments that were required to find our +way. I, therefore, issued directions to deposit at this encampment +the dipping needle, azimuth compass, magnet, a large thermometer, +and a few books we had carried, having torn out of these such parts +as we should require to work the observations for latitude and +longitude. I also promised,as an excitement to the efforts in +hunting, my gun to St. Germain, and an ample compensation to +Adam, or any of the other men who should kill any animals. +Mr. Hood, on this occasion, lent his gun to Michel, the Iroquois, +who was very eager in the chase, and often successful. + + + September 14. + + + + +This morning the officers being assembled round +a small fire, Perrault presented each of us with a small piece of meat +which he had saved from his allowance. It was received with great +thankfulness, and such an act of self-denial and kindness, being +totally unexpected in a Canadian voyager, filled our eyes with tears. +In directing our course to a river issuing from the lake, we met +Credit, who communicated the joyful intelligence of his having +killed two deer in the morning. We instantly halted, and having +shared the deer that was nearest to us, prepared breakfast. After +which, the other deer was sent for, and we went down to the river, +which was about three hundred yards wide, and flowed with +great velocity through a broken rocky channel. Having searched +for a part where the current was most smooth, the canoe was +placed in the water at the head of a rapid, and St. Germain, Solomon +Belanger, and I, embarked in order to cross. We went from the +shore very well, but in mid-channel the canoe became difficult to +manage under our burden as the breeze was fresh. The current +drove us to the edge of the rapid, when Belanger unfortunately +applied his paddle to avert the apparent danger of being forced +down it, and lost his balance. The canoe was overset in con-sequence +in the middle of the rapid. We fortunately kept hold of +it, until we touched a rock where the water did not reach higher +than our waists; here we kept our footing, notwithstanding the +strength of the current, until the water was emptied out of the +canoe. Belanger then held the canoe steady whilst St. Germain +placed me in it, and afterwards embarked himself in a very dexterous +manner. It was impossible, however, to embark Belanger, +as the canoe would have been hurried down the rapid, the moment +he should have raised his foot from the rock on which he stood. +We were, therefore, compelled to leave him in his perilous situation. +We had not gone twenty yards before the canoe, striking on a +sunken rock, went down. The place being shallow, we were again +enabled to empty it, and the third attempt brought us to the shore. +In the mean time Belanger was suffering extremely, immersed to +his middle in the centre of a rapid, the temperature of which was +very little above the freezing point, and the upper part of his body +covered with wet clothes, exposed in a temperature not much above +zero, to a strong breeze. He called piteously for relief, and +St. Germain on his return endeavoured to embark him, but in vain. +The canoe was hurried down the rapid, and when he landed he was +rendered by the cold incapable of further exertion, and Adam at-tempted +to embark Belanger, but found it impossible. An attempt +was next made to carry out to him a line, made of the slings of the +men's loads. This also failed, the current acting so strongly upon +it, as to prevent the canoe from steering, and it was finally broken +and carried down the stream. At length, when Belanger's strength +seemed almost exhausted, the canoe reached him with a small cord +belonging to one of the nets, and he was dragged perfectly senseless +through the rapid. By the direction of Dr. Richardson, he was +instantly stripped, and being rolled up in blankets, two men un-dressed +themselves and went to bed with him; but it was some +hours before he recovered his warmth and sensations. As soon as +Belanger was placed in his bed, the officers immediately sent over +my blankets, and a person to make a fire. Augustus brought the +canoe over, and in returning he was obliged to descend both the +rapids, before he could get across the stream; which hazardous +service he performed with the greatest coolness and judgment. It +is impossible to describe my sensations as I witnessed the various +unsuccessful attempts to relieve Belanger. The distance prevented +my seeing distinctly what was going on, and I continued pacing up +and down upon the rock on which I landed, regardless of the +coldness of my drenched and stiffening garments. The canoe, in +every attempt to reach him, was hurried down the rapid, and was +lost to the view amongst the rocky islets, with a rapidity that +seemed to threaten certain destruction; once, indeed, I fancied that +I saw it overwhelmed in the waves. Such an event would have +been fatal to the whole party. Separated as I was from my com-panions, +without gun, ammunition, hatchet, or the means of making +a fire, and in wet clothes, my doom would have been speedily sealed. +My companions too, driven to the necessity of coasting the lake, +must have sunk under the fatigue of rounding its innumerable arms +and bays, which, as we have learned from the Indians, are very +extensive. By the goodness of Providence, however, we were spared +at that time, and some of us have been permitted to offer up our +thanksgivings, in a civilized land, for the signal deliverances we then +and afterwards experienced. + + + + + + + + Commentary 1 + + + + + Commentary 2 + + + + + Commentary 3 + + + + + Commentary 4 + + + + + Commentary 5 + + + + + Commentary 6 + + + + + Commentary 7 + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/multflows.fo b/fop-0_14_0_regions/docs/examples/pagination/multflows.fo new file mode 100644 index 000000000..668109085 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/multflows.fo @@ -0,0 +1,1896 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Multiple Page Sequences + + + + + + + + + + + + + +This is paragraph number 1, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 2, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 3, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 4, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 5, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 6, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 7, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 8, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 9, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 10, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 11, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 12, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 13, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 14, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 15, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 16, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 17, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 18, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 19, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 20, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 21, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 22, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 23, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 24, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 25, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 26, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 27, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 28, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 29, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 30, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 31, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 32, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 33, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 34, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 35, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 36, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 37, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 38, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 39, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 40, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 41, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 42, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 43, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 44, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 45, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 46, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 47, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 48, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 49, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 50, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + + + + + +This is paragraph number 1, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 2, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 3, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 4, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 5, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 6, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 7, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 8, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 9, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 10, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 11, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 12, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 13, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 14, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 15, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 16, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 17, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 18, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 19, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 20, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 21, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 22, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 23, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 24, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 25, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 26, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 27, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 28, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 29, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 30, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 31, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 32, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 33, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 34, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 35, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 36, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 37, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 38, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 39, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 40, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 41, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 42, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 43, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 44, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 45, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + + + + + +This is paragraph number 1, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 2, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 3, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 4, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 5, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 6, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 7, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 8, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 9, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 10, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 11, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 12, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 13, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 14, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 15, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 16, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 17, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 18, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 19, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 20, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 21, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 22, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 23, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 24, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 25, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 26, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 27, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 28, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 29, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 30, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 31, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 32, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 33, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 34, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 35, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 36, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 37, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 38, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 39, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 40, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 41, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 42, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 43, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 44, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 45, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 46, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 47, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 48, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 49, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 50, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 51, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 52, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 53, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 54, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 55, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/pagination/threepageseqs.fo b/fop-0_14_0_regions/docs/examples/pagination/threepageseqs.fo new file mode 100644 index 000000000..0c012ee1c --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/pagination/threepageseqs.fo @@ -0,0 +1,2006 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Multiple Page Sequences + + + + + + + + + + + + + + + + + + + + + + + + + +This is paragraph number 1, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 2, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 3, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 4, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 5, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 6, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 7, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 8, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 9, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 10, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 11, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 12, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 13, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 14, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 15, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 16, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 17, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 18, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 19, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 20, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 21, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 22, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 23, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 24, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 25, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 26, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 27, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 28, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 29, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 30, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 31, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 32, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 33, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 34, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 35, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 36, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 37, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 38, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 39, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 40, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 41, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 42, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 43, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 44, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 45, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 46, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 47, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 48, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 49, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + +This is paragraph number 50, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 1, and flow 1. + + + + + + + + + + +Multiple Page Sequences + + + + + + + + + + + + + + + + + + + + + + + + + +This is paragraph number 1, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 2, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 3, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 4, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 5, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 6, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 7, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 8, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 9, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 10, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 11, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 12, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 13, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 14, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 15, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 16, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 17, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 18, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 19, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 20, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 21, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 22, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 23, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 24, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 25, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 26, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 27, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 28, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 29, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 30, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 31, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 32, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 33, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 34, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 35, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 36, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 37, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 38, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 39, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 40, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 41, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 42, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 43, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 44, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + +This is paragraph number 45, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 2, and flow 1. + + + + + + + + + + +Multiple Page Sequences + + + + + + + + + + + + + + + + + + + + + + + + + +This is paragraph number 1, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 2, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 3, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 4, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 5, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 6, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 7, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 8, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 9, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 10, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 11, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 12, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 13, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 14, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 15, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 16, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 17, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 18, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 19, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 20, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 21, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 22, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 23, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 24, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 25, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 26, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 27, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 28, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 29, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 30, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 31, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 32, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 33, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 34, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 35, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 36, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 37, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 38, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 39, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 40, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 41, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 42, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 43, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 44, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 45, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 46, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 47, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 48, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 49, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 50, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 51, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 52, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 53, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 54, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + +This is paragraph number 55, generated by the flowmaker.plx +Perl script, and called using the :r !command VI syntax, with one +numeric argument. It's a fast way of creating a whack of blocks. +This paragraph is in page sequence 3, and flow 1. + + + + + diff --git a/fop-0_14_0_regions/docs/examples/results.html b/fop-0_14_0_regions/docs/examples/results.html new file mode 100644 index 000000000..b518c3d38 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/results.html @@ -0,0 +1,6 @@ +Test Results + +

Compare Results
+created 02.08.2000 23:33:08

+ +
reference filetest fileidentical?
diff --git a/fop-0_14_0_regions/docs/examples/runtests.bat b/fop-0_14_0_regions/docs/examples/runtests.bat new file mode 100755 index 000000000..ecd04d8dc --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/runtests.bat @@ -0,0 +1,27 @@ +@echo off + +echo Fop Test +echo ---------------- + +if "%JAVA_HOME%" == "" goto error + + +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib;..\..\lib\w3c.jar;..\..\build\fop.jar +set ANT_HOME=..\..\lib + +echo Starting Tests ... + +%JAVA_HOME%\bin\java.exe -Dant.home=%ANT_HOME% -classpath %LOCALCLASSPATH%;%CLASSPATH% org.apache.tools.ant.Main %1 %2 %3 %4 %5 + +goto end + +:error + +echo ERROR: JAVA_HOME not found in your environment. +echo Please, set the JAVA_HOME variable in your environment to match the +echo location of the Java Virtual Machine you want to use. + +:end + +rem set LOCALCLASSPATH= + diff --git a/fop-0_14_0_regions/docs/examples/runtests.sh b/fop-0_14_0_regions/docs/examples/runtests.sh new file mode 100755 index 000000000..34a2e403c --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/runtests.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +echo +echo "Fop Test" +echo "----------------" +echo + +if [ "$JAVA_HOME" = "" ] ; then + echo "ERROR: JAVA_HOME not found in your environment." + echo + echo "Please, set the JAVA_HOME variable in your environment to match the" + echo "location of the Java Virtual Machine you want to use." + exit 1 +fi + +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib:../../build/fop.jar:../../lib/w3c.jar +ANT_HOME=../../lib + +echo Building with classpath $CLASSPATH:$LOCALCLASSPATH +echo + +echo Starting Tests... +echo + +$JAVA_HOME/bin/java -Dant.home=$ANT_HOME -classpath "$LOCALCLASSPATH:$CLASSPATH" org.apache.tools.ant.Main $* diff --git a/fop-0_14_0_regions/docs/examples/svg/All.xml b/fop-0_14_0_regions/docs/examples/svg/All.xml new file mode 100644 index 000000000..0335b0fcc --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/All.xml @@ -0,0 +1,12 @@ + + + + SVG Tests + + Some test SVG documents embedded into fo. + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/BasicExamples.xml b/fop-0_14_0_regions/docs/examples/svg/BasicExamples.xml new file mode 100644 index 000000000..883af57db --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/BasicExamples.xml @@ -0,0 +1,193 @@ + + + + Basic SVG Examples + + Shows some of the basic svg elements when placed in FO. + + + Examples +
+ Introduction + +

+ These examples show the areas of SVG currently implemented. +

+

+ This is provided so that others can see how to write the svg elements + and the result to expect. +

+ +
+
+ Graphic Elements + + SVG Examples + examples + +

+ The SVG xml data is capable of any type of drawing, + from simple lines and shapes to complex shading, colouring + and transformations. +

+

+ Currently only a small set of the possibilities are implemented. +

+ +
+ + Basic Shapes + +

+ Lines can be draw, they map directly to PDF data. + ex-lines + The example above shows some lines. +

+

+ The rectangle is a simple shape, which maps directly + to PDF data. + ex-rect + The example above is a simple rectangle, circle and ellipse. +

+

+ The circle and ellipse are drawn by creating four curves + that make up the shape. +

+

+ All shapes can have style applied to them. Style can also + be inherited from a surrounding <svg:g> element. +

+ +
+ + Curves and Paths + +

+ ex-paths + Paths have no effect by themselves unless there + is some style applied. The default styling is set + by the svg area. +

+

+ There are many possible parts to a path. There are simple + moveto, lineto and closepath commands. There are also + a number of curve commands that create Bezier curves etc. +

+ +
+ + Poly Elements + +

+ ex-poly + Polylines and Polygons are multi-point lines + made up of straight lines. A polygon has a close path + at the end. Note how the numbers in the points + property can be over a number of lines to make it + easier to read. +

+

+ The only difference between the polyline and the polygon + is that a polygon has a close path at the end. +

+ +
+ + Styling + +

+ ex-style + Most elements can have style. The style information + is a list of properties separated by a ';'. The + property name and value are separated by a ':'. + Notice how the style of the sub-element overrides that + of all the ones in the heirarchy, the element also inherits + all the other style data. +

+ +
+ + G Element + +

+ ex-g + The G element can contain any other graphic + element, including other G elements. The purpose + of this is to enable style and transform to apply + to a group of graphic elements. The elements have no + other relationship except they are drawn together. +

+ +
+ + Transform + +

+ The transform of an element can do all the usual + mathematical transforms. These can be represented by + a matrix for use in the pdf. The options include + translate, scale, rotate, shear etc. +

+

+ The transform of an element is accumulative from + its ancestors. That is, if a transform is applied to + a <svg:g> element then any graphic element also + has that transform applied to it. If the child + element has a transform then its transform is also + applied after the transform of the parent. +

+

+ ex-transform +

+ +
+ + Text Elements + +

+ ex-text + Text can be placed in any position and with style. +

+ +
+ + Clipping, Masking + +

+ Not yet implemented. + The SVG area is clipped to start with. +

+ +
+ + Text Paths + +

+ ex-textpath + The above example shows the <svg:use> and textPath + elements in action. +

+ +
+ + Images + +

+ ex-image + The above example shows the <svg:image> with position + and sizing elements in action. +

+ +
+ + SVG Element + +

+ ex-misc + Doing some silly stuff with svg elements. +

+ +
+
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/Design.xml b/fop-0_14_0_regions/docs/examples/svg/Design.xml new file mode 100644 index 000000000..18d33c26d --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Design.xml @@ -0,0 +1,366 @@ + + + + SVG in FOP Design + The design for implementing SVG rendering inside FOP. This is out of date. + + + SVG Elements +
+ Purpose + + Background + +

+ FOP is a formatting object parser written in Java. +

+

+ Apache is heading the effort to create the parser to create + PDF documents from XML files including formatting objects. +

+

+ SVG is another XML structure type that contains scaleable + vector graphics. This document is about embedding SVG data + inside a FOP XML structure so that the SVG will be rendered + to the resulting PDF document. +

+ +
+ + Aim + +

+ The primary aim is to enable the parsing of all SVG elements + as described in the document "CR-SVG-20000802.pdf". This applies + to the stylable elements. +

+

+ The java interface is available from - + "http://www.w3.org/TR/2000/CR-SVG-20000802/java-binding.zip" +

+

+ As the SVG elements include information for animation and + other things then not all elements or properties will be + rendered. +

+

+ The implementation should be considered as separate from + the implementation and rendering of the FOP and PDF data. + This will allow it to be more general and to be used for + direct drawing or printing. +

+ +
+
+
+ + Design +
+ FOP Rendering + fop + + Rendering Process + fop-flow + +

+ The process of converting an FOP XML file into the + PDF document is handled by the FOP parser. +

+

+ The document is first turned into an in memory hierarchy + of objects that represent the fo document. The objects are + then layed out into pages. The objects are then rendered + into PDF data. +

+

+ These three steps are separate. +

+ +
+
+
+ + Design +
+ Overall Design of SVG elements + overall + + SVG Nodes + +

+ The FObj.layout is called whenever the parser encounters an + XML node. The class that is called depends on the element + mapping. +

+

+ The <svg:g> element is used to contain other elements + including other <svg:g>'s. This element is purely to + set style and transform data on other elements. + The GraphicsCreator interface is used to create Graphic + element that can be placed into the <svg:g> graphic. +

+

+ The <svg:text> element can contain elements that modify + the position and style of text. The TextElement interface is + used to create the element which is placed in a list along + with any strings in the text node. +

+ +
+ + SVG Graphic Elements + +

+ All drawing elements in an SVG area must extend the Graphic + class. This provides information about the style and transform. + Transform is accumulative, therefore the transform for a + particular element is obtained by combining all the transforms + of the current element and all super elements. A list is + created by adding each succesive transform into a list. +

+

+ The graphic elements also contain style data, this behaves + in a different manner. The style for an element is obtained + by starting with the top ancestor of the element and overriding + any style elements set in each of the elements in the hierachy. + This is done by using an style infromation map. +

+ +
+ + Rendering + +

+ The main purpose of the SVG elements in this context + is to be able to render the data to a PDF document. + This should not limit the approach or the usefullness + of the SVG in memory data. +

+

+ The data should contain all the available information + without changing the meaning of elements or properties. +

+

+ The are some examples of data that should be interpreted + when rendering, or otherwise presenting the data to the user, + which can be altered and still be eqivalent. + This includes paths that contain multiple moveto's and + the closepath part. Since the information is necessary + for the proper display and editing then the information + should always be retained with the original meaning. + The path end points etc differ depending on the path + instructions. +

+ +
+
+
+ + Integration +
+ Integration of SVG with FOP + integration + + Areas of Interaction + +

+ The PDF renderer converts all the FOP data into the + PDF markup. This is also where the SVG elements are + output into the PDF stream. +

+

+ The FOP parsing incorporates the idea of areas that + contain FONode data. These nodes contain the data + that is rendered into the area. The SVG element + (<svg:svg> element) forms an area. Then as each + SVG subnode is parsed it is placed within the SVG area. + The SVG area then contains a list of Graphic elements + that constitute the SVG graphic. Almost all Graphic + elements can have style and transform properties. + These properties are place into the graphic element. +

+

+ As the <svg:g> element can contain many other + Graphic elements then it must be able to create and add + the Graphic to itself as each subnode is parsed. +

+ +
+ + XML Specifics + +

+ An SVG area can be placed within a <fo:block> ??. + This is provided that the appropriate svg namespace is + defined. + All the svg elements must be within the <svg:svg> + element. +

+

+ When the SVG area is being parsed then it must be able + to create a representative data set in memory for use + later. +

+

+ The data must fully represent the information in a way + that is efficient to create and use. +

+

+ There are a few elements that can contain other elements, + these include <svg:g>, <svg:text>, <svg:use> etc. + The FOP parser technique uses layout() to create + a component and layout it within the area. This is not suitable + for elements that are not directly sub nodes of the SVG + area. The technique used is for the SVG elements is to implement + an interface suitable for the element. For example the Rect + implements GraphicsCreator so that the parent G can create + the Graphics object when the parser calls addChild. +

+ +
+ + Rendering + +

+ The SVG area contains a list of all the svg elements that can + be drawn. This list is simply iterated and each element drawn + in order. + Each subsequent element always draws over the previous element. +

+

+ The drawing is clipped to the SVG area bounds. +

+

+ As each element may contain its own style and transform + then before each element is rendered the style and + coordinate matrix ?? are set if it has changed. +

+ +
+
+
+ + Design of Components +
+ Graphic Elements + graphic + + Class Hierachy + +

+ All usual graphic elements that can be drawn in the SVG + area or a <svg:g> element must extend the Graphic + class. This serves as a common object type and to hold + information about the style and transform of the element. + Since the style and transform inherit information (in a way + that cannnot be done with simple XML inheritance) then + each graphic element also stores the parent element (if + applicable). +

+

+ The text element may contain TSpan elements which are not + themselves Graphic elements. +

+

+ The SVG area contains the title, description, definitions + and all the Graphic objects. +

+ +
+ + Grouping + +

+ The SVG area contains a list of Graphic elements that + can be rendered. +

+

+ The SVG area also contains definitions of Graphic + elements that can be used by other graphic elements + for clipping, paths etc. The definitions must contain + a unique id (XML id) which can be used to refer to them. +

+ +
+
+
+ XML Data + nodes + + Nodes + +

+ There are two important type of information, these + are the XML nodes and the properties of these nodes. + The parsing process used with FOP uses element mapping + and property mapping to enable the creation of objects + that correspond to each node or property. +

+ +
+ + Properties + +

+ There are a number of important element properties that + differ and extend the FOP properties. +

+

+ The style and transform properties have particular + behaviours that are handled through the Graphic object. +

+ +
+ + Parsing Process + +

+ There are three steps going from the SVG data (contained + in the FOP) to the resulting PDF document (or other + rendering result). +

+

+ When the fop parsing encounters an <svg:svg> element + then it creates and SVG area object. The layout is called + for this object which parses all sub nodes. Each sub node + can then parse its information and add itself to the area. +

+

+ The layout of each node is done before any of the sub nodes + of the particular node, this means that the information + for the node is incomplete when it is added to the area. +

+

+ The parsing of the node is converted into a Graphic element + with its style and transform set. The G element can add the + Graphic to itself or the element can add itself to the SVG + area. +

+

+ Once the parsing is complete we have a representation of + the SVG data in memory. This information can then be used + to render/manipulate etc. +

+

+ The pdf rendering is done by rendering each element in the + SVG area. The style is set for the element before it is + rendered. If the element is a G or text object then each + sub-element is rendered. +

+ +
+ + Graphic + +

+ graphic-structure + The graphic elements (almost) all contain style and transform + data. This is stored in a way that allows the information + to be combined when determining the style/transform for an element + with style/transform set in one or more ancestors. +

+ +
+
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/Document.dtd b/fop-0_14_0_regions/docs/examples/svg/Document.dtd new file mode 100644 index 000000000..82087a7ba --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Document.dtd @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/Document.xsl b/fop-0_14_0_regions/docs/examples/svg/Document.xsl new file mode 100644 index 000000000..98b764483 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Document.xsl @@ -0,0 +1,294 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SVG in FOP + + + + + + + + + + + + + + + + + + + + + + + + + SVG in FOP + + + + + + + + + + + + + + + + + + + + Apache XML + + + + + Page + + + + + + + + + + + + + + + + + + + + + + + + + + + + +<![CDATA[ + + + + + +]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/Examples.xml b/fop-0_14_0_regions/docs/examples/svg/Examples.xml new file mode 100644 index 000000000..612823156 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Examples.xml @@ -0,0 +1,10 @@ + + + + SVG Tests + + Some test SVG documents embedded into fo. + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/LargeExamples.xml b/fop-0_14_0_regions/docs/examples/svg/LargeExamples.xml new file mode 100644 index 000000000..3d80ccf37 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/LargeExamples.xml @@ -0,0 +1,67 @@ + + + + Large SVG Examples + + Some large svg examples which have many shapes. + + + Examples +
+ Introduction + +

+ These examples show the areas of SVG currently implemented. +

+

+ This is provided so that others can see how to write the svg elements + and the result to expect. +

+ +
+
+ Graphic Elements + + Miscellaneous + +

+ misc-lion + A lion +

+

+ misc-molecule + A molecule +

+

+ misc-newlion + Another lion +

+

+ misc-picasso + A Picasso picture +

+

+ misc-svglogo + The SVG View logo +

+

+ misc-tiger + A tiger +

+

+ apache-foplogo + FOP logo in SVG. +

+

+ apache-xml + Apache logo in SVG. +

+

+ mozilla-xml + Mozilla logo in SVG. +

+ +
+
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/Misc.xml b/fop-0_14_0_regions/docs/examples/svg/Misc.xml new file mode 100644 index 000000000..a63dded69 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Misc.xml @@ -0,0 +1,34 @@ + + + + Miscellaneous SVG Examples + + Some general svg examples. + + + Examples +
+ Introduction + +

+ These examples show the areas of SVG currently implemented. +

+

+ This is provided so that others can see how to write the svg elements + and the result to expect. +

+ +
+
+ Graphic Elements + + Miscellaneous + +

+ Various styles and other drawing things. +

+ +
+
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/MoreTests.xml b/fop-0_14_0_regions/docs/examples/svg/MoreTests.xml new file mode 100644 index 000000000..fa5f7a025 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/MoreTests.xml @@ -0,0 +1,78 @@ + + + + More SVG Tests + + Some more SVG tests. + + + Examples +
+ Introduction + +

+ These examples show the areas of SVG currently implemented. +

+

+ This is provided so that others can see how to write the svg elements + and the result to expect. +

+ +
+
+ Graphic Elements + + Miscellaneous + +

+ Various styles and other drawing things. +

+

+ misc-arc + Arcs +

+

+ misc-gradients + Gradients +

+

+ misc-paths + Paths +

+

+ misc-radial + Radial +

+

+ misc-rotate + Rotations +

+

+ misc-rototext + Rotated text +

+

+ misc-shapes + Shapes +

+

+ misc-stroke + Strokes +

+

+ misc-test + Tests +

+

+ misc-transform + Transforms +

+

+ misc-opac + Opacity +

+ +
+
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/Tests.xml b/fop-0_14_0_regions/docs/examples/svg/Tests.xml new file mode 100644 index 000000000..c04245d0c --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Tests.xml @@ -0,0 +1,10 @@ + + + + SVG Tests + + Some test SVG documents embedded into fo. + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/Todo.xml b/fop-0_14_0_regions/docs/examples/svg/Todo.xml new file mode 100644 index 000000000..db8c01ef4 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/Todo.xml @@ -0,0 +1,337 @@ + + + + SVG To do List + + List of things To do for SVG rendering in FOP. + + + To do + +

+ SVG in FOP is currently in the early stages. As FOP is aiming to + be the reference implementation for an FO parser, this is aiming to + be the reference implmenetation for an "instream-foreign-object" + in the fo document. Namely an implementation of SVG as a foreign + xml document embedded in the fo document. +

+

+ The aim for SVG itself is to implement as much of the svg as is + meaningful for the output of the FOP. +

+

+ This generally means that things such as animation are out of + scope. +

+ +
+ Bugs + +

+ This list is for things that have been done but do not + work properly. +

+

+

    +
  1. + gradients - the coordinates need to be altered + to the bounds of the object being drawn +
  2. +
  3. + text - dy is not fully functional, alignments are + not correct. +
  4. +
  5. + the transform angles are wrong (degree - radians) when + using the java functions +
  6. +
+

+ +
+
+ Not yet Implemented + +

+ These are all the features that are currently not handled + in any useful way. +

+

+

    +
  1. + +
  2. +
+

+ +
+
+ + Implemented + +

+ The currently implemented things. +

+ +
+ SVG + +

+ This list is for things that have been done but do not + work properly. +

+

+ Elements +

    +
  1. + rect +
  2. +
  3. + circle +
  4. +
  5. + line +
  6. +
  7. + text - tref, tspan +
  8. +
  9. + path +
  10. +
  11. + polygon +
  12. +
  13. + polyline +
  14. +
  15. + ellipse +
  16. +
  17. + g +
  18. +
  19. + svg (inside) +
  20. +
  21. + image +
  22. +
  23. + use +
  24. +
  25. + defs (including referenced items not in defs element) +
  26. +
  27. + linearGradient +
  28. +
  29. + radialGradient +
  30. +
  31. + stop +
  32. +
+

+

+ Properties +

    +
  1. + x +
  2. +
  3. + y +
  4. +
  5. + x1 +
  6. +
  7. + y1 +
  8. +
  9. + x2 +
  10. +
  11. + y2 +
  12. +
  13. + r +
  14. +
  15. + cx +
  16. +
  17. + cy +
  18. +
  19. + x (list) +
  20. +
  21. + y (list) +
  22. +
  23. + dx +
  24. +
  25. + dy +
  26. +
  27. + d +
  28. +
  29. + id +
  30. +
  31. + width +
  32. +
  33. + height +
  34. +
  35. + xlink:href (what about the XMLLink namespace) +
  36. +
  37. + refX +
  38. +
  39. + refY +
  40. +
  41. + offset +
  42. +
  43. + points +
  44. +
  45. + fx +
  46. +
  47. + fy +
  48. +
+

+ + + Style + +

+

    +
  1. + fill +
  2. +
  3. + stroke +
  4. +
  5. + stroke-width +
  6. +
  7. + stroke-dasharray +
  8. +
  9. + stroke-offset +
  10. +
  11. + stroke-linecap +
  12. +
  13. + stroke-linejoin +
  14. +
  15. + stroke-miterlimit +
  16. +
  17. + stop-color +
  18. +
  19. + color +
  20. +
  21. + font +
  22. +
  23. + font-size +
  24. +
  25. + font-family +
  26. +
  27. + font-weight +
  28. +
  29. + font-style +
  30. +
+

+

+ These are currently only supported in the style attribute. +

+ +
+ + Transform + +

+

    +
  1. + translate +
  2. +
  3. + rotate +
  4. +
  5. + scale +
  6. +
  7. + skew X +
  8. +
  9. + skew Y +
  10. +
  11. + matrix +
  12. +
+

+

+

+ +
+
+
+ FO interaction + +

+

    +
  1. + Implement the fo:instream-foreign-object formatting object +
  2. +
  3. + Separate the property lists by namespace. +
  4. +
+

+

+

+ +
+
+ Miscellaneous + +

+

    +
  1. + Fix the dtd (or use xml schema) for the docs so there are no + validation errors +
  2. +
  3. + Update the docs. +
  4. +
+

+

+

+ +
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/UnitTests.xml b/fop-0_14_0_regions/docs/examples/svg/UnitTests.xml new file mode 100644 index 000000000..392518060 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/UnitTests.xml @@ -0,0 +1,111 @@ + + + + Unit Tests for SVG in FO + + Some unit tests to check out the rendering of svg. + + + Examples +
+ Introduction + +

+ These examples show the areas of SVG currently implemented. +

+

+ This is provided so that others can see how to write the svg elements + and the result to expect. +

+ +
+
+ Graphic Elements + + Miscellaneous + +

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+ +

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+ +

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + unit test +

+

+ + Arcs using the arc command in the path data. +

+ +
+
+
+
diff --git a/fop-0_14_0_regions/docs/examples/svg/apache-diagrams.xml b/fop-0_14_0_regions/docs/examples/svg/apache-diagrams.xml new file mode 100644 index 000000000..19ba03d4d --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/apache-diagrams.xml @@ -0,0 +1,540 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The XML Publishing Framework + + + The XML Publishing Framework + + + + AP + A + CHE XML + + + THE + + + PROJECT + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/arch-diagrams.xml b/fop-0_14_0_regions/docs/examples/svg/arch-diagrams.xml new file mode 100644 index 000000000..a6f40c1ac --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/arch-diagrams.xml @@ -0,0 +1,70 @@ + + + + + + + Overall design diagram of SVG elements in FOP + SVG Elements Overall Design + + + FOP + + + + SVG + + + G + + + layout + + + + + + + The FOP parsing flow. + SVG Elements Overall Design + + + FOP + + + + SVG + + + G + + + layout + + + + + + + Overall design diagram of SVG elements in FOP + SVG Elements Overall Design + + + FOP + + + + SVG + + + G + + + layout + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/build.xml b/fop-0_14_0_regions/docs/examples/svg/build.xml new file mode 100644 index 000000000..8aa448e78 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/build.xml @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/diagrams.dtd b/fop-0_14_0_regions/docs/examples/svg/diagrams.dtd new file mode 100644 index 000000000..c3486d9b8 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/diagrams.dtd @@ -0,0 +1,9 @@ + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/ex-diagrams.xml b/fop-0_14_0_regions/docs/examples/svg/ex-diagrams.xml new file mode 100644 index 000000000..5a5051fac --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/ex-diagrams.xml @@ -0,0 +1,203 @@ + + + + + + Examples for demonstrating SVG elements in FOP + SVG Examples + + + + + + + + + + + + + + + + + + + + + SVG + is + + very + + + flexible! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SVG + + + + + + + + Referenced character data + + + Text with area style + SVG + SVG + + text + and tspan + does + + lots of + + + things + + + + text + can be spaced + + and positioned + + + + + Inline character data + + + + + + + + + + + + + + + + + + + + + + + + + + + + Example, simple text on a path + + + + We go up, then we go down, then up again + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/image.jpg b/fop-0_14_0_regions/docs/examples/svg/image.jpg new file mode 100644 index 0000000000000000000000000000000000000000..5d2c4c2d05d64d643b5a65f4a8f0102e79e523a6 GIT binary patch literal 7234 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/examples/svg/makedoc.bat b/fop-0_14_0_regions/docs/examples/svg/makedoc.bat new file mode 100755 index 000000000..ce6d65d34 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/makedoc.bat @@ -0,0 +1,25 @@ +@echo off + +echo Building Fop documentation (pdf) +echo ---------------- + +if "%JAVA_HOME%" == "" goto error + +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\..\lib\ant.jar;..\..\..\lib\xml.jar;..\..\..\lib;..\..\..\build\fop.jar;..\..\..\lib\w3c.jar +set ANT_HOME=..\..\..\lib + + +%JAVA_HOME%\bin\java.exe -Dant.home=%ANT_HOME% -classpath %LOCALCLASSPATH%;%CLASSPATH% org.apache.tools.ant.Main %1 %2 %3 %4 %5 + +goto end + +:error + +echo ERROR: JAVA_HOME not found in your environment. +echo Please, set the JAVA_HOME variable in your environment to match the +echo location of the Java Virtual Machine you want to use. + +:end + +rem set LOCALCLASSPATH= + diff --git a/fop-0_14_0_regions/docs/examples/svg/makedoc.sh b/fop-0_14_0_regions/docs/examples/svg/makedoc.sh new file mode 100755 index 000000000..619733d31 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/makedoc.sh @@ -0,0 +1,25 @@ +#!/bin/sh +#this file should be executable +echo +echo "Converting Fop's xml documentation into a pdf file" +echo "----------------" +echo + +if [ "$JAVA_HOME" = "" ] ; then + echo "ERROR: JAVA_HOME not found in your environment." + echo + echo "Please, set the JAVA_HOME variable in your environment to match the" + echo "location of the Java Virtual Machine you want to use." + exit 1 +fi + +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../../lib/ant.jar:../../../lib/w3c.jar:../../../lib:../../../build/fop.jar +ANT_HOME=../../../lib + +echo Building with classpath $CLASSPATH:$LOCALCLASSPATH +echo + +echo Starting Ant... +echo + +$JAVA_HOME/bin/java -Dant.home=$ANT_HOME -classpath "$LOCALCLASSPATH:$CLASSPATH" org.apache.tools.ant.Main $* diff --git a/fop-0_14_0_regions/docs/examples/svg/misc-diagrams.xml b/fop-0_14_0_regions/docs/examples/svg/misc-diagrams.xml new file mode 100644 index 000000000..1376472f0 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/misc-diagrams.xml @@ -0,0 +1,4639 @@ + + + + + + + + + + + + + + + + + + + + + + Gradient painting + + + + + + + + + + Gradient Fills + + + + + + + + + + + +A cute lion + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + NSC +Number: 3283 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + N + Cl + N + Cl + Cl + Cl + + + + + +The Cute Lion Cub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Some paths + + + + + + + + + + + + + + + + + + + + + + + + + + +Picasso.pdx exported by Mayura Draw 3.6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Girl Before a Mirror + + +Picasso, 1932, oil on canvas; 64 x 51 1/2 in. +The Museum of Modern Art, New York. + + + + + + + + + + + + + + + + + + + + Gradient painting + + + + + + + + + + Simple shapes + + + + + + + + + + + + + + + + + + + + + + + + + MyText + + Rotated Text Example + + + + + + + + Roto + Roto + Roto + Roto + + + + Roto + Roto + Roto + Roto + + + + + + + + + + + Simple shapes + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Viewer Logo + + + + + + SVG + + + + Viewer + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gradient Text + + + two groups, each of two rectangles + + + Bella's test SVG file + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A less cute tiger + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/mozilla-diagrams.xml b/fop-0_14_0_regions/docs/examples/svg/mozilla-diagrams.xml new file mode 100644 index 000000000..9a359aa7b --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/mozilla-diagrams.xml @@ -0,0 +1,122 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/arcs.svg b/fop-0_14_0_regions/docs/examples/svg/test/arcs.svg new file mode 100644 index 000000000..d807d6e22 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/arcs.svg @@ -0,0 +1,18 @@ + + +Example arcs01 - arc commands in path data +Picture of a pie chart with two pie wedges and +a picture of a line with arc blips + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/initialCoords.svg b/fop-0_14_0_regions/docs/examples/svg/test/initialCoords.svg new file mode 100644 index 000000000..39a1d1bd0 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/initialCoords.svg @@ -0,0 +1,19 @@ + + + Initial Coords + Example InitialCoords - SVG's initial coordinate system + + + + + + + + + + + (0,0) + (300,0) + (0,100) + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/junk.svg b/fop-0_14_0_regions/docs/examples/svg/test/junk.svg new file mode 100644 index 000000000..91bd55249 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/junk.svg @@ -0,0 +1,11 @@ + + + + + + + + Hello SVG! + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/molecule.svg b/fop-0_14_0_regions/docs/examples/svg/test/molecule.svg new file mode 100644 index 000000000..fc375979a --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/molecule.svg @@ -0,0 +1,72 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + C + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/nested.svg b/fop-0_14_0_regions/docs/examples/svg/test/nested.svg new file mode 100644 index 000000000..61182d2e6 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/nested.svg @@ -0,0 +1,45 @@ + + + + Nested + Example Nested - Nested transformations + + + + + + + + + + + + + + + ....Translate(1) + + + + + + + + + + ....Rotate(2) + + + + + + + + + + ....Translate(3) + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/newCSSUnits.svg b/fop-0_14_0_regions/docs/examples/svg/test/newCSSUnits.svg new file mode 100644 index 000000000..bfb4d074f --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/newCSSUnits.svg @@ -0,0 +1,41 @@ + + + + Redefining CSS Units + Transformation with establishment of a new viewport + + + + This prints 12 pixels high. + This prints 12 pixels high. + + + + + This prints 24 pixels high. + + This prints 12 pixels high. + + + + + + + + This prints 36 pixels high. + This prints 36 pixels high. + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/newCoordSys.svg b/fop-0_14_0_regions/docs/examples/svg/test/newCoordSys.svg new file mode 100644 index 000000000..dd8e82f60 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/newCoordSys.svg @@ -0,0 +1,32 @@ + + + + NewCoordSys + Example NewCoordSys - New user coordinate system + + + + + + + + + ABC (orig coord system) + + + + + + + + + + + + ABC (translated coord system) + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/newViewport.svg b/fop-0_14_0_regions/docs/examples/svg/test/newViewport.svg new file mode 100644 index 000000000..f53b5e105 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/newViewport.svg @@ -0,0 +1,16 @@ + + + + New Viewport + This SVG drawing embeds another one, + thus establishing a new viewport + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/origCoordSys.svg b/fop-0_14_0_regions/docs/examples/svg/test/origCoordSys.svg new file mode 100644 index 000000000..1881b2840 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/origCoordSys.svg @@ -0,0 +1,16 @@ + + + + OrigCoordSys + Example OrigCoordSys - Simple transformations: original picture + + + + + + + + ABC (orig coord system) + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/preserveAspectRatio.svg b/fop-0_14_0_regions/docs/examples/svg/test/preserveAspectRatio.svg new file mode 100644 index 000000000..c0b38e4dc --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/preserveAspectRatio.svg @@ -0,0 +1,156 @@ + + + + PreserveAspectRatio + Example PreserveAspectRatio - demonstrate available options + + SVG to fit + + + + :) + + + Viewport 1 + + + + Viewport 2 + + + + + --------------- meet --------------- + + xMin* + + + + + :) + + + + + xMid* + + + + + :) + + + + + xMax* + + + + :) + + + + + ---------- meet ---------- + + *YMin + + + + :) + + + + + *YMid + + + + + :) + + + + + *YMax + + + + + :) + + + + + ---------- slice ---------- + + xMin* + + + + + :) + + + + + xMid* + + + + + :) + + + + + xMax* + + + + + :) + + + + + --------------- slice --------------- + + *YMin + + + + + :) + + + + *YMid + + + + :) + + + + *YMax + + + + :) + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/rotateScale.svg b/fop-0_14_0_regions/docs/examples/svg/test/rotateScale.svg new file mode 100644 index 000000000..fe1b98548 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/rotateScale.svg @@ -0,0 +1,40 @@ + + + + RotateScale + Example RotateScale - Rotate and scale transforms + + + + + + + + + + + + + + + + ABC (rotate) + + + + + + + + + + + + + ABC (scale) + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/shapes.svg b/fop-0_14_0_regions/docs/examples/svg/test/shapes.svg new file mode 100644 index 000000000..fa6ffb9c8 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/shapes.svg @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + Simple shapes + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/skew.svg b/fop-0_14_0_regions/docs/examples/svg/test/skew.svg new file mode 100644 index 000000000..639265cea --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/skew.svg @@ -0,0 +1,37 @@ + + + + Skew + Example Skew - Show effects of skewX and skewY + + + + + + + + + + + + + + ABC (skewX) + + + + + + + + + + + + ABC (skewY) + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/transformTest.svg b/fop-0_14_0_regions/docs/examples/svg/test/transformTest.svg new file mode 100644 index 000000000..ec1b3834b --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/transformTest.svg @@ -0,0 +1,31 @@ + + + + Nested verses Transform list test + This is to test that the transformations are being applied in + the correct order. Both squares should be first filled and + then outlined in the same position. If the outlines are in + the wrong position then something is wrong. + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/units.svg b/fop-0_14_0_regions/docs/examples/svg/test/units.svg new file mode 100644 index 000000000..bb85ce172 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/units.svg @@ -0,0 +1,22 @@ + + + + Units + Demonstration of coordinate transforms + + + + This prints 12 pixels high. + This prints 12 pixels high. + + + + This prints 24 pixels high. + + This prints 12 pixels high. + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/use01.svg b/fop-0_14_0_regions/docs/examples/svg/test/use01.svg new file mode 100644 index 000000000..0394ea8a8 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/use01.svg @@ -0,0 +1,10 @@ + + + + Use01 + Example Use01 - Simple case of 'use' on a 'rect' + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/use02.svg b/fop-0_14_0_regions/docs/examples/svg/test/use02.svg new file mode 100644 index 000000000..7041e7af0 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/use02.svg @@ -0,0 +1,17 @@ + + + + Use02 + Example Use02 - 'use' on a 'symbol' + + + MySymbol - four rectangles in a grid + + + + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/use03.svg b/fop-0_14_0_regions/docs/examples/svg/test/use03.svg new file mode 100644 index 000000000..9caed2858 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/use03.svg @@ -0,0 +1,9 @@ + + + + Example Use03 - 'use' with a 'transform' attribute + + + + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/viewBox1.svg b/fop-0_14_0_regions/docs/examples/svg/test/viewBox1.svg new file mode 100644 index 000000000..6ee5ddd5e --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/viewBox1.svg @@ -0,0 +1,21 @@ + + + + ViewBox1 + Example ViewBox1 - uses the viewBox + attribute to automatically create an initial user coordinate + system which causes the graphic to scale to fit into the + viewport no matter what size the viewport is. + + + + + + + Stretch to fit + + diff --git a/fop-0_14_0_regions/docs/examples/svg/test/viewBox2.svg b/fop-0_14_0_regions/docs/examples/svg/test/viewBox2.svg new file mode 100644 index 000000000..29d833da6 --- /dev/null +++ b/fop-0_14_0_regions/docs/examples/svg/test/viewBox2.svg @@ -0,0 +1,24 @@ + + + + ViewBox2 + Example ViewBox2 - uses the viewBox + attribute to automatically create an initial user coordinate + system which causes the graphic to scale to fit into the + viewport no matter what size the viewport is. + + + + + + + + + + Stretch to fit + + diff --git a/fop-0_14_0_regions/docs/graphics/fop.jpg b/fop-0_14_0_regions/docs/graphics/fop.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2977249740165bb0ef303a330d22b0a36e28f1c3 GIT binary patch literal 1220 zcmex=^(PF6}rMnOeST|r4lSw=>~TvNxu(8R<#!y&COGZkL>RrC7$bLZ8r=t*s4 zd8-<``rOUMd|Xy{HW~b_3YV8VetE0pw@*)_ruXl#KJ@8Nn{QQE=bGc3KlS;~Bz)a4 zA$Mj+(58omYYX|TLOnkQ9ecp+KULki^Y*rLclr9ih4c8?&a{mBbiX4!;z83K2DS#K z%xt|M|9WNCOh09G;qsP*CFM)IQZ1hLRNS5sBAu-IH|*oYgta_{PMZl@9E}MzG!j4F1IdGh2DZW>o&Z6uzH>7 z-PNofa#uI^pYgU@W*)uc+nRm)2C4gx{AXAdbk{JUIw1J5YFFBexk78g)CD$g^hw-x zdU|qC?PZR5Ww+yA^(R?9Uhi|CYagTiU3`_oag&KpT18J6Kb!C?r>tw!0h)j6>h7D-EcQWh56kyhwD@K zJ(%-4;==WLhj!#ISKE5yLCyMT`NNvEv#y-G@}QSx?exR_OJ1Db7Vdld?v|7H_XO;y zU6`g%2{KbB9ozkI%d6JN^|$yYuU-1`+Ptsx za~8LX_+Op-srHo5r;?=C968muQnT`oJLX+e?U(N5$$akh=-As^ar$$Q{EkbR{I-zW zW?H4Hb>*!J1`a2IiEb_1PCWai$>AuWQZnWF^lD8FCk`S1%%jzl!wPgNxkC5Md!79H ztL%S<5FsJ|HuFypCQRB>B)fCB|C*;cH}6++{%6RXpL{#zr>9e3gYnmgW!Fp>`*Pp@ l$oG2fdZn_m9W9TdjZQIC-ka{gcuAl|MQ|a96Nmo)n*eb9_m%(v literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/graphics/linux.bmp b/fop-0_14_0_regions/docs/graphics/linux.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f5b3821112e0fdcd22a0306c493efefea445249b GIT binary patch literal 13198 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/architecture.html b/fop-0_14_0_regions/docs/html-docs/architecture.html new file mode 100644 index 000000000..e3a37f8df --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/architecture.html @@ -0,0 +1,276 @@ +FOP Mechanics
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+ +
Introduction
  + +

+The overall process is controlled by org.apache.fop.apps.Driver. In +this class, a typical sequence is:

+ +

Driver driver = new Driver();

+

driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);

+

driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");

+

driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");

+

driver.setWriter(new PrintWriter(new FileWriter(args[1])));

+

+

driver.buildFOTree(parser, fileInputSource(args[0]));

+

+

driver.format();

+

+

driver.render();

+

+ +
Formatting Object Tree
  +

The class org.apache.fop.fo.FOTreeBuilder is responsible for actually +constructing the FO tree. The key SAX events used are

+

startElement(),

+

endElement() and characters().

+ +

All formatting objects derive from abstract class +org.apache.fop.fo.FONode. The other FO classes inherit from +FONode as follows:

+ +

            FONode

+

               |

+

     __________|________

+

    |                   |

+

   FObj               FOText

+

    |

+

    |___________________

+

    |                   |

+

  FObjMixed      SequenceSpecifier +

+ +

FO's extending FObj:

+ +

Package org.apache.fop.fo.pagination:

+ + +

LayoutMasterSet

+

PageSequence

+

RegionAfter

+

RegionBefore

+

RegionBody

+

Root

+

SequenceSpecification

+

SimplePageMaster

+ + +

Package org.apache.fop.fo.flow:

+ + +

BlockContainer

+

DisplayGraphic

+

DisplayRule

+

DisplaySequence

+

Flow

+

InlineGraphic

+

ListBlock

+

ListItem

+

ListItemBody

+

ListItemLabel

+

PageNumber

+

StaticContent

+

Table

+

TableBody

+

TableCell

+

TableColumn

+

TableRow

+ +

FO's extending SequenceSpecifier:

+ +

Package org.apache.fop.fo.pagination:

+ + +

SequenceSpecifierAlternating

+

SequenceSpecifierRepeating

+

SequenceSpecifierSingle

+ +

FO's extending FObjMixed:

+ +

Package org.apache.fop.fo.flow:

+ + +

Block

+

InlineSequence

+

SimpleLink

+ +

+ +
FONode
  +

+The class inheritance described above only describes the nature of the +content. Every FO in FOP also has a parent, and a Vector of children. The +parent attribute (in the Java sense), in particular, is used to enforce +constraints required by the FO hierarchy. +

+ +

+FONode, among other things, ensures that FO's have a parent, that they +have children, that they maintain a marker of where the layout was up to +(for FObj's it is the child number, and for FOText's it is the character +number), and that they have a layout() method. +

+

+ +
Making FO's
  + +

+Every FO class has code that looks something like this: +

+ +

public static class Maker extends FObj.Maker {

+

   public FObj make(FObj parent, PropertyList propertyList)

+

     throws FOPException

+

   {

+

     return new SimplePageMaster(parent, propertyList);

+

   }

+

}

+ + +

+The class also has a static method that resembles +

+ +

public static FObj.Maker maker()

+

   {

+

     return new PageSequence.Maker();

+

   }

+ +

+A hash 'fobjTable' exists in FOTreeBuilder, and maps the FO names (such as +'fo:table') to object references to the appropriate factories +(such as Table.Maker). +

+ +

+Properties (recall that FO's have properties, areas have traits, and XML +nodes have attributes) are also a concern of FOTreeBuilder. It +accomplishes this by using PropertyListBuilder, which contains a hash of +property names and their respective makers. The base class for +properties is Property, and the property makers extend +Property.Maker. +

+

+
FO Formatting
  + +

+FOTreeBuilder calls format() on the root FO, passing +it the AreaTree +reference. In turn, Root calls format() on each +PageSequence, passing it +the AreaTree reference. +

+ +

+The PageSequence format() method does the following things: +

+ +
    +
  1. Makes a Page, using PageMasterFactory to produce a +PageMaster, and +using makePage() in the latter class. In the simplest picture, +a Page has +5 areas represented by AreaContainers;
  2. + +
  3. Handles layout for StaticContent objects in the 'before' and 'after' +regions, if set. This uses the layout() method in +StaticContent;
  4. + +
  5. If a page break is not forced, it will continue to layout the flow into +the body area (AreaContainer) of the current page;
  6. + +
  7. It continues with (1) when layout into the current page is done, but +the flow is not empty.
  8. +
+

+ +
Area Layout
  + +

+FO's that represent actual areas, starting with Flow and +StaticContent, have +a layout() method, with the following signature: +

+ +

+ + public Status layout(Area area) + +

+ +

+The fundamental role of the layout() method is to manage the layout of +children and/or to generate new areas. +

+ +

+Example: the layout() method for Flow generates no new areas - it manages the +layout of the flow children. +

+ +

+Example: the layout() method for Block +generates a new BlockArea in and of +itself, and also manages the layout of the block children, which are added +to the BlockArea before that is itself added to its parent +Area. +

+ +

+Layout() methods are subject to the general constraint that possibly not +all of their children can be accommodated, and they report back accordingly +with an appropriate Status. +

+

+ +
Rendering
  + +

+This is a separate process. The render() method in +Driver is invoked (say, +by CommandLine) with the laid-out AreaTree and a +PrintWriter as arguments. +This actually calls the render() method in a specific implementation of +the Renderer interface, typically PDFRenderer or +AWTRenderer. +

+ +

+At the highest level PDFRenderer, for example, begins by rendering each +Page. The render() method in Page (as is the case for other areas), +invokes a particular method in the renderer of choice, e.g. +renderPage(). +NOTE: this system is bypassed for Page, incidentally. +

+ +

+Rendering will not be discussed further in this document, as most of our +current effort must concentrate on layout. Section 4.12 in the XSL WD +discusses some issues applicable to rendering. +

+

+ +

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/bugs.html b/fop-0_14_0_regions/docs/html-docs/bugs.html new file mode 100644 index 000000000..0591598da --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/bugs.html @@ -0,0 +1,44 @@ +Bugs
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
How to report bugs
  +

Please report bugs to the discussion list fop-dev@xml.apache.org and put + the word [BUG] in the subject line.

+

Please make sure, before you report a bug, that it is not mentioned in the FAQ or + in the list of open bugs in the file STATUS in the start directory of the Fop + distribution.

+

Please make your description as concise as possible and send an example fo + file with your report, which just demonstrates the problem. Thanks for your help!

+

+
Known bugs
  +
    +
  • Colour not continued onto subsequent pages, if coloured block goes over page.
  • +
  • SVG linearGradients don't appear the same as in other SVG Viewers
  • +
  • colour not continued onto subsequent pages if coloured block goes over page
  • +
  • no SVG support in AWTCommandLine
  • +
  • keep-next doesn't work and doubles the text lines which should be moved to the next page
  • +
  • lists containing list do not keep their indentation correctly over a page boundary
  • +
+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/compiling.html b/fop-0_14_0_regions/docs/html-docs/compiling.html new file mode 100644 index 000000000..1e9f7c8e8 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/compiling.html @@ -0,0 +1,86 @@ +Compiling FOP
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
Prerequisites
  +
Java 1.1.x or later
  +

If you use Java 1.1.x you must also seperately include the swing classes, which can + be found at the + Sun website. From Java 1.2 on (aka Java 2) they are part of the standard + distribution. +

+

+
An XML parser
  +

An XML parser which supports Sax and DOM like + Xerces-J. + The parser must be in your classpath

+

+
The xslt processor Xalan
  +

Some of the Java source code in FOP is generated from XML using + XSLT. Xalan must be used to generate this code.

+

Xalan is an XSL stylesheet processor written in java. At the moment you + can't use any other processor, because the make process makes use of some + proprietary features of Xalan which allow to write output in more + then one document. You can find Xalan also at + xml.apache.org. You have to use Xalan version 0.19.5 or later. + Xalan.jar must be in your classpath and also the file bsf.jar, which comes with Xalan.

+

+
Setting of JAVA_HOME
  +

You have to set the enviroment variable JAVA_HOME. It must point to your local JDK + root directory. This is true, even if you use JDK 1.2 or above, which don't need this + setting. It is used by the compilation software.

+

+
Settings in your classpath
  +

If you want Fop to use the image library jimi, it should be in your classpath during + compilation. +

+

A CLASSPATH for a complete compilation of Fop could look like this, if all these jar files are in + a directory called jars (example uses windows syntax): +

+

set CLASSPATH=\jars\xalan.jar;\jars\xerces.jar;\jars\bsf.jar;\jars\jimi.jar; +

+

+

+
Compiling
  +

Compilation is started by executing build, either as a batch file on win32 (build.bat) or as a shell script on unix. The compilation uses Ant, + a replacement of make (you can find more information about Ant at + jakarte.apache.org). + build.xml is the replacement of makefile. Look there for further information.

+

A help screen is shown by calling "build usage". +

+

+
Problems
  +

If you have problems compiling Fop, please try this first: delete the build directory completely and + try a new build from scratch. Check, whether you have all necessary libraries in your classpath: + xerces.jar, xalan.jar, bsf.jar, jimi.jar (optional). If you still have problems, please look at the + page bugs, for further help. +

+

+ +
Compiling FOP on MacOS
  + +

We strongly recommend the use of Codewarrior Java. You will find + a link to more information in the near future. +

+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/download.html b/fop-0_14_0_regions/docs/html-docs/download.html new file mode 100644 index 000000000..f96930f51 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/download.html @@ -0,0 +1,33 @@ +Downloading FOP
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
  +

You can download the latest release version from the distribution directory.

+

The file contains also the documentation (including some example fo files) and the source.

+

To run FOP from the command line, see Running FOP. If you are + interested in embedding FOP in a Java application of your own, see + Embedding FOP. +

+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/embedding.html b/fop-0_14_0_regions/docs/html-docs/embedding.html new file mode 100644 index 000000000..8ddf32710 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/embedding.html @@ -0,0 +1,57 @@ +Embedding FOP
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
  +

Instantiate org.apache.fop.apps.Driver. Once this class is + instantiated, methods are called to set the + Renderer to use, the (possibly multiple) ElementMapping(s) to + use and the PrintWriter to use to output the results of the + rendering (where applicable). In the case of the Renderer and + ElementMapping(s), the Driver may be supplied either with the + object itself, or the name of the class, in which case Driver will + instantiate the class itself. The advantage of the latter is it + enables runtime determination of Renderer and ElementMapping(s). +

+

Once the Driver is set up, the buildFOTree method + is called. Depending on whether DOM or SAX is being used, the + invocation of the method is either buildFOTree(Document) or + buildFOTree(Parser, InputSource) respectively. +

+

A third possibility may be used to build the FO Tree, namely + calling getDocumentHandler() and firing the SAX events yourself. +

+

Once the FO Tree is built, the format() and render() methods may be + called in that order. +

+

Here is an example use of Driver from CommandLine.java:

+

Driver driver = new Driver();

+

driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);

+

driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");

+

driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");

+

driver.setWriter(new PrintWriter(new FileWriter(args[1])));

+

driver.buildFOTree(parser, fileInputSource(args[0]));

+

driver.format();

+

driver.render();

+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/examples.html b/fop-0_14_0_regions/docs/html-docs/examples.html new file mode 100644 index 000000000..5c578028d --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/examples.html @@ -0,0 +1,60 @@ +Examples
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+

Examples for the use of xsl:fo can be found in the Fop distribution in + the subdirectory xml-fop/docs/examples/fo. You can start transformation of all fo files into pdf + files by starting xml-fop/docs/examples/runtests. +

+

At the moment the following files are part of the distribution:

+
    +
  • normal.fo - a very simple file showing the use of a 2 level of headings, normal text and a header. +
  • +
  • table.fo - a simple table +
  • +
  • list.fo - a simple list +
  • +
  • images.fo - shows how to embed gif and jpg images into the xsl:fo file using external-graphic. +
  • +
  • border.fo - a not so simple example how to use borders in tables +
  • +
  • extensive.fo - a longer test file containing a lot of different flow objects and properties. + A good candidate to test your bugfix or new Fop code. +
  • +
  • leader.fo - a very simple example of a rule +
  • +
  • Look also into the directory examples/svg. There you find some very extensive svg examples. + Just start makedoc. +
  • +
  • In the directory examples/pagination you find a suite of examples showing the use + of xsl:fo pagination. +
  • +
  • If you are interested in using svg, you may want to look into the + svg test suite, which + must be downloaded separately (ca. 2.1 MB). +
  • +
+

Developers will find the first steps to a test suite for all implemented formatting objects and + properties in xml-fop/docs/bugtests.

+ +

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/faq-running.html b/fop-0_14_0_regions/docs/html-docs/faq-running.html new file mode 100644 index 000000000..cde3fc048 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/faq-running.html @@ -0,0 +1,59 @@ +FAQ Running FOP
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
Questions
 

Answers
 
Q: I can't find the source files for the formatting properties. The directories + where they should be are empty. Where can I find them?
 

A: They are generated during the build process. So you should use the build script coming + with Fop at least once to generate these files. +

+

Q: Feature xxx of the XSL Working Draft 27 March 2000 does not work as it should. Why?
 

A: First: Only a small subset of formatting objects and properties is + implemented at the moment. Please have a look at the section "Features", + which lists the supported fo and properties. Second: At the moment only + Working Draft 21 Apr 1999 is supported. +

+

Q: When will the latest version of the XSL working draft be supported?
 

Basic conformance to the latest XSL working draft is scheduled for fall 2000. +

+

Q: Running FOP I get the following messages or something similar: + "WARNING: Unknown formatting object http://www.w3.org/XSL/Format/1.0^root" + and then a FATAL Error "Root element must be root, not default FO".
  +

A: Make sure that you have specified as the namespace for fo the + following string: "http://www.w3.org/1999/XSL/Format". It is analogous + to the xslt namespace "http://www.w3.org/1999/XSL/Transform" +

+

Q: The char ">" is inserted into the page number display like this + "formatting FOs into areas [1] [2] [3>>>>]". Is this a bug?
 

A: No, a feature. It simply means that on that page an area + overflowed (ie there was not enough room to fit the text in).


Q: It looks like FOP must be honoring font properties when it shouldn't be? + Example: According to the dtd coming with the xsl-fo spec inline-sequence + shouldn't have any attributes, but FOP doesn't reject them. +
  +

A: Font properties are inherited down to individual characters. You can + specify font properties on any formatting object you like and any textual content + will inherit those properties (unless overriden by a closer ancestor). +

+

The dtd coming with the xsl-fo spec isn't correct in this respect. +

+

Q: I need some additional fonts in FOP. How I can set embedding fonts? +
  +

A: At present, FOP does not support any fonts other than the built-in fonts + Times, Helvetica, Courier, Symbol and ZapfDingbats. +

+



+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/faqs.html b/fop-0_14_0_regions/docs/html-docs/faqs.html new file mode 100644 index 000000000..a001d49d3 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/faqs.html @@ -0,0 +1,27 @@ +FAQs
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
FAQ Running FOP
 

+ Read the FAQ Running FOP + document or jump directly to: +



+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/architecture-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/architecture-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..28b46283c9229c51ec06f9928417bb0fbf09b981 GIT binary patch literal 10732 zcmch7cTiK?_iqpt>C!v7ihxo?dNGi%*DHuL0i{Dkqzgf5K|^wt-tR>LrCvlpq(n;S z5+M{Rf)I)nAw@*`31~Q)!pryfd-HoU@2@w%-^@E__RKkR_Fl6;Yp=D}TAzImKOK@G zC$CvrTS9nvAP^qz4LMwdT;{(0&#r$9`JYMPjy`+`5jz1<;d#%?a~g6)jE7f@=dd3F z<<9fif69jZ?~CUM@6lt&`A+Z)2y#2%PeP9H@bVrx%6shC(WBhn@!ao_qhiOzPw8Gd zF5&3Qclw^B-lMu5Ruges}x>0)v7>BBP>XVo`Aq5)zY=Q&Q8?bDuoT%P)BLyzoWE%gUBO!J+rVBU7a5nc2Bd^9vLz?aS)dwQuVi^u7J>KNtt#&tLz> z#RK8}FO~f#u>T8}7#G)(qepp<^8FhZ&yiSe;}tu4?3C_t@k@?;zV{?f>peOl`TO7H zjlKLT`c8nXT=0V2f9!(BXHF$f$2`lO%5 z{rKk)QXKIj{Ve3a(RjaG^}>N`(8YbKP6AAY&eu!efw#g=(Fj68%6dQp?hqnqLvAf& z*HQ=)>n?@MDK+s4H^D5w*KX`Cn;v{8Q@PSV5F7UOr*VGk0sk3m(jkOcbO<58gnkdl z{w(M@irxQ+i#vooE?|kWt2uhC)7=y_ZG;^I#i;3`FI>Ce~w@oVZV@kowUJ^>FlWJN zom6yrSpi2(w)-|mlj)%7eh9hEuA`@lSjGoZ_)_7NIRbFC#F^0o>c5y5U2tHOf<&FI zO+a(-0X|cHdxBUd>g@xzuDMRPyf<`PYYqLW(=ALtLcjC;45{JAQ^3~aZE3mRi($Xm zpW2i|h#cmlbdPQuh@-+6A{i;OmXtRp*P3ng32!{kn0Z--qVumU>IU&`pI`d&a%dN1Ylj-I0@GBK8=8q7BATSGIFNtL{r&$5Ei1Phgj`6L2A=ax(;~GZm>E)VW$cZ}>sR zsqqkEPYUZkgfz!jEsnPoE>jV8@VhHgmzdlY>ou|v!F=w~ZY7n`2)#KOoq=0(^vyx( zLQF}eHJ$fgv(h7TL?88;?UvDpo`~(wMu(7o45a7puv<+e?YaJCBWd~Q`bQtP3??qJ zoAFr>?YKU7o-0;Y>pNT=^@JGOz?p_hMU^pjmUR1G_*fq~+#K6cc7nE)Zx?ohUmQ(0!>WLK`ly0aol;9f`>27g*6JxB7 zH5EGF+)oOAa94ck^C6^9lZs5~v6!AZ;TPc*5Pe!Vr%xlh<-Eu+TzdmX+}BGrANbBg3LpG~i?h@GN)-S1Bs z#XnzdO1jd7RP!DNdan1Lq)DW~C~9)`S>}}ocwm|? zdGDu%f8H&Zl*##42lq$@sC5g2W9*>Ug*RVS0B0x)|!k&K}XRxCB1 zx3@=X%3|J^y8t2Jlm1`zRcYnx1msM3T~rseEu>(!m2h_&cXvy>d&O*TWBK!$JoAT) z6n3741!u(LAcdt*KcKLdd1lehFYOw>NpDl3{HW3uCz3Yq4rwPK!wCo{P_^|;>vt;V z&9er+xB@R*NyB$r4`P}=;FuEF;jftYhY&_&84vtN2LJ=-_;9!}_sjc7utbs=R{YeLGz_1BJgkGh;tvsQ`x-#A6Ha#y|nTW|0cE{R{4 z)y@}FXR-+*Xyp;`pl{`*NrNnFJVgo^RK@!Ge-BK|cYXe`cQsnSctSX>9Hu#FBfGbC z-l$5tUMNiC#%G1uau;JbKSz;ukzO`HP(ryt#e}2gYh@#ui04M_e|`+Q#;j8VlcXy->@4RBkaxr7r6Mu_IHg~mlQKN5Mx$ge_*`Kd@∈AGn-3g zMRi}P=!?1lTKfy09h@2PQewgZrZ8za+lwQ85RK`p?S`tM;4D3D5SfM!Cq*0u^I!rVp;#$dcdSU?UMImL>9U zjs4nddB(-$h;wtb*OK#I|1SRXemYyCiJfX8hrR&nbKQWJvrS-nfqaaMz|g=pY!fbk z)~Nvn2M!@J7-W4pK;@%_S?!&`!sb)Y8m9sCY4J>{PyQGyjeLSzLM_zO$71doI4jyjORo-+(Y5jTb}y z(TzVb5*HW<$APaMYEUKDiz5;3xH?~Uvbx^ro2MG_w;yL&ZP!G`A%>9iOzQ5|ByE_h zpD>_+b;`#$<0=V1Z{V=KD}>4k&#R4FbLiwu0r_}bFyA&bu;@S#6MlQ13HmJ+b%ztm z37{r?s|a}L%3#db@2GG`+%^H?2M?Q{!5L zc)nlSfMb?M>5NbDPt5+nE{{nLacM0>SI$UKrZB=mlvYE^4n^n=>$;tVGlDaZ5GCBX z=#XV54%Sjq9yef=P;)eBe>}3Uxw56z;1e1N*NR>|(BhW2rfhd-PBew1aop1z!7E97mkx4*U@-@7?oOJ*9Ak>1R9r zU2w7JXH>k$WVjyV-0KiMqG3MH?;*q7%4$07w}Us`fkf0&U$%Sl&~&M~1VSpQ??yi2 z`P3-=Q?YohmJ5`p$fcJw(m3_*+!THi3m*4K@ z!0c!W^%Bn0QDJ;nTS;SPn37k+v1nYF_~%H1B=$Bu`7h3RsV4h1)*rF3M!{_d0tuAX zjtUSZzRR+FX0={LixKnt<<(k?%&e`vVY8oN=O`YI;JYl_)~WzDlL= zDL}8a$IDGblPA*d4+r*(QPP`6{r>hfDLijlYNHj8Q640p3y9J$Rc6i4fX8pO3NMzscShSg~%;7J=PUez;UKLu!%jBfM*}aB!x2AMT2ww^9lnh zx8xqwnP_IrQfc0FL^Z9&m!-DE5nAqk*UUPHnP0{4jUuD|LVb>p#-Sl|XlriD*AG6T zA0XH-F{eNq3SS~Ox4{Xc^qttHEm!fgfNKUT_)rXy$4;t2b1LSUAkXD6_h07KA}c)jRD z89l#+Fr2(E#qymuU{u+t0UkJRS4B^*EvN8etZncVDGQt%BF$@Mw~5 z-$YXRAt<5a!OqfjP2m)rjkcS~R6lhe_QA69+El*l@09{i4Xf>77N>1qR3~+O z4Ql^AMd(Z12iq8IA7b;oG1FBp*KvfFSe;#)SW|L+yfUqKwIjgJDLh$;(%fwcRd_UD zcCUZ7jFBxMNKV(>cE~PkvPxkI0-n7qc)oWIIi-B;SJ(ioJgN$L#FJ$QWT!Qt^xc8E z>{IyspJ-hgE`_5SjGy2Sk%_ry!1yafMjK`9Dg66{y?j;jueLhWDC0D{m=K5u;7Qmp zoyA=WZfls{HN;Vz>~^eVL6M0oCwtEMfU$OT>D5URRVE##9qIoPl#e{ShnK^nL<;;? zeY^&0d_FB0P8Xavrc@>qZ&zgZySR0J>NZzAFLQ2OH?9y@uosUhxmzaqXMG{X{}H35 zr{hPllvEO9+B??HrTRk_^cc&gzL>TL{ek@Cx3^@$E0a-^HGW@+py7s|af$QxGK$as z5b;ym%(P&Jt_gW#ntj@BC~06w=r!#8DQ6bxMNb;LhMRB^PobWBzePJOv+UoW3_O(JV5)GFBWnttMwOq!fp!Min6qhR8E z75vONV3OHpII3%S;n|jmhGHH7rrS>?&Me(2%}u&`?ZyV_X^2zt`nVqUqT>~**|?KN_aUC>N?>&SZgC}iuJNQydLhZs7{`ly^9MG-}eZYD0Y9&6UZ$UCE^5qca zy~UhS9nE&{PIL0gu;%`b2)XXK^HYjn(VdPz_Fu~-2WFyX68l{HYh1>4pKVD6(advN z87<##{zEY|G}B8@^!Q@+y)3=dcx}EkETN*;%e!cblD?!u{28OExfapK4i$Y$8jbWa zQaR>hcy8}z9-sWv!l+uO!ly6TFQ2e83wk|Pwwt*dP6R;cb4W7MLp`A$Y(bg!>j-&6 zWJ=);OXfi7S*@&i= z9cRVixP?bUk>Xzqo6FF`m9g9fmu%}gLvv%tR>EZTwp!e&WSe>k1j*1&{s%d6+0E<3 zN70sOD5&MSy^f4p=t%%*454;9U4%vpsAgJhK8PKlp?*RannR2%^a#LM=Zj>XY6p?U zg=>B;Mkng%)4qEgH3~XBR`H4E=>Af**@wos&nH|z1U{wdjS=;7YoC2=Smsr*k@~Yf zgYm4>@LM}I=wV2UdP=>l(<|_GAdH`yf4LXsqeERn9HEOIy(1egRe$q~-h^JyZ||E1 zUij7UQpQ;zbv+W8akx0kimqupd%KBl-qvsD>O>c*rN+C2+H7CJzqKK{&g$CH zkSAYW_XJ}vm#DN&=IyQp;a+wDbPHuFy82rt z`Hh&NIOK%rG0=?E+Zi_SGPbR=wW0>G6teKOqvky+#B8uOrndnZUKx}7`}k5)oIkoC z-#wr`KlsbmS=?k3M)5rgBjx+|m!ILz@;iDBO)MoL%{p>nLfyAMk=n=iuSecrb;`|p z62yt1iAtgWMca^!Sn}-u#99+g$t}?^dG7orGryLcc!xIjlwDNN9GMwn(lMxqu*dYT z?8TKe!P&)Y?;O}3J(9R-B#+NG3pls3dW-GlvVDG7MW4#*NAR$CL3i+?K{M_B6e~6u zcrfGvsHYXg+z9cIMVuTeSLz9x{b3GUY%3Kvg-dZ{(3fU=#L>23G~Jb$-|4-ZijhO@ z_Q6j^DVT>Vbd^Z&dH{i`28R%_^_b4LZ1A%fpr!3vjF_{M5ijN~7*HtRVk z6EPnVa(LV#AC+&ryaD&G@jkvXL|A! z`nx6Bf7tVFl+{3$1vizP9h{4W+XDpyu(Chf^`(+=E-#xylvN@KVh)fRn)o>CRLzTb1b-j5*6Lg_Db+O?+G22w+AdV&&nX4jGu! z>~cboxA?zq&lnJnqP3raI(;6hw3E5R6`RiMIO?{pK%Mog^;p|F+w3WJ4mXJCPQ&zH zVtXI-NQCqlJPcwfRiQ33Y^P!Fs+$_~)ya2zw7ix!Ct}7&GVXSIxmw1=+!W)}dUqsr z&yP_6(&^2N0ro4j4bv7KTh=SKF@>_S1fY*thGYeYlj|Hs0GDj=c&C+77@HQ2Jh`&q z?Xxr*|2o78+jptPDz0|(!P|lE2hl|fpFGz&(}))Jfr&+4MmZh2eTp7v3*IYV*?^0} z&H)FuQ$0%as3O~DJ2+9_Ax>$Aos$-gldx@j;=LiC-aY$k>o4o@)=PKmSKa4XON4~x z8rpqDqCUfb9=*3?QXuX^bal!T8ch%Vg1<2RCfnynh>4KVaTGTQ?M(Li7IhT{eh%cE z2P_nRqczA->MqwlrJM!*ogZIlFE*g03^`J~?2*m}$(mQTbWtlff3Vv}*%5E+?KRmu zXz)~KV}&K9Lrd8rkm2Cjz(F?)E+^f4mSs(+QS%EbSQo=C(yknA*V9!fgLyRgQ6H2h zx1#qTB%+U$%9e2tYe;nn`)QVOJeSGpe=^8XpM*IWvKK>*9}sQ!Ww_%esMY<1Pt}ay z0c;|cT>Rh=vh{>%5sXm!AqqungBe^#+rw(mb(RIMaYJ93>N$<_vjLXzFTQciTBZ!^ z5&cNo@o8LxKdIDC!oJA%O-F*~)Na9ZF6m3ITEWL;kO=}Pbp#N&RnD{zRzB98VGrEE z;<*^qz=~SXa{RMO_JR`Mz=BRH%(y}9=)E(cYTcb|&Oo;0v`R~BD?Wq94a|oSB|>o7 zq5>70WN{WVt!(kp@Fo~tY4-xH4+a8jmRLcSE+A48p`8ezu$PY*r`q3*I_N9}mN#On z?WXE?epuHT6bYW~-ccZX&7H>)WnnRh2a1L+dDdTVwhyK4Ye~hC0YmP2h@~A7-`E0} z#++^mS#HraSWSB8yO!2VIZO3(D!GPPkwq=`{$#ignKA^8-Uri62&en~+r4r)r)C`z zsl_^sEVPln?nrx1deB*_erAtJ`b}w(sv}VrZHSGy(u)$wwTZP!1Dr%`?>&|Y+KP!m zE6}N*hOt0`3p)cN8-h53yT-2V+pQo{u@Y}Lf^vl!qVZK~&Hi!GLR$Na3!w{Ata86D zk}6!0WydbX7z7iz8PGeOoKkc8@it$;)r($`9)(EoQR<|#=<`dPlXeXQRL$*+l+WA4 zSL;*@M?I|ZAM^%I&a2J5%nofUx*@RKOLpKI*7iAIf|8s9WWjWp#+;93qUbaG@W-rU zOi$J+L`JC+5L|LVV4Z%DmET5L5&K5Ri4g;%v32V)G3!dL&#TwzntVSa842Jz^D5@k zAw(Q4LziGYry~>ANIlZQx!(>U{2WQN7QiZ%1l<9~$h{C%glLcxhVl8Ok+iVEoYTsN zF?9ZycT4AUQcJDo(O)8RBPJDR`o4G>JM%t;;ZD~(8Af(Kdrl4gDl31zpLi5_CR#gH zDyaW@(=q>|7(&b`4;q-B4c$bzC)RLchhXmS6hkwp4r16@)`8~u{#0JRNpXI1(A!|q zCclwJ$(gUFz|5rH0y0LwLOzEqt9M6+3UyVa*3WRt@5$a2D3F;m7I+c6f9w#lc+Ikn zD}Y-N_o@YE2wq^nuz=6k{VBW|8cWm3bU8Sw8NZtD7E|%hDYw&ilrnNs2*JAxeAKz^ zIHn`2mXQnMs?cVWhDv_#xW|~%C6#Dc6a9RVzfww4_po2b+eW$?p6Wik6IwJ%-oMl^ zD)g83Kb{xkjt=BxuC#~_;4-j01pnRnTpBlw`2#pc2z@sT_VDEfFptV#q#m!w(zIQ@ zXV2H;6%J_20k5m|iRm_M=0H??f8> zME5yn;3v!+x3ZboPSNRwi*A+yN#Mo77t?&eG`O ziw-ZBLt?T^!yDC}Q&zTbkSe)$N3Qfy3l?jz#>Ysk8AvJZYG>yMo7nK1aV~El!QmIMLFWzd;{_U z1yt?RQ(q0byy1h&5_5?Mdx#DB#Djyv`tMV5GTTsQ0A}_Og2xd>6A6NxiyMR!EbA(k z4)_5+5U=U;k)_>$^6dX*mp7P%rF;P_pDu*IK}&MPNOuj7hiP7I1wU2@>V{h1 zd9vt0Be%md{GUZMXc{n{6nXN+%36JQK4lVk6RDyi8^G-4gnA;qOq|>(P=!dZ$-f7c zpsFMEaUy6*n!Q0SwF!+mRTmxdDFo>AEtrG0*+RT3}%!# z*y&xs_dIc+69zwRXZ8Op>95M3@>iak(2`p{oqzaCSj1rODA;%+Ks8a8bjZTO!t(O6 z&LhMLq3f4~B8YO?4w+$c*=J`QjU=6lZiH!6M*M52mmo(7f@UD3IlSDmq*-EGfN9Tr@IvIocc;9 zOp4!sine8ZvSy^RrJnu#n#24>LP(y%iZgX@MXKE;CskQwEjkird*4S9c#(1W7ZK1u?4l$b+uZEoe z91T{&b+F{w9fTmnpIA}6LsF?^D|m_SObMu{>FHAMEnBdnbVH>vl1kxMh#M}Qrqkce zBmd}%{j9H~;L}EW*^&Qn^n)5>&)IC1^E$BIYp@|MsXVct8sT-XFc7@k)2jLDGBodN zhp<-Z>+DmG^@>IonZ=uqSs~%YGp3U@PPq-QiLEIaFe%rR`{5F`g}3jISp-v(bso{@ zcNBP?#axq{$JE7~$Msm=wyI`Nxu%}^hu_xg>E4M=$uH}-UroIN8j8EW?lNM*3F_{= zem_>e2r-L>GmTIx)bWJMjaFUo7g9LbgV3L1#}hT!1jG;YKZs2a-_AYwqma5WHNLag zr+wbEGWSH(7;b%c2(d6k$y_!7suKxhE=2~|hZ5w_cRpeiP;eWr!jr&rw0ap!a5$b^ zv&&TI!-A6W}#tC=_qp6M$*-{7Nwg3KToaKNa-1P-i!DN=#l}GxCFsho7Ee)yma|2nIm7o4vdeSE zHa}M820l-=D)Bc#duyq}wBF3`NI6wx;&fgUw$lyYeC(s%wABiJ=&&`T75JP8^Xyer z$*dv9xu%+oh2PA0e}7BF@4PmpSVuBK1es2x()0F(jEqw@jk89--E?c8d9UjR^A34_ z=iBX4Bgg!QKG}}k->Z%tVL!o~;Ea{Ya!#Vw$ZHvBf2spNW~Pj%MKlw0G>2+ZI5AX+ zNUF9wS25XbU9Dvnr5PPsz5Gqz!#e&&a3Q`)fh~=yD!Vd`3?KQaKs|&EAaYjl&>_v; z1x-dVef$Y^HhEe92L7|5h+JTMlLa?nb%uFs%Wv zWXU~N@1EA#Ri+3q!)5ydJ}IVX_XW1U@{9D4RMbU1Gc+`f{6NZl{n`YHG&Arvlj!d@ z=S#~o_PJ3rQjyLI94H=2(hoQJpt~eZ7kjTk>a!BGY^m*Z3!W+$xEVzDO~s|xro5}U pyx+-H6t_`nLC|x*STxmzwWx{yVw3>ul?QMwLkm2wroQ7 z9?*umd%6P(3IL!WAApPvoR+WtTzo6?=PJlg%U%FFs(=Q70x6gQiaH7)9R*oG0G8iV z`S;quze7P0q@=tudZcQ8>e)+uzfqBe{pExVwVeirdyI@N_aFHFpp^r}@tD)`A5QS{1LS9cs-9X>IlbMyBlbcsua=)~!{GSz-HMMovdfekD4XuPW zVmqnhd1r55{{VIH)$2E7<1{*hIWfuN@@D5g%=14AgyPjtYwH`IC0{nbxfB4 z?7v((a+ji#5=cqqn@d44Sw2BJO3M3=?9e^wt8yuRx7pEKs(Po29zA=hW^V5%(!ZQA zy3@eIfom!LM*B_nzriy8FWDck|F~Fy21r5PJdh6H3P>Ay)3safjTQ<|OAW>Ecd>fstYfp0>r&B-da$kYV6Wshcg^@-bw*ex&E}za zKbHFiX}W{@#b%vQA0iMm2+;mbOf&*FO3{-6bF~uoHq|>o20*JjmR$X4Ntiau7=9(` z*N?@h+OF|sTr0WYMB|MZ+gh*uNb?HadB%+;oZBx1_*?6vI|@9`eX>70Up3o^N$x2l zcM^#)lem;akno`q_R|&;UDN_Gd(vbIS)4M7t<5~3CUvvfr*Gtbb}rTj3XT5|6#|zm za9xVtpSji9b)6!*BdP5#LP@zk`6;|~4HW4`@Nt?Y)7h81l82@e9!?B$5#d2hXM60& z+kNQ$xp8p~9#~Iaca)uuFw&qlJi6|5O~U5~s$H76DaoK$8Gqn2tGv&|PLm~Jcw4P_ zb`|=Ir|}R<_VN~pYqDo8xq_cR@VNwDsLkO_!PtVECJYw)?~LV@wlEC8`9#0*Mv?Yy zPsVzhtulSBP+K)=3A*}bA3j3;X63GS^Y%&$$hY*;{NRxp! znl;^a%lp!-2jXb2rlXW)fL*?|xm=yqqd4wjfnrdF zBOd<CqdkM8333Wg^ zbbpF9KBFC-0GZB@=8{`CiBc2%u8I63VGn~0I`+pH3`Md~#IZU~Xsoq$|JehRKTn#Y z@B>=5-S(1_kjSnJ^WfcYSk#&^$=zRnVfs~}PbY+2{A63va%KD7F_UGZ`fIPe&dq04 z^ZZvi5sQpm>1(f1;$*&1l0AgYiGdEoXDYW^?}v4TJiY&@hJKD)-%F6XqI5@~ zbbmXOpdb{-VaY(Sbto*1my#`F=B7q50$emj!T868S?IV7WT4%5bO)*WjJ9CgaWrON zmNOk$4SqhpXnFcxxajr^ZB#{4%4=t&ODVT1d|-q}F`9x47{R-ksrI5-PcnwO`5ce9ye z%xz(3ltX-jjdKtt3cD`3LJKuiF^*4d7>mDq|G8cG5-zH7W?q8ey6U0ie~-BlOyM?z z5$~Mc#BqZ#+mb}w6kFo@!g4OV*JaPUd2dC1lK8+~yEV*2>fyL%qEpY{ELf2}1rI?4 zM#Hk|q^=q1nh)UO@a%Q`9-)g7SR?7J-jQj!!Ob=0@N1G^XI>zC}sO5D$PqNTpUlsY|kZ%WTTNR8DT!AXc*@Gg}3 zz+3K$rjXRx3r<{5=^K}OgYiPr-<4!kzf{UI7Po~ zbRIL*;8|bB3yih3EWW`nny-wk!j?sbU0(IFE(n|}_PCmye0jK^pz8@Sy-I_}xE&%- zUhAUZ=~ZoCxT@|KEd6}*d=iLr^cGGrjJ>tYzE+cWFk!HDo5H2IEcQeur!%*X@j2C= z;;G%D!a*SYoh|sQ)1mplEj2Al zQcFw;9_qAqqO`=)YL(Pdqtxh|cjle*{(9%l_n!O5J@+J8J+0 z0szqQ0*+<@%j47Ei|;06`Dbn5-vQzP zLpZs(d3gEwj}ux>0vsSPm;(alYCcR`ljZmEv;1Av$pOYMsHvL zKL-X!$Hpfnr>19^3yZ9!<(1WU@7LI$x3+h7zwG_K|J?-wz<+(&pRoUO2_L&SAP_Kw z`@0Lo5p%r3!Vu0=dR!uBFLC=uh$_Nw^N5|xEpL3ztE7Kkw#>Ia{F`ODI9KxeN?ABH8X9AWv~8;JW};y& z-O8H-H%zo&wb@b(M1~;slDwz#Y)j#$8mqmD_%&Kt?ctRVUG5D#sD^lS{ULs4Xzd8_ z+(lA$lJEoTox~0EGNf9kZ$GivY-+h}WtobE?JU!YE$fN8&$dySbcOfxVtekju`n{zl3;I*OgD>%BG70i2}$ESNFeF6%T*z zjl02BCPBOtwYkwf8MT+!ZP#HH6ZaPHBO)YfQ5I42y1IOE*xL5TtTNu%n-d0;x#ar{ zcX;n%V^oCp$?4$Y^5lM(XYFHdX!+)eolp}!iL&|-Lt#N1rwK-M4ArnP8)J)U86}+g z$vzVy2P5$Bj6IInEm7%gml$Q}1irB-Ta-((E#7C@Pa(45EN5!*)a5et_{R0>aafqL zXHYA>kQqz*G#}@Btym^C&sfu(JajOPt(UysubLWg zMM|Epn^otBbC4mq462U}HOZ@x|Irh$ch3!Tw=V)F>n5u6+d^c5ymzOu|LMpA!zT%i z*$8w2&1LD*KBHpnQdK?DB)@bSAvI{=9bjyd_h6f|=5~TOUXGf&BV&GR5H0ExVxivN zHtst@WY7gRgOUx_y=L7>pO-Lmvzo8*(ImA9f1G&1RQh@cYGDQbUV*8H8NN-9jk0{j zM6x+6LQG!JgyP&ZZ4$#fjlv{J0$su3dqHt4QvL=PugxW!alA$Dt zkccyNxFlZ!%kfvdQ=l$oEho%iC{g5XYk72EqV(9u?kU@%2lq>=G5lJ3H?Dqd@cpVn zC5rqmd_4-k|G}a`3-8rz_c+YtV|E=DI+-;X6h$#EYOSP4>mz3cX346SL=_63g&3Qa zV_1k{@a-|Bs=^EOA@!_xehc?K`iU&P-?4rVFIc<#Z0exodT6)>*2}|&{A;o{Sm(#i z@NRpOso*Etf)eyZfSlsu!eEW0leA{mhtt_O4bw;$idAsA(%g=23RaBzq|4&~Z7{Ea zF^5OLf;F@Zl$@VDaGD(3!}pkEZycPGz(Tw5MK>B?VT3G{81AR6LK>}cWVN}4VBC5H zoaj)JptTW(_Ue65mg61g2uFa(uwcRQR6<3c-%MnX)afH9tGr6#R*zt*C6zN5w(NdQ z!p(Zw#r(3?RK>sKm6n-+rZ92Ew{0Hw z_4RqTjIrfwTD<|cH(7ns#)RuS$X;)(4qca@)K(DS_7F)7H0n?l0vEarYF%y8rauZd z5H}0d=S_LxpOa(XDBRxH=#SF$jGB-(>t;58uNU^AdFkd}R5xZGb>f|uOQmhL-{gT! zOwF8CxeQI$|0^oPOhe$+96Gda9!sBHNK4M4ED9<(vsG5o>0FJYFYg_kjZ>ato{LRo z4UXxW>61O)$;(b6Vw4zE)C~JWDnG>mlL+6peo9BWotQW0&OC6&bG9^4GYDVf@p`~h z>K%`9-{f%&mbvEE&6ND)X2eOa^be>#qv$G(ong+|w8qC)S>xo@*t%&OVF(zQVX~4| zJ8y~ToG-5mnc5FsABSqoFY;$mw9?f`Qgf~=Ii6A~SEVM>xmqa;{h7JXS(`K=kq9Y* ztf7xKHSKhf8CKO*eazeHu-ri^Yk2EkyZK|;e!-r-(*Cq?M6*CwM)R(?MDaGc99n^9P~x(lz+bPn7J3P)3+=o?_3z@N!PV_ zaoR}0P)4Sd#X4uyF(hhV>W_hX8QpZjSxwZvSS+w0oVbF&+=9K?yhU+BXpWa^^yRCl zvYe31DVR~s^-hU>=9eb>0kKO~@v1?j1W(9;F*^+PP9kZ$f=}a(c-PXy*!FMF9ghIA L#P&t*qnSSd{qs-A literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/architecture-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/architecture-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e586ce604ce836863acf034863c7fd69b0bfd1bc GIT binary patch literal 2009 zcmbu+doQxR#g_()$m7tzg!kBJZ zQJiK*vBa~e2-IE;xU!Xs7F=eQCY8Sy0d5Yoc(Lh&i9`C$36FZzvuh;UfHDV zJ)n8f!`lM@fdBv`Uw~{HaFd_@SbQn+$12EQ%U%L7Wk3y}fDCtVef_=hPSi_t!H zKmVz++4+W7I+uB3_&3*Yr>Lmv>ggXfFt<2v`Sl4T>a^XNv-WNm+&w(Kyf0n}2)v38 z3dY>Hi4P}45J|CjD0kzi@%K{G(lat2WIg=;(O(`H6#lh{$@<~P@@Ey5Rex)2dfwd9 z`l5~Vy1S>h?@j-}Pa~saiTTc5Y3|JeEB0s-LPNA?@+ zzg#f6O927_LzKR_Knij44TeFWrY9A(T>X{8VvZa;bzfQgeE!phS1M-TTo&tGzs*zC zg(K(9C0}U&lKpS6l>bZiJM2F$0iXs3$v+Pa16+W89q9x#edvwGgZyRYj|Pa+(y#ak z#Fj&vmK#yMym+>W8y*x_xPHMa`>VV0+8&K(gQj~n6==auImY^}V<-Y2Wig8MiTL=0 zgemV{wtY6`saOUnJVk$YKyf8U>;F4c=f_m3f-mm-kmvA*Z3YeiC#S|z3ZaCcUBrB9`&5~xV2m2A;yq&Nrj0P z^^)q^qAPtEbNw8<|oXvEn-dgzigUxYQR_B942 z$;WIsRNj@k2imWQDt8wiTD2E>c8Ysj8s?{0L-E5XE1dDlpD{I<#Hw-}ZQ;N|0?&9q zAXJZbi(?6-q{U8l;=+gS0)_sdMLlS(O0j#BLG%-wJ5_c;)7gh?Eg-wr#@86aE^RJn zb4VCMUy%663bTrX#xOXoqlCz+!yTq=wlzl)MYXuyb2H=;X87OJngP0Z&B0J7q-mr% zFuQMbhB}X2)m`F#jmHZUGQ|^FG}33Zvzj=xt}-tJLry`VJ5mGc8#*MqWg@!nOsLcN zT+#dr+qo~`3_nTP+2ob*4sQ)E8Qby8pp@ykJlrG3kSl_z4x!?qZidAtvf*-~0fUtp zoD$@Co_UoqziKbUX3;KDik+N8++Oee!V^>s3A%D=QFW6MoU0uo4egbCxC~aV#$h6- z>j5h2V)wZeoq!A@-FNGsBIzeA^8?Lt`_9000t3$h0j)Sq$9Q_p4E5o5-yDJ~fzIY| z@N?}Hp>Mb-m@`Vq`>ELP#kfUB!c?Hik z!BO7UEVw60&oPcg)WgsRyHdHJ1#gWsN86{DI1nqc5U2n1l3hJDq>kNu#DApAS2lH$TEwo~+%@zyyi&Bee`#*%w#(4zP6tUZgI)5tFo%mK;48B6qpLPF_v&fE zB)g#eM$Htvgp1D7sejH#4%!8_XtI=1HqL!JHicIU*58<9?nQ}QR7hy%P&y4OOj27h zNbeXdKd7GHPYC2STdiORbg}J`Z&&R<36>Y;mIH$kVN7&xyiRCfIFNj}SU8bJJNrIQ z&n}Z|R~@=sKTW)MYo~0QO^GBT_c5Q2IPTE=YNe5{1kJOYX{VAIwBCWvaP*_qD1uYU zThfNlLLhw9C&s!}Piw$&qkqE}`EKMbvauoFyuj0X-P^3mp}m1{Jva-_%uQCcWFXxE4`s*5fOAbUpj^}cTPa%xz*l;I{;W#gw`^r4yU3>g33dmWI{*Lx literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/bugs-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/bugs-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6505ebe7e359bca1b561391c14dce2bc95382745 GIT binary patch literal 4659 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 G9{dCCCca4k literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/bugs-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/bugs-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f5b521f8b9b649e4b127fe335a5664c9a2600327 GIT binary patch literal 1387 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 MFVcTam^b&o0EgY^WB>pF literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..77e8a8bfbfec725d105269b7be4c9394122c0728 GIT binary patch literal 2127 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/compiling-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..9ba10d1dc40b5ee6087ae0ad268331aa2588e3a4 GIT binary patch literal 1768 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 IK@MjA2d1ENi2wiq literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/download-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/download-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1e6d0d2e4c60244c0a1336c6c1d3e59d1448bb4 GIT binary patch literal 2158 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 H5l#LRKw{SL literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/download-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/download-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..342b1eb7116f361e24c2e3f3a37017da87a7dcc4 GIT binary patch literal 1790 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bd977666db8e5b12c8b3f174cc57c331bd7202a7 GIT binary patch literal 2300 zcmbu+do-+ic-KpJoz<#8o zlOq5E0RTw6fZb^TAwK=J_)+AqRS>`4{U-pH1NH(0Nsta80R~BeLA$+xmbg#pKWYR2 z4v>VTl(dYj+#Y!aaYEyMKmsHwDIp~(EiEM_&L)fR0V%Nb0qqmEGRkg2vO2LUX1B76 z<#g?8yH(xCSMe{+!D zATaw%A93p2FL}r1t=gZxd-yt0#j(!Pd%Ay1JHi@Yxd@G+a2B8&HLz;axo_H`YQApS z-N$JAQCH{}D{C9)hX#zQOUsD{cyNm*RrqxWb-Fj^yBaOw0iN&ULaT~^C(~)gf`ZJu zl`Qj)!m<+X%pyCPI-uO6>l?rt+Bdv+Wk}Cu9GUzq>wU1>l$Mo6W|TD*Mse_vJ!4hq zpPA|Ebs_^DwqB18s(jJ;91hckGrD^qABR+-$8)@FojuaaLcbL0R47H3EUxvlkN7_6 zd59~YbqQBrokg*~X->azezzUd3n|px^n^9#L2IZ%yeI1CCOaVnQ^w?H20}5j^}&uo ztMK3*JbKv_xeH)8fgH>!8Ow#{&cM%osoJT!o5XimNB`pyahiq`x|1ZbK@!OVZd=YJsUWhf(=3lp$ZUyruT?XbkvIY{lT^-nC`nu*t();$rc+7v&gvDt%e zW-?Z-_J{(NqkPiex(Ogln47uT9PaSO06B6QOL$plGSUV!m(56fY=Iw%oc$c&NUOBn zeiRiSRz`#;&m^!me2Umz4b{fL^J%{4nL{6a}l#G?eBWkT{+!mUBG z&!)2J0j}xY^VzTF3}4_inCb-~+9@N&cAey+dD78teEl2f)J^sDSc}I+N(FAO_!^jF zv|#h}0Mz3!?qgvy`oiPVl#MhGcU0D^{TYiKcPe}{pV5k^sao0&9*T+e@WhO9MKsXn zY1FTcWL3ScY^;_2jv<9B=24yS)WwaTwZWJG9ia{z^^|bq3ua4q7myP%xYbLI z?d*~OSQGf%nsZbT85?fYl`7EG6)Mt{SR(&8^u*E*Q-2|=JThF=xlr02(UMEQeTL5Xi^hE+=Q|o0IvIBTnh&wKSmRUR z*G~=gpV?PFl?FiQzmv>_F$xGn>Mj5dQMYsbsV|(k9c_K3IW2#1gm>c5jYu@*Oj@C? z5e@+4S8~LK6 z>Z)gq-1oC^E!)j_-WVl1Y+|VzEiwsM_L=B}MzrSL`CNV3+9s~5Ps4eRrjGGJObuLv zb;&GViFEfZ9pcQ65z8au-1@>v_c1F?_A6sa4X)CHPJ;&V{Hr>=oXH5gd%f)N6cO3c z%HIg>Z-nToV=P~Lw0&CBT!`o14P{3m%E!b5=BK8wl8HgV581CC@4@|nLf5~YVh$Lhf zN1JQ(r_}zo11*jA)6VD#B@BBaStihlmk%Bsw@eSo;pch#SXj$o_pT`*3@Wk~5?Gt+ zXo@0agWwWy)-%H(qDk#S`hjxh{ja?5zg(WTfV<~7xEH}XDs682Kq|;J5vSm}#WGzb zkzCc4#v43PRrL6hF|WQIdvWyAS`nC# z&~v@;&`Y6A8doephl>lnIq1_y;U+@5@LJ zrzo5T0d8>jWQY8>!42-0sH`9|v2xlcz;E`a5}!s<*%bc`4;9~rsm3Q~9M0VrFd9!r za`~f!eD#uCh73y6MEJbvz13Z{Mxriwkd;%rT8T*yF6Og|aCk_fNAy`To zB~!l9IMlp-St*-8aRo25AVCn6*Re8M(i$!%Vflg+7YXouWKJ>VLM3i69lLBa7+dAy zH|o^SV&X9^M_N2%OOKw^!W*r;6S^ol_pd!Tp literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/embedding-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b6443eac70f250a6770f258a94390b74280d31e0 GIT binary patch literal 1937 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/examples-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/examples-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..295b1dcfcec4f453b040397d12ff9cf6b0667694 GIT binary patch literal 2142 zcmbu+c~sKb9suwkf=fC+BU6e>i*l*dGPkK*o;hi1Xj+4&mZfECsbdOap|q)KPaW5C z%Ux1L$~6Hc_pvnGkkr7?G{p_fAtIDVZ{C@A&im_~H{W~iANStx_j~T=UgHUQ}aU?*GswfNrTuXT`BOJ4y{CEy1D3kD$oIVcDW1xY&rZP`8L|L6_; zJ3w+^h`fTL(k5jUSwh2RKn?^3%R#{M@(_qDJ4SX6K%nwl_88kLsJmTOM1*fWayPA5 zY43>_Z5r-_{Cy^VH}7py)`V@_4%gAu)8Bu<)Xd!C$D_yWemZIIaLUo??75#&9-imD z{I6UMxE2@`91)4eL}8 z_Kwc3?w;RzUk?qBFh^PM#>Tl*(;sJMKh4ea1goFdeiwcbeHDLqfdKHIPxc4wzg$q6 zOAZ17LlnQeKyp#C35G)C_ZTZ|v2|0t9IlQya#v~ViL~MuZJYL*xbrpqZVoDI?la}; z2)@()CHvoC_x>;0pRoV9#(^KeAlc`Ep@0qWjX1?A<+8PV@LSC2Fl?$LA0JnLa7AOG z6(Mk;qObdx%)yNkLt?6UUNyv++Yv!QR|#WYUe0E0c7NaDi4$bg6b&V7*tf&DQ~bgu zJeLl}GCq`dmsVn3r(7T59JzRfV9uUl-;PxtW@D#dgU(-@cI6P=h2+gJ}Fm|^H%3oHR8NT#9_2kBouO?$^1tv;BvC#Gpf$mZhD(>mMmHcLfBTUS@w~9@@8%P12XL;{7lKu}6Ib}1UabYXX|Omm zl{byGspkYbE1guss1B3f(s86k{F)R{yU4J};Rh+pdm~y417|9ftTZ(TCmmrXa`M=VVl4|<4g3<`0l^*y>`j{zs zJC=O90e+Hm$FN=sK!b&-=@ax3BlPtp_1;EWlFj0ye$?vcv(#bCddl<}N;54N*8KE5 zJg;JcW>k>dz@*O27;5$F)uI}+pA2-iZ$491ssn>3_qv>=qC(38-9yi~(XJi{X?AhJ z4I*7RW>VmOtP=ktXLsvJ7!DQ5P{ZDC!@zRQlKbP9DU%wKaKpF76B&V&Bk z<2(AV`<}12vTz${*jCP8TC^DtKk>LlmA?4xLxD%9mNB1GP>szVn(olj=RbZh%Or=H z<}K+mI$>_Tl_Dwdlg;HJL^G?H?+`CJE&!jW3Uu=u51WW?yVO3iqabf~3w@vH2nzq9 zM~N4QX^66~PsCtF6`a)zQRmWmYU*jhgw9{yTMcF#VoAyA1s8Uq-P#0@iWGi;XL1%NGvC1zRos3jPxtCY2M0ye>S3|hS@TMW#FT`iH|Zq zy2P#*5n+KV(|k zl6ZEWl;^F?t_>m{Yv#>1+Chvt^4Sdr+Y&=raA|67z1KeVsXu#Y$D3y)j_J!B-vE4~ zHq)G!H+gCoN(y)}^*r04 z)huyVSO5E}JHOtYxl~k86!7A}z9RO>jr!q_w+>gxPvzw&^Q-GvAAOOl>?3Vm4;i%;y_&(72hI+t#}DBC^iKZf_^PZnZ!4lPRo zvM7u}wal1)smIk$0i-~YkBvCIwxmG7+HllM!7pm4ZRFnwBzwrEmmb73dZa+v-$k)H RA=C4|zCtIw_*S!Y?4Mt42g(2d literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/examples-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/examples-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..614c9735ed4c27510a95fd99d552dcb0c65835ec GIT binary patch literal 2160 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 F{{nET8T$YL literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/ext-2-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/ext-2-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7e8b20d74e70c3416783013a93948bb1d2de93e9 GIT binary patch literal 1702 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 TkL7=xX8&jK(tWXj|Nl(@-f=-u literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/faq-running-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/faq-running-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..865b25b4d22d4c6ed3082c349eb6e16b24c029b8 GIT binary patch literal 12304 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 pys zeLg5ELwS6gujPRz0p13 zer~nn#TDPXeSTWY0clk!6pEyWwF~te!D6~Lx6nnKru}Rz#H2#KG5-d3C1JSP4sBd; zIWM5VK1PKf)jnbSEpsYz8P`WMXDvWn<^y?FU=d^$ zQZ#gA6AnydS1J@SYMi)`L)mHLLD8U#A5@H!ikdjN#Ka{erBv0_H8izMOwG(KEUlbf zT;1F~JiUTLLc_u%BBPR1Qq$5iGP89XZ3R<7E#dCS&q+js2Tb?ESsqsNY)IC<*Q*fm^@Vd2=W@(XT*7|i7cPNJ%;etEe0NDMquPI3o_U< c{D|w)SpRjwe}*{)i@G!zMlsdHfcgJT0MN8D_5c6? literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39e37d54dbe410809277eb5b5661d1f9fd77578b GIT binary patch literal 1711 zcmbu+c|6o<90%~0)xdMU~zE>L{yz1+6N#|afLl5_B#~aPfKVZ0s-JpPxcY^FBeqg5`#d% z5Q%LUNQ^8RU?@a1VwrPLL z{u?amf5|?<{&6t?SujZSd0;4D2W(WcUzD+!@Lr07d522Ok4P>hwb6j1^!9-!&*fee zA+U5#ZGU=r!mR~tZFNFiBpx3`o4{gEm@}CJzkNOFP-m8{Bx$R-VG@tx(iY=bC1C#W z%REMLHOoKU&xi+4y{}kBU<8J$sC6f5@RRG}4{PixaVaKb7HJ_yiSc%kwcbJ?Y%3Sj zFtk6MHbz>6yPa6H7<}M8BI6KCbMsJpJw42;Gx2>@z0|4%XSNrg%!Vs=v38!f z%&MAlUh$X1=lkjN_j1Qv=<2R?(#1w*$RjMRTh8l|?Y_~#j9ErMhL>Mg7lzfi9A4I| zGawlF;>iFaQ((GzkjqK2g>N39-?tISwI?{S?YfQScB;)i(B-;jbg;D3x&#`07f#JW ztPn_!!ksg#Rv#et#P&SB%EFv4`x zoGsmat*aLEg@8-p@!-OT+@qQ@)q25qlYERqc0zLOWg3G@9m)%fEA|)R%la$*`pdoj z7SyQO1v*n4nopQjqgr@#6$KwaS0}_VQIn2zqh*=O03_!tdgFMlc8;~WN5-|%8SR&? z+@|fbv`!%aipj-t$GS_@Vy+^5%=;G=yS~X}Pb(nV>dn)vLHV#| zpBAoeT4`T!>8jfhiGUc3(hF%Hu_2=Qk=OAQ**Y7fRZM%lfBDpWAvvA2kxAHX(fbf9 zsIMVtA-RIqvaliVxAe|xzV&fit>I1Q@_|aMoFnGC|Gb5c7dlbQ6&~|^203D8FbE^W zW@p{P`cC-a+bTBKYpx{GSNh$WEQZ32Nck%AIB#FoIz#a$#u42H#jWgx1*scjHW4%a ziu3C(xom&c7+SZLXR`FhxQE{TS@Bfk85`3pRmGPY^?hM5X;cQTAKek)M_ z@OxJwZhBb=$gQoOM!?+rHTu_uz=h3?UuFx)Ta>QEgo#%ryF2Y9H-C`W5@QL0;VdeQ vlil$iX%i^~PE}HtW&#nhEimdXUqPbXmZn4(&wvO=i8AhBM8%_n!ihfsa-s6> literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a319c529f64518f14d1da5303f0aa7b7301c4d4f GIT binary patch literal 1635 zcmbu+dpOf;902g&Y;zBrjZ=CeERyL7MM4j18aW;JOD-X|%{9$TC8$@%H7ggJ9FykJkR;-Jg4vbeE)c#_xpaI@8^BR~JOS8AcHb7;O}?#zg z7y^}+k(HBIkQB7308$_@SPBA$LLm@Ib&BL1fWV;ey@zb1RhLhaMj-)~@g_=uVLQ46~hCo%S?unw+n?jD|A-af(SLqfyC zBXIE-2?@kRQqoTuSIC)JS1I{7ZWa_$i;7DsX;sxVwRQD(n_F7jerdn|;MeY_%pO+n zZ+-nk?BS8ov2hNUH^YDRdiKrSykL1{b!~lPQ}|(P+XVu^U!UwV>|ZXJ#3coRfFUy5 zE|3&al3*AFy7!PY+{RfZFiut5I87E|n^(c;lG8D9SwaR~7?fAjHRYj}w`qUN{u?a) zf62bW{&8^uMKDP6d0-fD91tOeW6&$ldzG{D1SM6wjLOQiMvaWtk7dB^B6d{Ynri6` z^&(PNPMpftN+2OH%}2c^dXrJOB07Mbl~UNpz{A z>!OKzK~LkOH^o2ZEDKUKQ(v_tW5fWXWb=c)zh_v=rCML~bUBF-croue+?O-yh>vCX z*`OK+@TN-nhD0^CQ;dbQf+4(5F^!gYb7?kiAgpj!rQd)T9?E_)!!H=?b*VoKwLerK zpAGfgiMht}psSUkhRU=H_IFo1IF|;R_to6pO^GESZXecPt!u5~5e6!!Dc_r6AF8%J zCyl=B;<7q4Gp!Mm8uRB@Opj@#r1CP;4O{tPwey1<+-20`Wr7&UT3@t*hofUU9qR<` zCI00~rA=1jeg<5Q$A}n!|EW$(BzEtSX0IhIjj;WNY?g)AvUM>%F*x88H`jjflcoud z%6&|JzwX9fj3yjc!MSq6)i<*Vw7I?-N2`2)zv*d#H8koHDb&bg=-uo{47#j;IjXi0 zL=4mE)h(oI>p5Gs=G!51AssVelq2U2DYg&S-xhjoMN+9}YJL3trn%!*%*K!?Qr*cA zsA%e8!_jn&hH=v=3yqE}zISvG`z@__3Vjat=>S#e$Rt^(JP}^&xQ-7>yp*vJgb#Hy zxz;4-dG&r1(vxh`c}uP+j5K{xX-`*hLrBq|mlcp?TJbARL9+c3LN;r*fboE=`tkT+ znRSkXSAnH*4o+a8bQ^1c&~9+4*LSV<MIiiJq+2h)X({)9FZ$plmgcQY)I3VR)x|zVI!hrqrn7PQB`grpU^7t5~*{pT`E4 z-ek$$>?(1}O?yYEcV*&dtgP`GXxvaZI|KAGe-{yok@ zQZh9`3`E`dxbOX$Hg0?Kg@ZFMRiD*PN0?b`)RSsnp6!Z?3r-=TMGOj8z+C}DJaa6# zPKq0`B%)fn!j%kcBW{A?q}VL4X>n#)>gVH`gf$hq_U;3Sxy)~Gnx9rPz=nU ZK)60SklJUlOcbTx5(5tCxjV{Y&R-BX!cqVL literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/faqs-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..30d6baccd128adca141776a43c07e87eb1209522 GIT binary patch literal 1393 zcmex=kx|JhscGpMnOVgprDf$6l~v6xt!?ccon4bAPnkMx`iz;g7A;<~ zblLJ1D_3pWyk+aQ?K^hvI&}ER(PPI?oIG{u@|COCuHU$M>*1rvPo6$|{^I4UkDoq& z`TFhqkDtFl{$gZch6fqMV`%;o1p14Kg@u`g9po=Yrg9)=7Gz;nG-MNU3}jC%6jm~7 zCKy`a7|C|t96Tzb0+W7*>^YZNsB0-{>jCoTcNB{#BGyh z#O;%N_?MpjC?EIXU-Lsn)jR(*uP?k%;;Ek;EpO#LH*m}D>fJ|#?&$Wed-^-}%p|YZ z=~;4-cf&NfeuW>u|5N9_;Qlvhd;bMqpZ@aJyrqlpF8w!gMSN!Y#iOMx<-1Dn9__v5 zT%B#&`$V%iS0z{{ye!;YtUPda%Z{z{vMZgBYAH4_qH!d8hVU zzpdo7y=aZ#kIZE+d6&Pma*4{@`q(!35!>p=@*=M;9xu#JUiss6`1P%_!k*hNKA!YE zfOFx^n=3ZfAM0=XC;OrO@cT9?|MvL@r>|dGQ z{E(0A&8D%HCbOl_<{zDP^xW)+vB3e}@A)f=bj7mQn%TPjX9&8owSUT+ue$Dj(MK=8 zf1eW`xM{NQ6|r-#s#Eu0UN%W`*@is=Cz@WJid_3(ns?;kgDMl8-b!XnSaovctDu+H zX4&j&{j$ro_1(gi5if&c&;2T$ws^JUvRkjVf19SOxNY0sD{Hsp%H0px)uuA<6R);! z*E3J$jawrc?2cWkFz*+CI=1%8rxzG4*l0a7MSnkO~r5ZH7~lgZtqI(!s-efeI+dBWveE!$7%+|8@?bVUm-(1rC$kzVIEtgxZ%fI#9 zzajq1x9{kcB@a|S{%7c2XEN8>anDD;?JF{FEnT{G>a&@v;?J*&oT2kRXDfGbF59B- zo{5F|#mjH~44=ky>#gp!Y(@JU@7Aq-)*kcmeD5BAU_`oi)+9cfFYq#oMLTz4=B(!( zrn%An7jrKe3OO#h8GrXqbmoO64sIJGk8YVApjO31CFR?DJ|OS^ijl%(H(X fR{v!Ym*#!Z{ZHmr?EZJq_dml@u`dDa|8D{SaW+sf literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/implemented-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/implemented-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fe7242296980b9ce20794ecead133509da4a74ad GIT binary patch literal 6315 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8403893f635a9182e97d4c465ea7efc0c67351df GIT binary patch literal 1913 zcmbu+dsNa{9suwk0>1HySdC_Zl=*-(%(P}&GchWBrGnyPtke{ReB+3@rIO(*Gjc@3 zHAT|Yd^!wRHrD;0f;VCZ?CnZvc5;K3NjjQb2YzA z6?LMa&%pDs#Prblm}_e42*VvaccJ&~H#=aCvpsBg#NNT_q%+>-6yfwaFK-_b+1KyF z#gNdjOW_f*aq$U>jHK_<(lc1sGjFhO72M|BDg3^Od#}8LUn#g>Ro&Rs+|t_iLwkp? ze_(KE_^*#fCMKt*XJ(&>o{E=V{QPox<<;t%^w)PAoA0+|A3lC@fdKIDPxc$^zg)Ts zml6a5hNygTfs_&z3D$)`_gX9KIeMrBN9!YPuByUM2j_ z7uvsM{~PSu|0Vk!_8-?%Kobm7d>&XAI1YR^kj+9f#)q{t^Vhf)yD&W7o*4{g^Ju!B zQ#g!YywKDcN=_{N_2j9nJqby0e4{;iZkUOVV8&Lh?xM5Kwz&jN4;54plJrElAtGVp z6|JsZZ{Dgz^W2+5hMd9L?v{Ex}p(l7q&H*9+v`0zskw=x)M(oS+@VmBV@9sBOh~vlZ zEwWwh2wnOu<7HTsLkOPOD+sM=b7@c|YH%KVv~Li+gispg_iQ(_!QV z^t5-d7q6!`g`vZ{R^vL#FfV@jzttGg|yY*Sz~8uV`sQ6cxAh!#Zf zNL@LqZANu>*YIH2pE=XipZ>7#cX_fki4$(Aj@LTzP!D; zvzbSsKA>d!6JUc~1C|AjI8XD=n1OXuS{Ww|p#G(Bc(*NA4tPxOlU`?|r#6$F1Zz*T zyZ202^h{f-K|~RDISDjulp0V>EkdW?v?)>F*3cJYGwq4Y$~x`?qb=ZTGWCei|HFn z-B$#88so=klBEUSBKnYKHWLd20y^gNssfw2BX8dwUaJeWx{odTG!{_Ak^`l0V|~W6 zw#g%zi)K=N)6+Nf?$SLicDaP52$0C)5@cm*b%c*uH9+|q|8WWgT@Vr;llprQ;eAU7 z15uty&5e;-q+_l&mEk1FN=E<1P4ii@Dz1xvHvS5(zs9XC_Zx=hD9f6h9S}Lr;!_TC zvU=OXzkSy9zJQzU1@BsQ9liU^d53tRJqa!jG&eV>)&6#(+lc8f`;~8ZlN8SvT=EOc zbjjGDE_g*G7BD8sog}UhW-}+`sYx+qFp79Q z1Gi4!xdXH9osuY)(Kj_1uxtm4->dU5#4LW6wrA$`hNxu$?$W_M{uS3vcf;LO-13bI_q4k%7=P$Ycn0LwW$Ki+Rc5RZ>}8_%{v*tCM*+L zk8(JM$zuHSs6gs=m4ogl_w9}G?{v37 zpqp+H!?m?Ky@gUp!;w^YtbdU9ut~w+%L+poW5<>oBW;g$w1#EZ)X&?w7?X}Z%oQ%% zMK~VUVp8%xLQ6lJU1KK>(m(7E#K?jAbE&J&U2u?G^iOTj BIK2P> literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/implemented-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..11255d48c5114ae1faf6738bfa2a6998392e88c9 GIT binary patch literal 1611 zcmbu+X;9Ng6aeslE`roHBp?WmL~ikbVn9lWQf`r^F;F=S!k}^_DW)nA&QcD=5Ca8; zXdF=FK0G)gGz6lMfEKOFVK9ggP!SMJ&|m-|4b^F9`l(aj&ik;lZ{NJ%u4+&<3TW^3 z^!5ZmAOHZV7oZvf+|;|zi`6Ed*Fk+-bqhdh0&9VI2*?BgBS8=(NF@Z&>N#N_djp>W z1cpFi8gR`uT3@IOxY__11c88|5Eu*!Rad8|&jBbBhBCHw(a<4=!A*|o?nuik(KL0f zzrD`)k<1Kp=y>`XEj|7928QMqmYc1%*xB!N_{I_I=I-I?wa0s}-w*r!0|J8%96k~r z5gA3MoQR2yqsJ#CW@Mf`m35ktoqzURK_UD615Pq}IU`DYOZ)0#rc+FVP>X2bY5`eT+Z)LpNm zZ7&Ooo~@gmDRyE~&ztYhH<0F;XL|&A`2#r(G=>0m)E*xi+@j1FXD9^P$((udd}h;at& zW5>#ohXkrG3l5n~B6J}b`b0D=9z5im>)KGyz}b?=HkzawVFo>T2$*ty zt}7ZP8Q+uB`En9R8mkT$N3w;_Hs#ZFtsm&%EgGwF?Ir}wA5X5`5t}Pw-wKkN_c=iB zEy!Cr?IYUBiFb9Q$5Zv2elk1O!5TYwq|8=SNlA1k3M=0KNH#iqbs8HS^~)Brq`mUU zWm4#{XfymFNB{OnrjcbTl9EVgDOl)^MH^;TI?kz@+H-YEAC1DfRhh9358h;uM+v8j zF$2ktM>%mtRg~=~s$X&Hcvbx|%nd$HTQ8<~bosZ*l5TN!T@prc`*E=~6eFGH0eh;? z;R@0#TDY`;D;v(u;uGoAv1ljH7WwySwefv{{mGc5geyA>swZz^!vze}hqM`mX;`?_ z5W(U{N=f)of=s~V6Qr#O?QaWtio%TRQ@mXj&D8b3dPUa`k>AJ3ruKPSoHKJ^*hQJ2 zrLbn$!ODp)al2uoEPUb&&W}F2yxVVA)=BGRms*0f*5Dq?iu1s=aOPbr`MbJa17oh& z4veD{!w%F#^w0%9C1~Q3o{RHW$)wyx*rnyo>DhD!X{0T+7 Bxtag~ literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/index-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/index-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4e482ae2db3b436b8f5e37fc99c30620bf3136a0 GIT binary patch literal 3744 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/index-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/index-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7510e07f375cd492c1f7a512710d629bb24fbeb2 GIT binary patch literal 2002 zcmbu7eN@s}8pnSKzGPaFZ<(2sT28)E=F4WLldU3hz}0*yeCbqbp=%yPg;I2C%}Qo; zM>c2EQO6V!4P6yQ!O)U))HPE;Q)3A$4J3h5#7uunJG-;z>|b+sp6A>@?sK2#d+z7n zFZdjM3G4_BMg;>92mnBI34pV}N!{+Z#b=Sb!5PLum4uQfUARn;P z-BbT(ZQ$Pl(SySD4GfL87;n`zbnF21AW*0t463gWgXy}-x^n;q*WbDC@CgI6@NzpF8F2yA_15izcEJaYcZjV;EOR=ccs??2%5-L?ZQtDssmVN)%d*%0Q>uB}#21a9B zJFBCU-PO%`+|Pe9F!{H!dsbK{r2_VF_p1c3hX zWIu!b4;Ng=r3ZsSVTPZ%AbLdIg2G|?`wkoIJP~eqF2l^;F6olul|hoFS1_;cH{pd`vvU3Tr+?P6r%e)C>#g?)|=-3Q7aYO4d(Ck>a`-3 zpj7!cSuRS8MV`GH%gsu?aR2RY_d99iMmesziJU{g!UtEa@3^!M)Y0)bn#XQ|lkt}?O% zQl!ic$Y4ItPwgnH#s4VAjkTP`pf?}G3Rm3hW$CQS zz*RIaq?tMK0n4o#mVLqNC?C*Rbaj>DHGxy^kffxd+gg3(~SD8 zZUk#K4bexA|p+Y1j)W+c@svpn~a*-XXc`74?XFKjW zW>%MAqc-S0m;T_==3e2_N*D}BvY!*NMheo9e1sZ_Vzo|_$+ooldo*zzd+3n7yt1>J zTsJHCQQ>hvO#1ki-7|f|$K};z)RUXmz2`m-ImV`Tvp|5Iuu&L$`*o?{9Wmh~Qges6 zEXYM^DOY$l=n^~9WTqk2=YIkzCMfIZsDSHa_mm3z#~3Pg`}ooqnK&pX;B$Q<>sUgoCR zK>y`0U_FtQlW${~ka_-AZ6H&UdSc+V+WL-{k&IZbR=fA@@nq@wIo-_(iL9yEqxoQ7ML)_trH zS=gO%#g)ii8$0s0>dY_)0+`N<0dLMj`r}cjftb!IPGP|_QVxI9t!!edZ|@#qb3j{K zFpW4j(gG*B#>@U->i(+VlEb5C5E$~3niNZQgtk(ZE*<;2$BCIB%ZFF!Z2N3wJ+w@md-DBw zjUVP!z%J6{{LJb=f~y)qNq2o$_VlTeKeNPWiJO@@;EkINYZS+i=(oL0yWte_J=FNn z!Gy|kO$K+GD{GnxzN@)LCuY@Ux_h>!(2k<5+(TFk`Xfru9~EniVXWJF$TZgU#6U!r za{|&U$UHi(Rngm`O&{YP>!yi8;H*kgooyZ-wC6wNZFpk-)F+<>@lEq^q-zdhant6* zQh#~8WCa9F*H$l<<`Q9_9MpYw%Uf@O0M>;}>ZVrWkKv+xwIQ>t&(yvGW literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/index-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/index-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..6b08cad80f5d65c8f7f273cc813d1744256ba0c8 GIT binary patch literal 1958 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/involved-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/involved-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a0d2e4760339a39bcdc8c80e41ccc252c63235f5 GIT binary patch literal 2767 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 K@146MnEEHCA|t&3 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/involved-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/involved-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..570a2f0eab0619f477913501cce84602f4d4d2b1 GIT binary patch literal 2869 zcmbu-c{mhW8vyVbOR|+oGeQv&!ibEes9Va~Si2gN-A!gR$r2-6ku8!ek!@TV%P8Y& zjD5*E*3uY56lSb5mS*f%;_AEKbHC^L{`#KpzUMiAoaemfecsKU9}qYwC?vd}Ko$e=0C{~c;wS4gE=)lGdnlWVslqk*VZ>SxBl4v;Q|79|Gu)nVE^R;?YnsR z_;~pQez<@;96W4|=SST=%?d{+-tO=RNPlE(3k0 zhI0?cd64sd;(YGdIXMbmbt#)6lhBZHt%&Hpl=g&fd>-T) zvnQ@0bmDHBMTTU`52lNi%0s*lCZQKQ4_pH60pdKE2Ov$L>CoUf#?A>#c|wlo%j>5# z7S`FWzhl*2J+n(^l8#R(b~5!Mb3-kq4a;&pRE-oqoKwn~vF%&^%uEt~0|{Y;1qsm_ zi4YjRr1XATK~GwtN?qzx6@-UR>F4pmYDTrAr zN?BGdLrVANNy?~mt##Y6+3f&!O8>B3m|*SJW|4_sf$Z z6H36z%{Z+2%es$T*%KyU7id9L!Ak>*PG3cuD!sb`5&FL2VzY#0e0lpwi7z@v)Xl?1 zJfw6df{T#uod!( zWsj31(eA;zVdbJ*mTm3ln+nnCzFR?-Lon=GZ9v|k#Vn-;T2T$gv$F?tMLPT1vn^-C z-1Pjy(G!-ANq{Zexm%ID8=u@$ZR%+O;RmqpqwHaL{o8u3M0_DmWwt5Sp43<^buXDQ z=H$6NXC0$Q)OIq*2wPk9njr9A1}5A~?MdFqIs z4R%z%eJu3oIV5c5E5Q}4CLuOAqSnj%r04A5Ht}$DMH*OYorIlIWln+A6h)k1Qd%1~ zCjTga;k7Aj=^<5d(0%uPDqN~6PTjNq+YO1N5=Vi`>M$*)q)J}QxC}K^7E(|A z>^(ewvW{N4q&3kdBjarbJ(=O~d!7xoGUVHnyU>O*SJr^2iS608b1ddJ6KX2Ffku4L z!J#Bk-k=An(zxiXr&jrTsaLUIi8htN{8MNixJtTpz^26VX3LU@n#KvD|D2}3VP4#W z@A}L5!S#OkR*N~52A)Lwig8{sIU*2J6dB+h>!#h3<-XYJ08|ROLoAPNQnH&Vj^1@8%MeeweMnE< zUX^b>UFZzl%-;mj(US}7BdjVaS>o?3(h7SQXTA;D7EXup7l&Tp5R=OG0Ijf)`_&cL zO{Q-2uGIYIreM(rf*11Y!)MV!Q%m-v!6$1fs_ELEpIeB{ z1!zP!Nz{;Xci_xa#zHQ%RW!U^%QPdS3JJ-31NXVja1s4NDeywl2})1a>$7XVl7$mO z1n(N?7QM0Gqz|7TqHPCeGP&&SH?}DMYXmmPBL4*jg7|vR7A}{v;bbOl@gPkHXJ>;8 zyA02dDqEy}5wSYeb&n;Z%!NjT`4i@y<%a{D%r{gf8)({zF4luSL`JQzVxO*VV362n zD{%WG18(mrJdxK_@)2y7#-VhWA3Hwe+F;+QHmsGOMr)rUxN)|mM*4b{bFXJI&#wDs zhKo(ENCg)QQhQ6MJd95F6O5j60#?gQnSQ02MJ73;os*8NT33&5feV*w&5XfE2%ZJ! zZC@`g)Rv6nrQ5oxvrlPf1~bhj@_V*vCk6_D#-Qv|44N);M#_zK-i$?d@CQ ze5-K0nXv?6s%w~1ndHVS<{qF8B0;h$MIwZc6;#t;(mofq5-&z(t#~<0#&lGM3w<(T z%&&V}c*$qCXV9T8}U&(`l!X}FoS)%z>iVJd2vfe6VDFb}2`2o*EUs@otJ zXLr+Q7f09`^cePx@Qa#SomI-*`yw-;UMLHg+~w9tN^rT^dR(BR);`<>#$48=_^S8 zVClJWKIWf!ahy#qufxv>-N)4WRWYY4;{#YLojWUexKIba9ewV-OY@NMwO2wa6X53Q VTx|Vr3w#ey2wA(i5DVP<^d}c8RUiNW literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/involved-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/involved-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..14c3ac2af027b0d4a1f72351358cc21ac822f94f GIT binary patch literal 2324 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 Bc-;U1 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/license-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/license-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..fbd3d87afc651ec3844b38ed8e87a87fa735fc33 GIT binary patch literal 1898 zcmbu+e>l_o9suy~Y!lI~2`d#&tm5D#V;SeV3)48-gK}6yVwl~LRHm~M$&aDVFw5r0 zX(qo?*$f9MzqWEJ$NU&8p2J*f9i1)GlDKovea?NJ``3N$d4HbwAD`#*{=A>}>+@M3 zU;hQz=8MH)0T2iPK-vYYzW_Y7yFV8jP5xX5?d|nP089@s1ZZH;UO)#10>eP-eSn2_ zPU!Ewfqw@`2MmGgZqn1=Y@jU=Z3A>bV6YAZ4241<+UiT%a{vN^8hzo2(cK;pxoK~b z@u76)Ej_CvP2DDeLn>>h(`PgEH=DwD>@-8{+ke2u7U}GQI_!$}^zz2~9L4zt9X}EL zZAd5~Dw-4%8%K^$K6m~?3N7{G)y!*I**Uq4!lGhU3HxR#hgZd~zFkvWS1%AYi&|RS zer)gQ?dumy9zPk74v&nE$;Kz-(=&?Mf6UFldaYEyTU>g-{6X_^Wy1vmz<)g1@38-J z!L%+N2m}n-wBZ8jq-YZigFwG<)HT8cY>G_UzV}eNp79apt)^~$E2lt}$?3C0n@z2e z(+Kqj?O(G04VLkL$^L--$0Y|0!65DDfnk6L@YzHogI*hyY|UXRIeasRiVDjy2Z#4= znMR)EE!EsfVP{N83j3Yc(LBowsm54=Ysd=;9T87Yu6u2knDtGoPsFIWh>uG(nm~&E zaZ9ff?p7JSv@bIZT5y81`Ww6EORp5Dm1!1fvqCy{9cbcw_~;W(;wx8LuGXH6Uoo$% zebwGr(F%dGQ)KK z%p6gP8ZH&Dwn~?~vibNLO>BP}tVSUHIfS+y)ABt&t>y(`B0Nlk?X?2beu7ye#3^BPm?kR&S>sn{n8t9#ZhO9 z)gQx?r__g!#Xpm>BFMHZtNnTb#6^~y=Y%aQQZJCvVCL^j#oj5*kDf+Hcs}fo0QXy$ z)G10u!9yZ!v)a76hTLT(60~IZs))*Pbmo@i?u#*%lq5dc#Vk`!9GkL~@kbIAg61Os z^!I)NL_Zq5Cn835z0qEhyY$S8AXMvC)%&IHMpZ@$7=F)C-O0po^2$lft*vm{4Zl(3 zsl>>U;2!y?GapqVG&r|7i5Fi!I5t~IjqSgT7@gzd*PfJw;loD1nq~Vg{?NAel==2; zb?ork5QXY7ev_Msmh00WsKf)D#QfFBs>xjoR{fW)rT31N|K)ljax&$3Q#;zb83*ku zNw81g6~7)+Np>F`|Lqep0LzpZ@oLR=PfW}5$L+d;B$|eT=T4!+T$X$ISNcct<7dv& zW%d%Etv5-XR_y5m?KfWz8dQ*Ij52#hRiWaY-JTt!wqJGKVApynL2$M&&J%2QW;jIb zFL$boVOI$EyEp`A?n@7A^@Y;vxGBUKve9%| z5ior2lUS6YRPMB&kIjW8@Cse23y3Ic%DgXWaH!gYj4rBuS&l8ct-y0Dncdic-~u!E&O98-<|vQx<@@b92Y3u% oBNqqrEGx7BYA^Y$Gq_fa@phYOT`jr?PaC&+xWt=c0P7R~1SjHC;Q#;t literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/license-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/license-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..693d4b246e35f43f0e7906d755047a1ff68775ee GIT binary patch literal 1582 zcmbu+Yf#cz6aer)0*aanIi_V8tfOVVGS@6A z+%U^WX5sii%@?&ImF=#ffry(ApwhGyNuyF(+}&ws_S4RG?wk*I?m1`f?_QNiH31j| z`UUs_AP@k6)C*9J0zT^9*Tve9ubZImRy_a^Fkl^U8Vs@lG!P�J*sNcBCTf6WH| z4v+>I0@c)lY3t~!3)lvL1_%t+fPkS;2t-{?Q=bD61k})ao42MBAzI5O#dv#GNhNI4 zuEvKZ2l(^0u18N~YwMVrtv9zop*P#vZ^2-9xVd}ae0+EN`R@q`{O;hP!$(3w!(w9N zj>RXC5>wMoo=QJW$vAs1=X`Ene!->E%U8VJx-P+cEzvJg# zZXfT_<0t)tL(c`mVbO?qQX-YTeD!*2`i*=+@qTgXgYx62H5Ui~e|fUMVE=L<)GiGO z1PswybAdF{)d@yGpw`A8K!MJuq)_^aNkW)D|;|lCRPJ zl>IkY_WzQ7f&JqW1M9#b_2+>RfETc0q8x_i3_OD8mAqk8SvWJ9RzhdzMbC4FJ|w;B z@)ylr$3oKS3%+{_txi#l{hB;NMxS)StACXviSw&xClM&ws{L@~v$O!0m~bR6=sKaL z^GqjKaomviylLgmtAJx^&1|^iyL#gsnuBz1xhy$ve94ul0_T14HmXo27d4t%-WWjJ5`@?3JPY7EeKw=F%oPO&_zu1*!=te^F3NkktDp1 z{55aGJvW~Vq$pjgL)_N;0!+E5lP7^QkL;xZtqqcVstDbRcb2nj3RCKQ#o0v1)h%+p znyYo+?n_EYW8uFc4S%As8dxLBONzd+9rF@pzt{yz+Gxh7T26eB6FXBTRY0!zhwgYw zCcU~Bp3e@cER$Hmrdk>L#dV^6F-dob;cswB6sInP?2%WXg^S=Mo>wXm)r zDH4&?ScG3t?0uf>sFBDh8Z30U=d+vNz#^x}f+)s0dY79yjBT>%HG+!<*|B>tCslNT8b%9p!sF zx|c1;7sS}R9WU}4u$eilpdC^0#p!olcEgyIf37^;rFpb zi^J!add#Ab%3fdLvb%mYxxR)TA7_>yL-ylMg!#)d#<|IPL=+>b7@<_~GFJL{r7Kw} z_%=yV>LCVA_pNDLrl>iHM)Q1HwZh`{&wTb6xx31bPjV}L70!Lk@LKEM*n?wcNjc^T z872I;UAU8a$Ucj)YgDRNJmi!x1JT*klRYuDRQ9YlnOsAuIGPQ+RbXf6F4(EnGaUsi z+v7RX5{Z{lA|A%4VkOr%Kfs|2C7$FX2jysv^y!SY3l^!b=QCMx4v+FS#zi-CKBJqp za#=RRm9(wm(6E72ie|-xmjNbHx0mTEH_e&s-am7M-*Vl1mYh6Cu4(C@SY5<)XNRzy zFds!DQHAxWc6#v8nA}M?D+;BkfVcunQIT5J4$b(K@==9yt^!`sHG<{Z6Pc;Y)6$$YYJ>U-z}EfE%GIU@*_FmU>tP UTskS4`wVqky&TTpiBygJ0W%z~8UO$Q literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/limitations-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/limitations-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..caedc251f6b32cb9b9b9e0af9bae45ca1903ebd9 GIT binary patch literal 7665 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..75e7dfe6b96374be1f428fd0a4353c1e90c8b4c0 GIT binary patch literal 2284 zcmbu7eK^zo9>;$(qU0`*D_w|02*s9?NTo8dd+N@^j2ji3i`|-sO&+caCFwp9yXnLs zkIkq&+h%!=h1f<-n}!sNHZjYvv(A04&UKx?&UNn3=lcHf{e0h__w{{!zF+wp`FmhH z{IvUN00aU6kRk#3IB-(2`)l#ty5%nbO*LREKmdbG03}TjSQ8}g0*n;*RQb~z z_;-Mmz{)C{RMj?bQCA2WwgXBaFjz?$tfHc>a?!`v z&p-6ia!H zRB$OND}$9)zjJ|<;uQ<5sjOmraFdoRQZ+bQ+r;j=n$C&)#n0L|@3Hq5>4sb#-lAs; z73>v%NBbAq{|0vB|04SV_8%@TuoVnaJRVpRZ~q8q}5w} z(G|9th`p$>5uqiY^ldUClb+1^*N~I0;W3!Y6>t6hJzzZEz^en}Cu*Vhbk&@-We3;b zqKf%zf+Db#_5ML?Az6USaJCj3rO~u2h1`g6h<;bHq4auf;xR+xBCkT?LQEFqB3-mT z*b=%#=F{J;W(^K|gh*?rYIdv?Gz_;nQ?Z#~)GBbspdZx^ONyechi z2?+a4@<-gD5yk03&(~A>J{=S4e&=jr(PsTaUToZ&s%YZ4HJMO?+^>x)(vxyoZq4kH zNH<$$zNJ{B{0}`s7NtsPldMlTG^2q+iqrViazZv!KwbM;OqC`Kb?PJ16V36HWHQm& zNE$WNndfL&6lqgc<60y240{cojX|LuWKl$w?g##66%n{ezNwTVKGTD|ofsrG@8w&j z`n{X&u+<{;b~#RmB4{)gOr5#Cpzv`_$>5wEa2u|ziF`JVAePRO>>hgtW5swsz1t*a+7K~)@#g~D6b&rQbjuFA}SB+z|ne-+^ zP%M0&?(OkQLr$DK*{pEj^RkME76&#@FGw|3KkZdYAI%{(%~W_yC>>kWbg z%j=BWP$6np76{RW_-PK0eTH$obkD{(8ER1THceUP4-ZyOhdBdluX9L>G`JCt) zJ1GZr0)*Vq0OyC4q1rhXcJ&&MABc7E46SmH8_UbWS7IS6V;VTa91}uN6p^j}E!mgc%Ao7+edR!UuhPv#fvWeBhHzBS0 zhJ+Ef__EpsPW|)evteW&`fDIJqA?w}?e0p@Xyl=Szmx1ReboADc1y7S!CNl$(s!k7 zZpsZ8CIV*Pq?kZh_e_OZ2+VG(fHe6Ihq}RygHS`HJ zvSJN0bD80=HAqe{ zG8>fik9As6q`vKYUoE;;GpmQL7_(}jeZ?eZo4M2nE=pzumtzh@#EEzW{Hf7t % z9H(~5xPb?PHWG{0wJv5uBR$-jN0xW_;bI1i&Nmh;eDrE#h2}AbnqLgB;ieGV(BUgw z)yy?y@dP1Gor>GW4`1D&l%vBha#L3zK9bdA-MR0yF@Fnu$3qA3x-W^&;ExS-v8?)_ zci*%YR#gf8)A;1-IR|cIRf>H;5Z3<@uY04IcyuaeC7$H%5gl#+Yg9JIU~rS~L^C*!Mh4mE20P}$Z~mgbI&kDz6j_>>l#z{~x4_kD7%=FV_aG3_u*DAFyAX~ETl-CQT}kmvSy{O{U+ys$ s-JS4q;MdBOrKwQ2gl3)Gov4jumvs}>PO%lv2(IvceqJHw49VaA6A%|edH?_b literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e1feedd7b39bf9aa2734ffa9e9d213f2eb3a1c2d GIT binary patch literal 2285 zcmbu;XHe7G769-+BnSd3p+#5$3n&U?S4dE)k40LL4gyKUg5XkP484e;bP+KWX%-+5 zK#UOSMd?UYLg=CiNH7GXNQfZj#kX(v&Ad-<-kv-6!<~EXne)4ME^nOo5s*NdT9^U? z0stVu9{_I(Fy^oRUi>Wb_bTvD^IiiG5kMRW0SO!i1R(+-hybqxP~!I~^k;40-yt9f z0t@XD7TGN-#!sl000adiX8d9 zvQ@_Z-HNi-l^Zd;MP;G;<>Xb49#cJj0*=r=b^45s@mUj7Gjj{1gQL@VXBStL`&AFm zYkzoo;{yVNfXZr_QGi%&>QdO%3e$jo|}ol{U)L@X{Lm6laeURKxC*3~z(wRd!O zb@#mK9j1=ZM#sh{Ch3gXxli-Vh0mZIw0dbH3|M5T&z!2Dx;f@K#4t4KKNMq#`$-^E!Iyef0ZRp;SH1^s< z%zaO3@^lH#T03i=d@v|f+O+D7%T#xSigyIQ^s_uR?p&?eMOqi3$Rbp70^Vh1@pZxf zd7^6{Qq4M~N`y0hKwM-^|=Ridb7Uw@GO4EyYsOLPG^X zcY+mWwKSMdLg}UHX(FnZ@?K289uluQyCh9Q9aq#=QHWlrgv>wa#h;$Tw>k_Gv)tVY zBmEg(9wX~!ab;ECW@qE=$?DQL|GSmQyB@A@on+w5-sF;=GULfoorqOVk}UK3Jcf0O zn%(uic9_!=Uu09lz1A58DXAKM>k=YmRCC`Zs$>c^;dX&*(~2_EiEBK{ExN^x@8E1* z9qSoOzM(Q!og6MfF}+l)FaAShWqO4LZ8=g$^9^jo3Z1&wWV@wb6I-%yQ|a-=N6?kH zWWRz*ub}(QoO0Q6`bL&Hg>WvWZ`=Nw~|y;$~#HB3(KdJA=J9`C;^}Lg*I|Mh+d`i zJ%(1{^k)$!1S9GvD&iGeE%R+aZQMQyZqkoP>qy84^ALExS?eawM>dE<@Dk$zyE9WF zRlbKsvYJbqgga6-q^+BcAi1~#EDlENk zm}u@pC&0*;la?8Wl(O_k?52?wC)85&Z_02hRX?71CFw3c7*Lr`@g3WZ)@*Yks&~tz zq#(Hm4inGExvP_pzg~$GJLcM7c7=x7i$^OxWYDumiD;*k*WrCEzt+=rMkEUZ^R{05 zhU?6{O3708k}T1}6cRvn8=_-H7S6Xw^FNSP=y!+k;$wH0m}xI_6WDWE7y~Fbybv?) zgF0VWJmVTdMz_dkQVK9_1S|T0j)DjI8Wnc6GG5yzw!xDKYb;vG3VXKoBZJWlZ5?gM zX9tA^$48hkE|@vw+R%Ih${{`q?^7}#-oL~*(;ZMOZ=J9sc1nfIciE&p`uRHkO|?O5019AqIO#lzk%k7zFnEkW8xvz%{& zSKyrM-jmi(89iTxS3h+nP4;uHvj&dE1jN?zyKnMB`9H=6`s_+*D8Bs(zOIK#&q=Ro z(^X5BJ3_d#IvQQV#XG;Oq!!Q)B}GClX$pas724ZToT8&!!%XW}R9TTP@Tmb!AF&?g z`bsMKNhTv)w^4PjX5F)g8ezxqQ=GMG9M&^={@ED?cb4#i>iCmMF4JDN@B1`5M|6Bg zYatfyGX0xU12~29vjj_cmATwpknhyu_LBATtnCOHwjs7%FYi-6wV3#PdD#=&tkF5p z{sum*y^EPPaqkRbqe-m|gMY9pr1Py??uyo+V*90aq~mpNlND;5Z4&k^9)?zTQi*OK zW)d^(h>87`87CiBqfe3T<1Dl0 Jw+wj`{{$ZnG8F&- literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/limitations-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..07c08f1a136266ba33b3218608a1c494e67d4137 GIT binary patch literal 1917 zcmbu+doP|kJ6S((XLT5#!#`UMOZZ{Z3t*l??z!LlJ@<3J zx(VGoz%nc(Gz0*F005+4fKCJi>36>`wwnCD4*J`=p8=RLupP(&gB$?^7zhjl>39G_ z|4!(yy@7uR$N&t18X6g!m~PV-a4Z1>5EyI#0Yjk>h`ySvKL;Q%sFlO#hYWW_CK@>s ztoL6ot26%e@Pnr|CtfL>yiT3FVq&_}_7gj}vx}?S-hF7y7v6vL@eK+-5`sM%8W#1{ z*U{g^d>fl|`b=_4Dn2bM`}_rBPA;k7D&<;X5%v1b^1oJ8R{i)Bt^Rfcozd9DY;J91 zbJ{x|c6Rmj^7{Dw1JC~cdPFcfHa_u2D3MOTpPBtIH@~1%t^Bg8Ueo+zeai&`z`uRj zudx4e!SpTz2m}l<+H!#mi24M>AW(%>JuY+#T;vj?lhGe zYIoGAH69;es{FvWXL$#e;1jmxyPx^2a}-_ehxCi=Rv>!GK>Ix@HGjgTJ-}1RVH6XX z!NMyzkIj8bGscfh|KsVYB+L{12U0dY(B-YKVUoX%W;qt4M(+5ZBuQJ$EOM}#4^_O#`n!CG^(uC_ez?z%#Ng*F$ z#l0kbNU3=7H%BF^B>zYYAN_G~$Sab2-=sOsJItenV`dxjq?6NMc3`%gadOapI5AC` zMXYsEy3}I`O*sW|Pj>I&vIQ7PZu8Wn*;ySBVe6hqzC&F`d<;_!;KbX)tA~Bl6N%>> zvUdz}!3)JY;0n#W6w$ln8dCmMf~EG))jh&v>#o!Yiaeo5=v1i|Bb68LWU=CNl0&mi zknCMak|phKhY^;CCmI?E%lBapH6Lk6+v_YVrQ9;rMm4uIA-ULha&yWHqpnbNQ$5*nk2XllV^c?!o^-@@v|nCeMTut-ge`rAP}_W|!X~Eu>`MGLos`$z_I}nP%gK=;LRD z$K>pcsORvRwlorXwyb%MnPGnWcA77eU)3ZW%wwdk)7j(1*z@XY>vkNOZ&*5A3eO?Q zL%Lu3CrEFYf9$;BCyLltj#;J?F7#!sG{>^rT%W*r#f zjkrHUmrMw2nM@gpB4*uP@LqqyyySHo)Zfyo)c&9`rlP1w_E*b6@o z{^3igsayT`Tj{?d9dMNl7ZY^A!8RR0w~YLghNT0XWPMX=)65OGj{5Hdb#ML&np1aY literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/running-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/running-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2ddb0b9cc7638012492de7a197e3843f019363bd GIT binary patch literal 9145 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/running-label-1.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/running-label-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..97437d749e64821f752d09a82318a638930990bb GIT binary patch literal 2534 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/running-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/running-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e6012065817db42f46dc7c464d5d97902d312ba1 GIT binary patch literal 2583 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 HD<*ye=pEzf literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/specs-header.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/specs-header.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aadb2ec1aa36e6841b5269588567f4fc79d427eb GIT binary patch literal 18837 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

+The overall process is controlled by org.apache.fop.apps.Driver. In +this class, a typical sequence is:

+ +

Driver driver = new Driver();

+

driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);

+

driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");

+

driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");

+

driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");

+

driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");

+

driver.setWriter(new PrintWriter(new FileWriter(args[1])));

+

+

driver.buildFOTree(parser, fileInputSource(args[0]));

+

+

driver.format();

+

+

driver.render();

+ + + +

The class org.apache.fop.fo.FOTreeBuilder is responsible for actually +constructing the FO tree. The key SAX events used are

+

startElement(),

+

endElement() and characters().

+ +

All formatting objects derive from abstract class +org.apache.fop.fo.FONode. The other FO classes inherit from +FONode as follows:

+ +

            FONode

+

               |

+

     __________|________

+

    |                   |

+

   FObj               FOText

+

    |

+

    |___________________

+

    |                   |

+

  FObjMixed      SequenceSpecifier +

+ +

FO's extending FObj:

+ +

Package org.apache.fop.fo.pagination:

+ + +

LayoutMasterSet

+

PageSequence

+

RegionAfter

+

RegionBefore

+

RegionBody

+

Root

+

SequenceSpecification

+

SimplePageMaster

+ + +

Package org.apache.fop.fo.flow:

+ + +

BlockContainer

+

DisplayGraphic

+

DisplayRule

+

DisplaySequence

+

Flow

+

InlineGraphic

+

ListBlock

+

ListItem

+

ListItemBody

+

ListItemLabel

+

PageNumber

+

StaticContent

+

Table

+

TableBody

+

TableCell

+

TableColumn

+

TableRow

+ +

FO's extending SequenceSpecifier:

+ +

Package org.apache.fop.fo.pagination:

+ + +

SequenceSpecifierAlternating

+

SequenceSpecifierRepeating

+

SequenceSpecifierSingle

+ +

FO's extending FObjMixed:

+ +

Package org.apache.fop.fo.flow:

+ + +

Block

+

InlineSequence

+

SimpleLink

+ +
+ + +

+The class inheritance described above only describes the nature of the +content. Every FO in FOP also has a parent, and a Vector of children. The +parent attribute (in the Java sense), in particular, is used to enforce +constraints required by the FO hierarchy. +

+ +

+FONode, among other things, ensures that FO's have a parent, that they +have children, that they maintain a marker of where the layout was up to +(for FObj's it is the child number, and for FOText's it is the character +number), and that they have a layout() method. +

+
+ + + +

+Every FO class has code that looks something like this: +

+ +

public static class Maker extends FObj.Maker {

+

   public FObj make(FObj parent, PropertyList propertyList)

+

     throws FOPException

+

   {

+

     return new SimplePageMaster(parent, propertyList);

+

   }

+

}

+ + +

+The class also has a static method that resembles +

+ +

public static FObj.Maker maker()

+

   {

+

     return new PageSequence.Maker();

+

   }

+ +

+A hash 'fobjTable' exists in FOTreeBuilder, and maps the FO names (such as +'fo:table') to object references to the appropriate factories +(such as Table.Maker). +

+ +

+Properties (recall that FO's have properties, areas have traits, and XML +nodes have attributes) are also a concern of FOTreeBuilder. It +accomplishes this by using PropertyListBuilder, which contains a hash of +property names and their respective makers. The base class for +properties is Property, and the property makers extend +Property.Maker. +

+
+ + +

+FOTreeBuilder calls format() on the root FO, passing +it the AreaTree +reference. In turn, Root calls format() on each +PageSequence, passing it +the AreaTree reference. +

+ +

+The PageSequence format() method does the following things: +

+ +
    +
  1. Makes a Page, using PageMasterFactory to produce a +PageMaster, and +using makePage() in the latter class. In the simplest picture, +a Page has +5 areas represented by AreaContainers;
  2. + +
  3. Handles layout for StaticContent objects in the 'before' and 'after' +regions, if set. This uses the layout() method in +StaticContent;
  4. + +
  5. If a page break is not forced, it will continue to layout the flow into +the body area (AreaContainer) of the current page;
  6. + +
  7. It continues with (1) when layout into the current page is done, but +the flow is not empty.
  8. +
+
+ + + +

+FO's that represent actual areas, starting with Flow and +StaticContent, have +a layout() method, with the following signature: +

+ +

+ + public Status layout(Area area) + +

+ +

+The fundamental role of the layout() method is to manage the layout of +children and/or to generate new areas. +

+ +

+Example: the layout() method for Flow generates no new areas - it manages the +layout of the flow children. +

+ +

+Example: the layout() method for Block +generates a new BlockArea in and of +itself, and also manages the layout of the block children, which are added +to the BlockArea before that is itself added to its parent +Area. +

+ +

+Layout() methods are subject to the general constraint that possibly not +all of their children can be accommodated, and they report back accordingly +with an appropriate Status. +

+
+ + + +

+This is a separate process. The render() method in +Driver is invoked (say, +by CommandLine) with the laid-out AreaTree and a +PrintWriter as arguments. +This actually calls the render() method in a specific implementation of +the Renderer interface, typically PDFRenderer or +AWTRenderer. +

+ +

+At the highest level PDFRenderer, for example, begins by rendering each +Page. The render() method in Page (as is the case for other areas), +invokes a particular method in the renderer of choice, e.g. +renderPage(). +NOTE: this system is bypassed for Page, incidentally. +

+ +

+Rendering will not be discussed further in this document, as most of our +current effort must concentrate on layout. Section 4.12 in the XSL WD +discusses some issues applicable to rendering. +

+
+ + + +

+FOP supports some svg rendering. SVG is supported as an instream-foreign-object +embedded in an FO document. FOP also supports rendering of an external SVG image. +

+ +

+Since the intream object that contains the SVG returns a single fo area then +the construction of the SVG document is handled differently. The SVG is created +by calling the createGraphic() on each SVG element. The element is then +responsible for loading the necessary information and child elements and creating +the corresponding SVG DOM element. When the FO tree is being layed out the +SVG tree is turned into the SVG DOM document which is stored for later rendering. +

+ +

+The SVG document is then held as a DOM tree which is then rendered by going through +the elements of the tree and rendering then in turn. +

+ +

+For more information see the SVG documentation. +

+
+ diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/bugs.xml b/fop-0_14_0_regions/docs/xml-docs/fop/bugs.xml new file mode 100644 index 000000000..388996391 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/bugs.xml @@ -0,0 +1,29 @@ + + + + + + + + +

Please report bugs to the discussion list fop-dev@xml.apache.org and put + the word [BUG] in the subject line.

+

Please make sure, before you report a bug, that it is not mentioned in the FAQ or + in the list of open bugs in the file STATUS in the start directory of the Fop + distribution.

+

Please make your description as concise as possible and send an example fo + file with your report, which just demonstrates the problem. Thanks for your help!

+
+ +
    +
  • Colour not continued onto subsequent pages, if coloured block goes over page.
  • +
  • SVG linearGradients don't appear the same as in other SVG Viewers
  • +
  • colour not continued onto subsequent pages if coloured block goes over page
  • +
  • no SVG support in AWTCommandLine
  • +
  • keep-next doesn't work and doubles the text lines which should be moved to the next page
  • +
  • lists containing list do not keep their indentation correctly over a page boundary
  • +
+
+
+ + diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/compiling.xml b/fop-0_14_0_regions/docs/xml-docs/fop/compiling.xml new file mode 100644 index 000000000..108b05575 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/compiling.xml @@ -0,0 +1,68 @@ + + + + + + + + +

If you use Java 1.1.x you must also seperately include the swing classes, which can + be found at the + Sun website. From Java 1.2 on (aka Java 2) they are part of the standard + distribution. +

+
+ +

An XML parser which supports Sax and DOM like + Xerces-J. + The parser must be in your classpath

+
+ +

Some of the Java source code in FOP is generated from XML using + XSLT. Xalan must be used to generate this code.

+

Xalan is an XSL stylesheet processor written in java. At the moment you + can't use any other processor, because the make process makes use of some + proprietary features of Xalan which allow to write output in more + then one document. You can find Xalan also at + xml.apache.org. You have to use Xalan version 0.19.5 or later. + Xalan.jar must be in your classpath and also the file bsf.jar, which comes with Xalan.

+
+ +

You have to set the enviroment variable JAVA_HOME. It must point to your local JDK + root directory. This is true, even if you use JDK 1.2 or above, which don't need this + setting. It is used by the compilation software.

+
+ +

If you want Fop to use the image library jimi, it should be in your classpath during + compilation. +

+

A CLASSPATH for a complete compilation of Fop could look like this, if all these jar files are in + a directory called jars (example uses windows syntax): +

+

set CLASSPATH=\jars\xalan.jar;\jars\xerces.jar;\jars\bsf.jar;\jars\jimi.jar; +

+
+
+ +

Compilation is started by executing build, either as a batch file on win32 (build.bat) or as a shell script on unix. The compilation uses Ant, + a replacement of make (you can find more information about Ant at + jakarte.apache.org). + build.xml is the replacement of makefile. Look there for further information.

+

A help screen is shown by calling "build usage". +

+
+ +

If you have problems compiling Fop, please try this first: delete the build directory completely and + try a new build from scratch. Check, whether you have all necessary libraries in your classpath: + xerces.jar, xalan.jar, bsf.jar, jimi.jar (optional). If you still have problems, please look at the + page bugs, for further help. +

+
+ + + +

We strongly recommend the use of Codewarrior Java. You will find + a link to more information in the near future. +

+
+
diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/download.xml b/fop-0_14_0_regions/docs/xml-docs/fop/download.xml new file mode 100644 index 000000000..f8efff68e --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/download.xml @@ -0,0 +1,17 @@ + + + + + + + +

You can download the latest release version from the distribution directory.

+

The file contains also the documentation (including some example fo files) and the source.

+

To run FOP from the command line, see Running FOP. If you are + interested in embedding FOP in a Java application of your own, see + Embedding FOP. +

+
+
+ diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/embedding.xml b/fop-0_14_0_regions/docs/xml-docs/fop/embedding.xml new file mode 100644 index 000000000..dbed2a95b --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/embedding.xml @@ -0,0 +1,44 @@ + + + + + + + + +

Instantiate org.apache.fop.apps.Driver. Once this class is + instantiated, methods are called to set the + Renderer to use, the (possibly multiple) ElementMapping(s) to + use and the PrintWriter to use to output the results of the + rendering (where applicable). In the case of the Renderer and + ElementMapping(s), the Driver may be supplied either with the + object itself, or the name of the class, in which case Driver will + instantiate the class itself. The advantage of the latter is it + enables runtime determination of Renderer and ElementMapping(s). +

+

Once the Driver is set up, the buildFOTree method + is called. Depending on whether DOM or SAX is being used, the + invocation of the method is either buildFOTree(Document) or + buildFOTree(Parser, InputSource) respectively. +

+

A third possibility may be used to build the FO Tree, namely + calling getDocumentHandler() and firing the SAX events yourself. +

+

Once the FO Tree is built, the format() and render() methods may be + called in that order. +

+

Here is an example use of Driver from CommandLine.java:

+

Driver driver = new Driver();

+

driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version);

+

driver.addElementMapping("org.apache.fop.fo.StandardElementMapping");

+

driver.addElementMapping("org.apache.fop.svg.SVGElementMapping");

+

driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping");

+

driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping");

+

driver.setWriter(new PrintWriter(new FileWriter(args[1])));

+

driver.buildFOTree(parser, fileInputSource(args[0]));

+

driver.format();

+

driver.render();

+
+
+ + diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/examples.xml b/fop-0_14_0_regions/docs/xml-docs/fop/examples.xml new file mode 100644 index 000000000..33fd84af8 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/examples.xml @@ -0,0 +1,43 @@ + + + + + + +

Examples for the use of xsl:fo can be found in the Fop distribution in + the subdirectory xml-fop/docs/examples/fo. You can start transformation of all fo files into pdf + files by starting xml-fop/docs/examples/runtests. +

+

At the moment the following files are part of the distribution:

+
    +
  • normal.fo - a very simple file showing the use of a 2 level of headings, normal text and a header. +
  • +
  • table.fo - a simple table +
  • +
  • list.fo - a simple list +
  • +
  • images.fo - shows how to embed gif and jpg images into the xsl:fo file using external-graphic. +
  • +
  • border.fo - a not so simple example how to use borders in tables +
  • +
  • extensive.fo - a longer test file containing a lot of different flow objects and properties. + A good candidate to test your bugfix or new Fop code. +
  • +
  • leader.fo - a very simple example of a rule +
  • +
  • Look also into the directory examples/svg. There you find some very extensive svg examples. + Just start makedoc. +
  • +
  • In the directory examples/pagination you find a suite of examples showing the use + of xsl:fo pagination. +
  • +
  • If you are interested in using svg, you may want to look into the + svg test suite, which + must be downloaded separately (ca. 2.1 MB). +
  • +
+

Developers will find the first steps to a test suite for all implemented formatting objects and + properties in xml-fop/docs/bugtests.

+ +
+ diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/faq.xml b/fop-0_14_0_regions/docs/xml-docs/fop/faq.xml new file mode 100644 index 000000000..5449035a4 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/faq.xml @@ -0,0 +1,77 @@ + + + + + + + Q: I can't find the source files for the formatting properties. The directories + where they should be are empty. Where can I find them? +

A: They are generated during the build process. So you should use the build script coming + with Fop at least once to generate these files. +

+
+ + + + + Q: Feature xxx of the XSL Working Draft 27 March 2000 does not work as it should. Why? +

A: First: Only a small subset of formatting objects and properties is + implemented at the moment. Please have a look at the section "Features", + which lists the supported fo and properties. Second: At the moment only + Working Draft 21 Apr 1999 is supported. +

+
+
+ + + Q: When will the latest version of the XSL working draft be supported? +

Basic conformance to the latest XSL working draft is scheduled for fall 2000. +

+
+
+ + + Q: Running FOP I get the following messages or something similar: + "WARNING: Unknown formatting object http://www.w3.org/XSL/Format/1.0^root" + and then a FATAL Error "Root element must be root, not default FO". + +

A: Make sure that you have specified as the namespace for fo the + following string: "http://www.w3.org/1999/XSL/Format". It is analogous + to the xslt namespace "http://www.w3.org/1999/XSL/Transform" +

+
+
+ + + Q: The char ">" is inserted into the page number display like this + "formatting FOs into areas [1] [2] [3>>>>]". Is this a bug? +

A: No, a feature. It simply means that on that page an area + overflowed (ie there was not enough room to fit the text in).

+
+ + + Q: It looks like FOP must be honoring font properties when it shouldn't be? + Example: According to the dtd coming with the xsl-fo spec inline-sequence + shouldn't have any attributes, but FOP doesn't reject them. + + +

A: Font properties are inherited down to individual characters. You can + specify font properties on any formatting object you like and any textual content + will inherit those properties (unless overriden by a closer ancestor). +

+

The dtd coming with the xsl-fo spec isn't correct in this respect. +

+
+
+ + + Q: I need some additional fonts in FOP. How I can set embedding fonts? + + +

A: At present, FOP does not support any fonts other than the built-in fonts + Times, Helvetica, Courier, Symbol and ZapfDingbats. +

+
+
+ + diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/implemented.xml b/fop-0_14_0_regions/docs/xml-docs/fop/implemented.xml new file mode 100644 index 000000000..87170cbfd --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/implemented.xml @@ -0,0 +1,225 @@ + + + + + + + +

The following formatting objects and properties of the xsl-fo + working draft (27 March 2000) are implemented. Please have also a look at the + section on limitations +

+
+ +
    +
  • block
  • +
  • conditional-page-master-reference
  • +
  • display-sequence
  • +
  • external-graphic
  • +
  • flow
  • +
  • inline-sequence
  • +
  • instream-foreign-object
  • +
  • layout-master-set
  • +
  • leader, but see limitations
  • +
  • list-block
  • +
  • list-item
  • +
  • list-item-body
  • +
  • list-item-label
  • +
  • page-number
  • +
  • page-number-citation, see limitations
  • +
  • page-sequence
  • +
  • page-sequence-master
  • +
  • region-after
  • +
  • region-before
  • +
  • region-body
  • +
  • repeatable-page-master-alternatives
  • +
  • repeatable-page-master-reference
  • +
  • root
  • +
  • simple-page-master
  • +
  • simple-link (internal and external)
  • +
  • single-page-master-reference
  • +
  • static-content
  • +
  • table (minimal support)
  • +
  • table-body (minimal support)
  • +
  • table-cell (minimal support)
  • +
  • table-column (minimal support)
  • +
  • table-row (minimal support)
  • +
+
+ + +
    +
  • background-color
  • +
  • blank-or-not-blank
  • +
  • border-after-color
  • +
  • border-after-style
  • +
  • border-after-width
  • +
  • border-before-color
  • +
  • border-before-style
  • +
  • border-before-width
  • +
  • border-bottom
  • +
  • border-bottom-color
  • +
  • border-bottom-style
  • +
  • border-bottom-width
  • +
  • border-color (only one value allowed)
  • +
  • border-end-color
  • +
  • border-end-style
  • +
  • border-end-width
  • +
  • border-left
  • +
  • border-left-color
  • +
  • border-left-style
  • +
  • border-left-width
  • +
  • border-right
  • +
  • border-right-color
  • +
  • border-right-style
  • +
  • border-right-width
  • +
  • border-start-color
  • +
  • border-start-style
  • +
  • border-start-width
  • +
  • border-style
  • +
  • border-top
  • +
  • border-top-color
  • +
  • border-top-style
  • +
  • border-top-width
  • +
  • border-width
  • +
  • bottom
  • +
  • break-after
  • +
  • break-before
  • +
  • color
  • +
  • column-width
  • +
  • end-indent
  • +
  • extent
  • +
  • external-destination
  • +
  • flow-name
  • +
  • font-family
  • +
  • font-size
  • +
  • font-style
  • +
  • font-weight
  • +
  • height
  • +
  • id
  • +
  • initial-page-number
  • +
  • internal-destination
  • +
  • keep-with-next
  • +
  • left
  • +
  • line-height
  • +
  • margin-bottom (only on pages and regions)
  • +
  • margin-left (only on pages and regions)
  • +
  • margin-right (only on pages and regions)
  • +
  • margin-top (only on pages and regions)
  • +
  • master-name
  • +
  • maximum-repeats
  • +
  • odd-or-even
  • +
  • padding (only one value allowed)
  • +
  • padding-after
  • +
  • padding-before
  • +
  • padding-bottom (only in conjunction with background color)
  • +
  • padding-end
  • +
  • padding-left (only in conjunction with background color)
  • +
  • padding-right (only in conjunction with background color)
  • +
  • padding-start
  • +
  • padding-top (only in conjunction with background color)
  • +
  • page-height
  • +
  • page-position
  • +
  • page-width
  • +
  • position (allowed values: "static" (default),"relative", "absolute", fixed )
  • +
  • provisional-distance-between-starts
  • +
  • provisional-label-separation
  • +
  • ref-id
  • +
  • right
  • +
  • rule-thickness
  • +
  • space-after.optimum
  • +
  • space-before.optimum
  • +
  • src
  • +
  • start-indent
  • +
  • text-align
  • +
  • text-align-last
  • +
  • text-indent
  • +
  • top
  • +
  • white-space-treatment
  • +
  • width
  • +
  • wrap-option
  • +
+
+ + +
    +
  • rect
  • +
  • circle
  • +
  • line
  • +
  • text - tref, tspan
  • +
  • path
  • +
  • polygon
  • +
  • ellipse
  • +
  • g
  • +
  • svg (inside)
  • +
  • image
  • +
  • use
  • +
  • defs (including referenced items not in defs element)
  • +
  • linearGradient
  • +
  • radialGradient
  • +
  • stop
  • +
+
+ +
    +
  • style
  • +
  • fill (style)
  • +
  • stroke (style)
  • +
  • stroke-width (style)
  • +
  • stroke-dasharray (style)
  • +
  • stroke-offset (style)
  • +
  • stroke-linecap (style)
  • +
  • stroke-linejoin (style)
  • +
  • stroke-miterlimit (style)
  • +
  • stop-color (style)
  • +
  • color (style)
  • +
  • font (style)
  • +
  • font-size (style)
  • +
  • font-family (style)
  • +
  • font-weight (style)
  • +
  • font-style (style)
  • +
  • x
  • +
  • y
  • +
  • x1
  • +
  • y1
  • +
  • x2
  • +
  • y2
  • +
  • r
  • +
  • cx
  • +
  • cy
  • +
  • x (list)
  • +
  • y (list)
  • +
  • dx
  • +
  • dy
  • +
  • transform
  • +
  • rotate (transform)
  • +
  • translate (transform)
  • +
  • scale (transform)
  • +
  • matrix (transform)
  • +
  • skewX (transform)
  • +
  • skewY (transform)
  • +
  • d
  • +
  • id
  • +
  • width
  • +
  • height
  • +
  • xlink:href
  • +
  • refX
  • +
  • refY
  • +
  • offset
  • +
  • points
  • +
  • fx
  • +
  • fy
  • +
+
+
+ + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/involved.xml b/fop-0_14_0_regions/docs/xml-docs/fop/involved.xml new file mode 100644 index 000000000..9ce38e573 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/involved.xml @@ -0,0 +1,55 @@ + + + + + + + + + +

The Status file contains the list of features people are working on at the moment. + And an outline what steps are next.

+
+ +

You can subscribe to fop-dev@xml.apache.org by sending an email + to fop-dev-subscribe@xml.apache.org

+

Sending bug reports and feature requests to the list is a welcome and important contribution to + developing Fop.

+

Read also the archive + of the discussion list fop-dev to get an idea of the issues being discussed.

+
+ +

Between releases the newest code can be accessed via cvs. To do this you need to install a cvs + client on your computer if it is not already there. An explanation how to connect to the + Fop source repository can be found at http://xml.apache.org/cvs.html. + An introduction into cvs and the cvs manual can be found in the + reference library.

+

All changes to the code repository are annonced in a special discussion group. You can subscribe + to fop-cvs@xml.apache.org by sending an email to + fop-cvs-subscribe@xml.apache.org. If you want to contribute to the development of Fop you should subscribe, + because it is important that you follow changes being made.

+
+ +

If you want to contribute code (p.e. a bugfix) or documentation (p.e. an additional example), please do the following:

+

1) Make sure your code doesn't break the existing one and that Fop still compiles.

+

2) Create a file which shows the differences to the existing code.

+

3) Send this file to fop-dev@xml.apache.org.

+

One of the committers will test your code and commit it to the code repository.

+

BTW: The Apache project knows different roles for contributors, namely 'users', 'developers', 'committers' and the 'Project + Management Committee' (An explanation of these roles can be found here).

+
+ +

At the moment Fop is mainly a tools to render XSL:FO files to pdf. Therefore if you want to contribute to Fop you should become + familiar with these standards. You can find their internet addresses on our website.

+
+ +

A bird's eye view on the way Fop operates can be found in the document FOP Mechanics

+

If you want to extend the functionality of FOP by adding new formatting objects, you should do the following:

+

1. FO Object: Write a class which contains the description of your formatting object and put it into the package fop.fo.flow, fop.fo.pagination (if it is a property it goes to fop.fo.properties. The classes in this package are generated via an xslt stylesheet located in codegen/properties.xml)

+

2. Element Mapping: Add it to the list in fop.fo.StandardElementMapping (if it is a property you need to add it to fop.fo.PropertyListBuilder)

+

3. Area: Either your need can be fulfilled within one of the existing classes in fop.layout, then just add the code to handle the new fo/property or you must write a new one.

+

4. Renderer: Choose the renderer you are interested in. If you worked on an existing layout class you must add code to handle the new features to the already existing area specific method in the renderer class. Otherwise you have to add a new method.

+
+
diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/license.xml b/fop-0_14_0_regions/docs/xml-docs/fop/license.xml new file mode 100644 index 000000000..2bb39174f --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/license.xml @@ -0,0 +1,57 @@ + + + + + + + +

Copyright (C) 1999 The Apache Software Foundation. All rights reserved.

+

Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met:

+

1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +

+ +

2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +

+ +

3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. +

+ +

4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. +

+ +

5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. +

+

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

+ +

+ This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber <jtauber@jtauber.com>. For more information on the Apache + Software Foundation, please see http://www.apache.org/. +

+
+
+ diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/limitations.xml b/fop-0_14_0_regions/docs/xml-docs/fop/limitations.xml new file mode 100644 index 000000000..d4a88e966 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/limitations.xml @@ -0,0 +1,87 @@ + + + + + + + +

FOP implements the fo objects and properties listed + in features, sometimes it does so only in a limited way. +

+ + +

fo:leader is only supported in a very limited way: you can use it to draw simple rules. + Only the property value leader-pattern="rule" is supported. leader-length can be set, + but the value is not used. You should wrap leader into a block element. +

+
+ + +

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. +

+
+ + +

The fo working draft allows describes two ways to markup lists.The list-block must have as + children either: 1) pairs of fo:list-item-label and fo:list-item-body formatting objects, or + 2) fo:list-item formatting objects.

+

At the moment FOP only implements the second way. Therefore a list has a basic structure like this:

+

<fo:list-block>

+

<fo:list-item>

+

<fo:list-item-label><fo:block></fo:block></fo:list-item-label>

+

<fo:list-item-body><fo:block></fo:block></fo:list-item-body>

+

</fo:list-item>

+

</fo:list-block>

+
+ +

Padding works in conjunction with indents and spaces. It is only implemented + for blocks. At the moment padding can't be used to make extra space (indents+spaces + must be used), but only to control how much the background-color extends beyond + the content rectangle. +

+
+ +

There two limitations for tables: 1) FOP needs you to explicitly specify column widths + 2) Cells have to contain block-level FOs. They can't contain straight character data. +

+

A working basic example of a table looks like this:

+

<fo:table>

+

 <fo:table-column column-width="150pt"/>

+

 <fo:table-column column-width="150pt"/>

+

 <fo:table-body font-size="10pt" font-family="sans-serif">

+

  <fo:table-row>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

  </fo:table-row>

+

  <fo:table-row>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

  </fo:table-row>

+

  <fo:table-row>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

  </fo:table-row>

+

 </fo:table-body>

+

</fo:table>

+
+ + + + +
diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/readme.xml b/fop-0_14_0_regions/docs/xml-docs/fop/readme.xml new file mode 100644 index 000000000..9964ed4dc --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/readme.xml @@ -0,0 +1,62 @@ + + + + + + + + + + + +

FOP is the world's first print formatter driven by XSL formatting + objects. It is a Java application that reads a formatting object + tree and then turns it into a PDF document. The formatting object + tree, can be in the form of an XML document (output by an XSLT engine + like XT or Xalan) or can be passed in memory as a DOM Document or (in + the case of XT) SAX events. +

+

FOP is part of Apache's XML project. The homepage of FOP is + http://xml.apache.org/fop. A list + of the committers to this project and the tasks they are working on can be found + in the file Status +

+
+ + +

The goals of the Apache XML FOP Project are to deliver an XSL FO->PDF formatter that is compliant to at least the Basic + conformance level described in the 27 March 2000 XSL WD, and that complies with the 11 March 1999 Portable Document + Format Specification (Version 1.3) from Adobe Systems. +

+ +

Conformance to the XML 1.0 Recommendation, XSLT 1.0 Recommendation and the XML Namespaces Recommendation is + understood. Other relevant documents, such as the XPath and XLink Working Drafts, are referenced as necessary. The FOP + Project will attempt to use the latest version of evolving specifications. +

+ +

Secondary goals of the FOP Project (also, "FOP") are desirable requirements that also have a high priority. +

+ +

One secondary goal of the FOP Project is to deliver a follow-on version of the formatter that is compliant to the Extended + conformance level described in the XSL FO. Any formatting objects that cannot be translated into PDF will be explicitly + identified as such. +

+ +

Another secondary goal is to promote the conversion of SVG into PDF. The most natural mechanism for doing so is within + fo:instream-foreign-object FO's. The powerful graphics offered by both SVG and PDF are a natural fit, and it is + desirable that FOP natively supports an SVG content processor for the fo:instream-foreign-object. +

+ +

A final secondary goal is the continued refinement of the FOP design and implementation. In particular, maintaining the + separation between formatting and rendering, continuing to support the AWT Viewer renderer (backend), and providing + new renderers, are all desirable objectives. +

+
+ +
+ diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/running.xml b/fop-0_14_0_regions/docs/xml-docs/fop/running.xml new file mode 100644 index 000000000..acdf11fe8 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/running.xml @@ -0,0 +1,106 @@ + + + + + + + +

Following software must be installed:

+

a) Java 1.1.x or later (If you want to use AWTCommandLine, you need Swing)

+

b) An XML parser which supports SAX and DOM like + Xerces-J. + (Xerces is the default xml parser) +

+

c) Fop supports SVG (see Features for further information) and + needs the w3c.jar library. This library comes with Fop (xml-fop/lib) and must + be included in your classpath. The jar file w3c.jar is the compiled classes for the + java svg bindings with some other DOM classes that are used by the SVG DOM bindings. + The source for the svg java binding classes can be found at - + SVG Java bindings, currently they correspond to the CR-SVG-20000802 specification document. + The other required files can be found at W3C DOM Java binding. +

+

d) Optional: Fop supports the jimi library for image processing, if it is in your classpath + when you build Fop. +

+
+ +

There are two ways to run FOP from the command line.

+

a) Batch processing formatting objects (fo) files:

+

java org.apache.fop.apps.CommandLine fo-file pdf-file

+

b) Batch processing xml files (includes production of the fo-files):

+

java org.apache.fop.apps.XalanCommandLine xml-file xsl-file pdf-file

+

c) Previewing the fo-file:

+

java org.apache.fop.apps.AWTCommandLine fo-file

+

Each method uses next to the fop classes other packages. The following describes + each method in detail.

+ +

One is to first use an XSLT engine to produce the formatting object tree as an + XML document and then running the class org.apache.fop.apps.CommandLine with the + formatting object file name and PDF filename as arguments. You need to set classpath + and set the used sax parser according to your enviroment +

+

Classpath settings: You will need to include FOP and your XML Parser + in your classpath and so you might invoke FOP, if Xerces-J is your xml parser: +

+

java -cp fop.jar;xerces.jar;w3c.jar

+

org.apache.fop.apps.CommandLine fo-file pdf-file

+

If you want to use another sax parser, you will need to set the property + org.xml.sax.parser to any other SAX Parser class to use. The following example shows + the command line, if you use XP from James Clark: +

+

java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver

+

-cp fop.jar;xerces.jar;xp.jar;w3c.jar

+

org.apache.fop.apps.CommandLine fo-file pdf-file

+

Note: The xerces jar file must be included, because xp has no dom support.

+
+- +

Rather than performing transformation with an XSLT before invoking FOP, it is + possible, if you use Xalan as your XSLT engine, to just call FOP and have it call + Xalan for you. To do this, run the class org.apache.fop.apps.XalanCommandLine with the + source XML file name, XSL file name and PDF file name as arguments. You will + need to include Xalan in your classpath and so you might invoke +

+

java -cp fop.jar;xalan.jar;xerces.jar;w3c.jar

+

org.apache.fop.apps.XalanCommandLine xml-file xsl-file pdf-file

+

Again, if your SAX Parser is other than Xerces, you will need to set the property + org.xml.sax.parser to the SAX Parser class to use. +

+
+ +

If you already produced the FO file, you can preview the results of your + transformation without using any pdf viewer by invoking FOP with the viewer + application. You will need to include FOP and your XML Parser in your classpath +

+

java -cp fop.jar;xerces.jar;w3c.jar

+

org.apache.fop.apps.AWTCommandLine fo-file

+

The viewer uses the swing classes.

+
+
+ + +

Ensure that you have a recent MRJ, and that you have downloaded and + unpacked the XP and SAX distributions. The xp.jar and sax.jar files work + as is on MacOS. +

+

Drag the FOP jarfile onto the JBindery icon. When the first dialog + appears, type "org.apache.fop.apps.CommandLine" in the "Class name" field. + Using UNIX syntax, type the names of the input formatting-object file and + the output PDF in the "Optional parameters" field. +

+

Click on the Classpath icon. To add the xp.jar and sax.jar files, click + the "Add .zip file" button, navigate to the file in question, and click + Open. +

+

Once both are added (the FOP jarfile will already be in the list), click + Run. A "stdout" window will appear and display FOP runtime messages. +

+
+ +

If you have problems running FOP, please have a look at the + FOP FAQ. If you don't find a solution there, + you can ask for help on the list fop-dev@xml.apache.org. Maybe it is a bug and + maybe somebody is already working on it. +

+
+
+ diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/specs.xml b/fop-0_14_0_regions/docs/xml-docs/fop/specs.xml new file mode 100644 index 000000000..40f7ac5d8 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/specs.xml @@ -0,0 +1,23 @@ + + + + + + +
    +
  • Latest XSL-FO Working Draft (27 March 2000)
  • +
  • A dtd for the XSL-FO Working Draft (27 March 2000) provided by N. Grigoriev from RenderX
  • +
  • XSL-FO Working Draft 21 Apr 1999
  • +
  • Latest SVG Working draft
  • +
  • Supported SVG Candidate Recommendation
  • +
  • XML Recommendation
  • +
  • XSLT Recommendation
  • +
  • Portable Document Format (PDF) 1.3 Reference Manual
  • +
  • Simple API for XML (SAX)
  • +
  • Document Object Model (DOM)
  • +
  • Namespaces in XML Recommendation
  • +
  • Java JDK 1.1 Documentation
  • +
+
+ + diff --git a/fop-0_14_0_regions/docs/xml-docs/makedoc.bat b/fop-0_14_0_regions/docs/xml-docs/makedoc.bat new file mode 100755 index 000000000..5f370ddec --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/makedoc.bat @@ -0,0 +1,25 @@ +@echo off + +echo Building Fop documentation (pdf) +echo ---------------- + +if "%JAVA_HOME%" == "" goto error + +set LOCALCLASSPATH=%JAVA_HOME%\lib\tools.jar;%JAVA_HOME%\lib\classes.zip;..\..\lib\ant.jar;..\..\lib\xml.jar;..\..\lib\w3c.jar;..\..\lib;..\..\build\fop.jar +set ANT_HOME=.\lib + + +%JAVA_HOME%\bin\java.exe -Dant.home=%ANT_HOME% -classpath %LOCALCLASSPATH%;%CLASSPATH% org.apache.tools.ant.Main %1 %2 %3 %4 %5 + +goto end + +:error + +echo ERROR: JAVA_HOME not found in your environment. +echo Please, set the JAVA_HOME variable in your environment to match the +echo location of the Java Virtual Machine you want to use. + +:end + +rem set LOCALCLASSPATH= + diff --git a/fop-0_14_0_regions/docs/xml-docs/makedoc.sh b/fop-0_14_0_regions/docs/xml-docs/makedoc.sh new file mode 100755 index 000000000..340b0eb44 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/makedoc.sh @@ -0,0 +1,25 @@ +#!/bin/sh +#This file should be executable +echo +echo "Converting Fop's xml documentation into a pdf file" +echo "----------------" +echo + +if [ "$JAVA_HOME" = "" ] ; then + echo "ERROR: JAVA_HOME not found in your environment." + echo + echo "Please, set the JAVA_HOME variable in your environment to match the" + echo "location of the Java Virtual Machine you want to use." + exit 1 +fi + +LOCALCLASSPATH=$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/classes.zip:../../lib/ant.jar:../../lib/xml.jar:../../lib/w3c.jar:../../lib:../../build/fop.jar +ANT_HOME=../../lib + +echo Building with classpath $CLASSPATH:$LOCALCLASSPATH +echo + +echo Starting Ant... +echo + +$JAVA_HOME/bin/java -Dant.home=$ANT_HOME -classpath "$LOCALCLASSPATH:$CLASSPATH" org.apache.tools.ant.Main $* diff --git a/fop-0_14_0_regions/docs/xml-docs/readme b/fop-0_14_0_regions/docs/xml-docs/readme new file mode 100644 index 000000000..2b860db0d --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/readme @@ -0,0 +1,10 @@ +Fop documentation (xml version) + +The files in these directory contain the Fop documentation as xml files. +The directory xml-docs/fop is a mirror of the files in the cvs repository +modul 'xml-site' /sources/fop. These files are used to create the html documentation +on xml.apache.org. + +With makedoc.bat (win32) or makedoc.sh (unix) you can create a pdf file containing +the complete Fop documentation. These scripts use ant. If you have any trouble running them, +please look into build.xml in the root directory of this distribution. \ No newline at end of file diff --git a/fop-0_14_0_regions/docs/xml-docs/xml2pdf.xsl b/fop-0_14_0_regions/docs/xml-docs/xml2pdf.xsl new file mode 100644 index 000000000..1135ccfb2 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/xml2pdf.xsl @@ -0,0 +1,322 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + FOP documentation - p. + + + + + + + + FOP - an xsl:fo renderer + + + + + + + Content + + + + + + + + + + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + · + + + + + + + + + + + + + + + + ) + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/xml-docs/xml2xml.xsl b/fop-0_14_0_regions/docs/xml-docs/xml2xml.xsl new file mode 100644 index 000000000..69333c99a --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/xml2xml.xsl @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/lib/Compare.class b/fop-0_14_0_regions/lib/Compare.class new file mode 100644 index 0000000000000000000000000000000000000000..714ffface1a98cacca8586fc622b88a1e4255d20 GIT binary patch literal 5086 zcmb_g33yc175?vJ!aT+ia7=)(=zzlYxf} zyxG9p4U8Fh+`#({e89l(19)oy&j#?-0KOK$*8})Q0N)JYTLC;5z_$bVP5|Ex;Clgl zKY$+u@WTLp6u>Woh~TOq&KFXT%|XmXcMx^BI*7B;6T}>B31Xg*g+ijZW-4amS|Kl! z8CylLO~`dY@=PJUB1i?X0O_eX2bNgrlNtRY9SGt)WQ1HVg6(27E2BYC$;qoNqam4l zLl9@dkyuFTkQaeFmCD27V~4!%6z98wI9JF5>=qw;LO6m$LT(juyO383xkJc3LS7TX zJMlyaCxkqSSBLNv?hr?N@Cm#(gr{*!2%o}u2%iz@XK`N$ zpTlh-d>$_k;R_=DF%E|CQydH7XTtl1jD96^e=UB0g99P_7LSDR2O)o!*T2ZSYdi3ZCm+V)QwoXGI@7_f-g!#RrQNnHC?YzQ@^O~ zdUJ=F$eOwS#3t9tFMT)L4 zMN2ocl5LM^v#)J7os2A~u&Qu-N7pGE5!_@CJ1I-np)j}0%x{kr0oNEQ?5GF@jT5Dg zV>`2A)&^;@oVcX8U9%ey8^g1*RYr(K29 z2h98i+p%=QXhmgcwS;;eG8u+lm9eQhSD!6B6()fkV=YQs7zR^O`C5TZ!l6>);fi4v znHA`);8tLBBDZK^hPF^~U?^0uytFFJENgizZ!IV5?#{c`V9}4Z*frqTJH5)Q(H170 znk+cYF12lix-w%zNfez`6a*8-ME46A0y%4^w}l~&B&T}!n3Wt)YMmx3+1YeKiK7ao zb8M$SVGfz80W0C!b~c|db1oB>$)-zH&wSd$#7JOB4&!W&rv;0i_zstv=Gu&-3w1ZO z9IvZ0!-dgeY3z(AZ?Wr}EN6=HmMifHRtch7zIGNHaD}ZIM(~DgUPWAH~I0k7B83^4(-j<5vL?h976r z?KC{bHy?kB*Vf|n1mDC!b!-f=^3*As=}ifF3ivDDr48^_OAdXj1g7vma3D60x}I^& z?TL?}aSV%3U|osTP-L}KHB~M1`H{S2RZW7%Tj!a39P2A`S>y(rqm~21K#Fg z3w0zvHStk2H}H4gVQ=-aTJpVhcsXoE2LV`$NA18JYAtQ(}jB2%6e!T zL9Do0XO=TgiAF_rajVx?9b@Jv(H0C9F;S`QFIUzQ))a6hYrB&jViWhaixG9A0avkh zH?w-X*$b{F?Pjg^;96W$QGHuW)wi`&eOpV__dMR4Fw!Dyi9PBoyG16MZc%;M` zcZ{4y_PNFELQx%K%=1}_F$p*#n69naJIGPz?paK$nIHbTnoi2E6|bm3%m_2XDQj`MrQK$u;=As(L2 zvW literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/lib/Compare.java b/fop-0_14_0_regions/lib/Compare.java new file mode 100644 index 000000000..eb787d775 --- /dev/null +++ b/fop-0_14_0_regions/lib/Compare.java @@ -0,0 +1,198 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + */ + +import java.util.*; +import java.io.*; +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; +import java.text.DateFormat; + + /** This class is an extension of Ant, a script utility from + * jakarta.apache.org. + * It provides methods to compare two files + */ + +public class Compare { + private String referenceDirectory, testDirectory; + private String [] filenameList; + private String filenames; + private static boolean IDENTICAL_FILES = true; + private static boolean NOTIDENTICAL_FILES = false; + private BufferedInputStream oldfileInput; + private BufferedInputStream newfileInput; + + //sets directory for test files + public void setTestDirectory(String testDirectory) { + if (!(testDirectory.endsWith("/") | testDirectory.endsWith("\\"))) { + testDirectory += File.separator; + } + this.testDirectory = testDirectory; + } + + //sets directory for reference files + public void setReferenceDirectory(String referenceDirectory) { + if (!(referenceDirectory.endsWith("/") | referenceDirectory.endsWith("\\"))) { + referenceDirectory += File.separator; + } + this.referenceDirectory = referenceDirectory; + } + + public void setFilenames (String filenames) { + StringTokenizer tokens = new StringTokenizer(filenames,","); + Vector filenameListTmp = new Vector(20); + while (tokens.hasMoreTokens()) { + filenameListTmp.add(tokens.nextToken()); + } + filenameList = new String [filenameListTmp.size()] ; + filenameListTmp.copyInto((String[]) filenameList); + } + + private boolean compareBytes (File oldFile, File newFile) { + try { + oldfileInput = new BufferedInputStream(new FileInputStream(oldFile)); + newfileInput = new BufferedInputStream(new FileInputStream(newFile)); + int charactO = 0; + int charactN = 0; + boolean identical = true; + + while (identical & (charactO != -1)) { + if (charactO == charactN) { + charactO = oldfileInput.read(); + charactN = newfileInput.read(); + } else { + return NOTIDENTICAL_FILES; + } + } + return IDENTICAL_FILES; + } catch (IOException io) { + System.err.println("Task Compare - Error: \n" + io.toString()); + } + return NOTIDENTICAL_FILES; + } + + private boolean compareFileSize(File oldFile, File newFile) { + if (oldFile.length() != newFile.length()) { + return NOTIDENTICAL_FILES; + } else { + return IDENTICAL_FILES; + } + } //end: compareBytes + + private boolean filesExist (File oldFile, File newFile) { + if (!oldFile.exists()) { + System.err.println("Task Compare - ERROR: File " + + referenceDirectory + oldFile.getName() + + " doesn't exist!"); + return false; + } else if (!newFile.exists()) { + System.err.println("Task Compare - ERROR: File " + + testDirectory + newFile.getName() + " doesn't exist!"); + return false; + } else { + return true; + } + } + + public void writeHeader (PrintWriter results) { + String dateTime = DateFormat.getDateTimeInstance(DateFormat.MEDIUM,DateFormat.MEDIUM).format(new Date()); + results.println("Test Results\n"); + results.println("

Compare Results
"); + results.println("created " + dateTime + "

"); + results.println("" + + ""); + + + } + + //main method of task compare + public void execute () throws BuildException { + boolean identical = false; + File oldFile; + File newFile; + try { + PrintWriter results = new PrintWriter (new FileWriter("results.html"),true); + this.writeHeader(results); + for (int i = 0; i < filenameList.length; i++) { + oldFile = new File (referenceDirectory + filenameList[i]); + newFile = new File (testDirectory + filenameList[i]); + if (filesExist(oldFile, newFile)) { + identical = compareFileSize(oldFile, newFile); + if (identical) { + identical = compareBytes(oldFile,newFile); + } + if (!identical) { + System.out.println("Task Compare: \nFiles " + referenceDirectory + + oldFile.getName()+ " - " + testDirectory + + newFile.getName() + " are *not* identical."); + results.println(""); + } else { + results.println(""); + } + } + } + results.println("
reference filetest fileidentical?
" + + oldFile.getName() + " " + + newFile.getName() +"" + + " No
" + + oldFile.getName() + " " + + newFile.getName() + "" + + " Yes
"); + } catch (IOException ioe) { + System.err.println("ERROR: " + ioe); + } + } //end: execute() +} + diff --git a/fop-0_14_0_regions/lib/CompileXMLFiles.class b/fop-0_14_0_regions/lib/CompileXMLFiles.class new file mode 100644 index 0000000000000000000000000000000000000000..a0ce839d25615cd9d0e5f9285e9f4451f630dd94 GIT binary patch literal 7056 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/lib/CompileXMLFiles.java b/fop-0_14_0_regions/lib/CompileXMLFiles.java new file mode 100644 index 000000000..714b228f4 --- /dev/null +++ b/fop-0_14_0_regions/lib/CompileXMLFiles.java @@ -0,0 +1,294 @@ +/* + * The Apache Software License, Version 1.1 + * + * Copyright (c) 1999 The Apache Software Foundation. All rights + * reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in + * the documentation and/or other materials provided with the + * distribution. + * + * 3. The end-user documentation included with the redistribution, if + * any, must include the following acknowlegement: + * "This product includes software developed by the + * Apache Software Foundation (http://www.apache.org/)." + * Alternately, this acknowlegement may appear in the software itself, + * if and wherever such third-party acknowlegements normally appear. + * + * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software + * Foundation" must not be used to endorse or promote products derived + * from this software without prior written permission. For written + * permission, please contact apache@apache.org. + * + * 5. Products derived from this software may not be called "Apache" + * nor may "Apache" appear in their names without prior written + * permission of the Apache Group. + * + * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR + * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF + * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT + * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * ==================================================================== + * + * This software consists of voluntary contributions made by many + * individuals on behalf of the Apache Software Foundation. For more + * information on the Apache Software Foundation, please see + * . + * + * + */ + + /** This class is an extension of Ant, a script utility from + jakarta.apache.org. + It takes a couple of xml files conforming to the xml-site dtd and + writes them all into one xml file, deleting any reference to + the proprietary protocol sbk. The configFile determines what files + are read in what sequence. + */ +// Ant +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; + + +// SAX +import org.xml.sax.Parser; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; +import org.xml.sax.Locator; +import org.xml.sax.AttributeList; + +// Java +import java.io.*; +import java.util.*; +import java.net.URL; + +public class CompileXMLFiles extends Task + implements org.xml.sax.EntityResolver, + org.xml.sax.DTDHandler, + org.xml.sax.DocumentHandler, + org.xml.sax.ErrorHandler { + private String configFile, outFile; + private String [] filenameList; + private String filenames; + private ArrayList files = new ArrayList(); + + //sets name of configuration file, which must + //be an xml file conforming to the book.dtd used by xml-site + public void setConfigFile(String configFile) { + this.configFile = configFile; + } + + public void setOutFile(String outFile) { + this.outFile = outFile; + } + + + //main method of this task + public void execute () throws BuildException { + boolean errors = false; + + if (!(new File(configFile).exists())) { + errors = true; + System.err.println("Task CompileXMLFiles - ERROR: config file " + configFile + " is missing."); + } + + Parser parser = createParser(); + + if (parser == null) { + System.err.println("Task CompileXMLFiles - ERROR: Unable to create SAX parser"); + errors = true; + } + parser.setDocumentHandler(this); + try { + parser.parse(CompileXMLFiles.fileInputSource(configFile)); + } catch (SAXException e) { + System.out.println(e); + } catch (IOException ioe) { + System.out.println(ioe); + } + } //end: execute() + + + /*the following methods belong to the sax parser and implement the Document Handler*/ + public InputSource resolveEntity (String publicId, String systemId) + throws SAXException + { + return null; + } + + public void notationDecl (String name, String publicId, String systemId) + { + // no op + } + + public void unparsedEntityDecl (String name, String publicId, + String systemId, String notationName) + { + // no op + } + + public void setDocumentLocator (Locator locator) + { + // no op + } + + public void startDocument () + throws SAXException + { + // no op + } + + /* After the cnfiguration file has been parsed all files which + have been collected in the ArrayList files are concatinated + and written to a new (temporary) file */ + public void endDocument () + throws SAXException + { + String line, filename; + BufferedReader in; + Iterator iterator = files.iterator(); + try { + BufferedWriter out = + new BufferedWriter (new FileWriter("compileXMLFiles-tmp.xml")); + out.write("\n" + + "\n" + + "]>\n"); + while (iterator.hasNext()) { + filename = (String) iterator.next(); + in = new BufferedReader(new FileReader(filename)); + while ((line = in.readLine()) != null) { + //kill the lines pointing to the sbk protocol and the xml declaration + if (line.indexOf(""); + out.close(); + } catch (Exception e) { + System.out.println(e); + } + + } + + public void startElement (String name, AttributeList atts) + throws SAXException { + String id, label, source; + if (name.equals("document") || name.equals("entry")) { + source = atts.getValue("source"); + files.add(source); + } + } + public void endElement (String name) + throws SAXException + { + // no op + } + + public void characters (char ch[], int start, int length) + throws SAXException + { + // no op + } + + public void ignorableWhitespace (char ch[], int start, int length) + throws SAXException + { + // no op + } + public void processingInstruction (String target, String data) + throws SAXException + { + // no op + } + + public void warning (SAXParseException e) + throws SAXException + { + // no op + } + public void error (SAXParseException e) + throws SAXException + { + // no op + } + + public void fatalError (SAXParseException e) + throws SAXException + { + throw e; + } + + /* ------------------------*/ + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static Parser createParser() { + String parserClassName = System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + System.err.println("using SAX parser " + parserClassName); + + try { + return (Parser) Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + System.err.println("Could not find " + parserClassName); + } catch (InstantiationException e) { + System.err.println("Could not instantiate " + parserClassName); + } catch (IllegalAccessException e) { + System.err.println("Could not access " + parserClassName); + } catch (ClassCastException e) { + System.err.println(parserClassName + " is not a SAX driver"); + } + return null; + } + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, path).toString()); + } catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } + +} + diff --git a/fop-0_14_0_regions/lib/Fop.class b/fop-0_14_0_regions/lib/Fop.class new file mode 100644 index 0000000000000000000000000000000000000000..34a0f1011693378f09b034ebb44c15dc520ac197 GIT binary patch literal 4216 zcma)933n6M75)Yb&md0%h<)t<0gSPv5}LLlKxzvNF19hYSxiWiu{4rJlOif*&e) zN5M}O{7k{m75qZMFBSYs!TSpSDdTY&Kaz1$#wi)6WxOckB^fWvctysmGS0|2E8{g8 zugf?m;|&>a%6Lo0uVws3#&2c(PR8$L{6WUMVJyQnVVX#?5PQOyk88tNAjo1t>IGRP zNFzQaaMuZPy%6YP))&TdB*U18R2Xp>LP0u=703u)|0I%Z7$3r30lq;G(hWk|f9bZuK53%B3_?#eLk}x%# zw9G-ncC%(iOJ{S2CSkgkbu`m*HC^j&+NGuJECCWGX#-iuAuc8%q`4N6HT5f6iLYPL zwpSn2<2l{T#JBeCHInXCmeWJP`RNuNHLDM);$?SUHrmPk3yEOIyu+!R@vRcG937Gpga~hUHcG zfjCwyCi2Sv3t4^b%qnYlizuwFzepOK#||Dvtg2m`HM8z|#&=!yzp#V_)g|k~J-TxP zvo@5lQU+5$VHI*IKhcv(!*M8@JjP3B%@jE^$2eKjadp$p>aM7gD>mA;Woubea}3uj zpF&>C>$YRqTH4Uvf^BG~K43U`J!wSqwvo;b8IFYT#-XHc_(Ehfp<1)k)8D>gCU0)%aOSNq6 zu??QGHrcP+O_Zy?m7SieCCG+|L(UYlAtPCE1=bj%D*89X373RKXOnQL7-Eh=V|CYJ zOPeehffVD)wB=*vv}JcNd>%_Uljw}$HuX7Hj(c?KZa>37PCGM4&k$F~hssHO(GLIU z^i;p==GVkU&x?sd6@9OqBTl?plBixkW$$Y7437jK{hq}(R$&JE8;$h1UK8^gk%al< zI0@ZxM{`huHcs4Oxh+<~Oa&kTonF#c_V#uO-~y^zb2%fU=bF62x(H;noR}T~$doaI z{CA0j0LyPntjjS}us@!U-S4=@zt*>kDZ40ZjQt{BuC~o| zY)%|m*jL%awXB>IXNQhAi^dU%oNcn_~R{-6yk13S_?_sPD#JQrv)4(juRV7_{cF%Bz(OL z0(zi`yQvSAX7IZ~Ko3P`52I~M!&%fuW^EZkeQ#uL32PdPxVng)!`Rv|jLk)Kp2q5< zJ3X-y6eo^gv(KJ1j=jof%j4K{JvNo@rXVt*vQ0udiV!rc%lgrF@XTAzs<{QOkZ_;t$|z@|tlI61W*{xCPxDcaYbMTd^Cr zVSw{IZl{)mxYKja59rMa!kf}t)IO2p)S9)!Xm9rpUrVbSX>>#)X?Px+#60BBw{h@& zHiG%RLRiAbir8=%T4=4ex=uKwyr`yvP7I^DBYGC$h&qf!Xl*nyHFO+3H8_IE&PbTN z$fZIsjE(aS8Opm{!DkKF#!o5iIN-!2)5L+`K^L<9l??{AUPqs&WRjD9>yE$?xaf3C%hfoK=C4J%*3rm. For more information on the Apache + Software Foundation, please see . + + */ + +// Ant +import org.apache.tools.ant.Task; +import org.apache.tools.ant.BuildException; + + +// SAX +import org.xml.sax.XMLReader; +import org.xml.sax.InputSource; +import org.xml.sax.SAXException; +import org.xml.sax.SAXParseException; + +// Java +import java.io.FileReader; +import java.io.File; +import java.io.FileWriter; +import java.io.PrintWriter; +import java.io.IOException; +import java.io.FileNotFoundException; +import java.net.URL; + +// FOP +import org.apache.fop.messaging.MessageHandler; +import org.apache.fop.apps.*; + +/** + * extension to Ant which allows usage of Fop in the + * same way as org.apache.fop.apps.CommandLine (the code is adapted from this class) + * Gets input and output filenames from the script file
+ * needed libraries: Sax 2 parser (defaults to Xerces-J), Jimi for images, w3c.jar + * containing org.w3c.dom.svg etc. for svg support + */ + +public class Fop { + String fofile, pdffile; + + /** + * sets the name of the input file + * @param String name of the input fo file + */ + public void setFofile(String fofile) { + this.fofile = fofile; + } + + /** + * sets the name of the output file + * @param String name of the output pdf file + */ + public void setPdffile(String pdffile) { + this.pdffile = pdffile; + } + + + /** + * creates a SAX parser, using the value of org.xml.sax.parser + * defaulting to org.apache.xerces.parsers.SAXParser + * + * @return the created SAX parser + */ + static XMLReader createParser() { + String parserClassName = + System.getProperty("org.xml.sax.parser"); + if (parserClassName == null) { + parserClassName = "org.apache.xerces.parsers.SAXParser"; + } + MessageHandler.logln("using SAX parser " + parserClassName); + + try { + return (XMLReader) + Class.forName(parserClassName).newInstance(); + } catch (ClassNotFoundException e) { + MessageHandler.errorln("Could not find " + parserClassName); + } catch (InstantiationException e) { + MessageHandler.errorln("Could not instantiate " + + parserClassName); + } catch (IllegalAccessException e) { + MessageHandler.errorln("Could not access " + parserClassName); + } catch (ClassCastException e) { + MessageHandler.errorln(parserClassName + " is not a SAX driver"); + } + return null; + } // end: createParser + + /** + * create an InputSource from a file name + * + * @param filename the name of the file + * @return the InputSource created + */ + protected static InputSource fileInputSource(String filename) { + + /* this code adapted from James Clark's in XT */ + File file = new File(filename); + String path = file.getAbsolutePath(); + String fSep = System.getProperty("file.separator"); + if (fSep != null && fSep.length() == 1) + path = path.replace(fSep.charAt(0), '/'); + if (path.length() > 0 && path.charAt(0) != '/') + path = '/' + path; + try { + return new InputSource(new URL("file", null, + path).toString()); + } + catch (java.net.MalformedURLException e) { + throw new Error("unexpected MalformedURLException"); + } + } // end: fileInputSource + + /** + * main method, starts execution of this task + * + */ + public void execute () throws BuildException { + boolean errors = false; + String version = Version.getVersion(); + MessageHandler.logln("=======================\nTask " + version + + "\nconverting file " + fofile + " to " + pdffile); + + if (!(new File(fofile).exists())) { + errors = true; + MessageHandler.errorln("Task Fop - ERROR: Formatting objects file " + fofile + " missing."); + } + + XMLReader parser = createParser(); + + if (parser == null) { + MessageHandler.errorln("Task Fop - ERROR: Unable to create SAX parser"); + errors = true; + } + + // setting the parser features + try { + parser.setFeature("http://xml.org/sax/features/namespace-prefixes", true); + } catch (SAXException e) { + MessageHandler.errorln("Error in setting up parser feature namespace-prefixes"); + MessageHandler.errorln("You need a parser which supports SAX version 2"); + System.exit(1); + } + + if (!errors) { + try { + Driver driver = new Driver(); + driver.setRenderer("org.apache.fop.render.pdf.PDFRenderer", version); + driver.addElementMapping("org.apache.fop.fo.StandardElementMapping"); + driver.addElementMapping("org.apache.fop.svg.SVGElementMapping"); + driver.addPropertyList("org.apache.fop.fo.StandardPropertyListMapping"); + driver.addPropertyList("org.apache.fop.svg.SVGPropertyListMapping"); + driver.setWriter(new PrintWriter(new FileWriter(pdffile))); + driver.buildFOTree(parser, fileInputSource(fofile)); + driver.format(); + driver.render(); + } catch (Exception e) { + MessageHandler.errorln("Task Fop - FATAL ERROR: " + e.getMessage()); + System.exit(1); + } + } + MessageHandler.logln("=======================\n"); + } // end: execute +} + diff --git a/fop-0_14_0_regions/lib/Xslt.class b/fop-0_14_0_regions/lib/Xslt.class new file mode 100644 index 0000000000000000000000000000000000000000..63a56aa9ffb25065e236ec989699cf13e9a2a0d7 GIT binary patch literal 3929 zcmbtXYj9gf75>(eb+2V5PL)TaBo4}}vgLA(y#@B|{EF zW_0%KIp6M{J$ugCy+3;AjW-cM6W%m&)Wo2Pw25OTPMY|ziI181xQS1g_@s$XnfSDc z&zN}L#0w^_nwT*0T?3yr@VJ4m8aQX*yn!bSJZa!515X=x(ZEXvUN&&Sz}F1CV&K&< z=3-|UwL<3Mt}qq~St?|ikj2;~vfV=N7I1qN$(}H7#oj8!&>^yYGWG*u#L+1ux&+cK zvi;J%M{pk$*?}+?pr;z|!M!rq8}LZGgGx5B)-`u1bi2`iPc?4zkJFPpZHZd6E6 z>|~FotYNEfP^U&Ls#7Cw#!DUOYVY2cb^5gHI$0t)%{@N7S0P%LpDXR8+R_=lad$n1 z&E>+Wn5jJ(&{!DYTh!5eO!s*kryIF7H!z^ZfcZ1Q%cm)9?A=aNgmY(!(&-EG=^hgw zYaz`dgK2O>(p*8<8@ovqnduD-3#gt&TN!wWPII`w$t7w zg(Y|1@w6ScJO*rU&eQQkzaG|hzqY+ZYdG%z1~`z} zuyWeSBEa`+ya21eA*@UC${p0&D`M}Sj*V~0WSj?dfBb}%$uao`oNU}1)Fl?WLsr&{ zTUpvVs@+7KfQ0QN=-JZQc6H=;SF}-~wp87<<-kq#`#amq^}z#lnnIN{&64U0is=!u zhQ(nDw-i0sm)7pKLEU$p;G&EJL;C)lmEmy)bT+GC=n>sVkBdTz3l$MY(qu_cm^Em* zdz`H9c8+TagHYNQ9~0*nnnH0X?k05@|_ExFSFk`WdFM?VCAymk%POd_3a=+zW z?6NwB`z$l7TDOc8MB=kBT0Z zq&*1YAi_9=Ik*q=*{_hdM`5n>)EYz`p1|UsE5Y>*k=cmBWE0v9K3 zO41VG=cvIi5XCR~-1-$(;%zkI*I0|+U_E||Zt4!5Nk z9KSg_dkoFzP@N3Y-xsjgmqmS9YckoeAlTS6jxE$t(G;zrB6x=Ew!kwm0v8YrK6DN- zA2^Oie~N0Z8x7NC^Fsop-r(VGy?&Oxd{+X0W+eQD++XRlzafdg^Y#4?wBVoU#J{kg z`~mzMNAMr|>>Zp^6?j+$@EF^(suItt5MEOz-cnWgDf>TDv+%a6!SB@^`~iQ$LtG(9 zuP;Frp2cV(LVEeeub`%R0&{!Dv7)^p8CX4rI~tNfHt%mpRoUMShXkiI@o*q1)a zn0|yvzIJEAx0K^G@%=>dVLTIleK|fyyhkM8&@w`an)mE(tq&u}Mv zlo#+vC<$@DDY}ixm556gtvUNdAyf*vR_vZ)WCSk;FP5a#Qa>@iPx=F<{135;Z9U#X z1Aff#_z4%|er&nEAK;=ouiRv8P$jB98OGNg)yb}eR+f0~. + */ + +//package org.apache.tools.ant.taskdefs; + +import org.apache.tools.ant.Task; +import java.net.*; +import java.io.*; +import java.util.*; +import org.apache.xalan.xslt.*; + +/** + * Task to call the XSLT processor Xalan (part of xml.apache.org), which converts xml files + * from a source to an output using a stylesheet file + * + *

+ * This task can take the following arguments: + *

    + *
  • infile + *
  • xsltfile + *
  • outfile + *
  • smart + *
  • dependent + *
+ *

+ * Of these arguments, infile, outfile and xsltfile are required. + *

smart defaults to 'no'. The other allowed value is 'yes'. If smart is set to 'yes' + * xalan is only called if either the outfile is older than the infile or the stylesheet + * or the outfile doesn't exist. + *

dependent defaults to 'none'. Other possible values: a comma delimited list of file names + * which date is checked against the output file. This way you can name files which, if + * they have been modified, initiate a restart of the xslt process, like external entities etc. + *

+ * @author Fotis Jannidis fotis@jannidis.de + */ + + +public class Xslt extends Task { + private String infile, outfile, xsltfile; + private String smart = "no"; //defaults to do conversion everytime task is called + private String dependent = "none"; //defaults to no dependencies + private boolean startXslt = false; + + + /** + * Sets the input file + * + */ + public void setInfile (String infile) { + this.infile = infile; + } + + /** + * Sets the stylesheet file + * + */ + public void setXsltfile (String xsltfile) { + this.xsltfile = xsltfile; + } + + /** + * Sets the output file + * + */ + public void setOutfile (String outfile) { + this.outfile = outfile; + } + + /** + * Sets the value for smart + * + * @param option valid values: + *

    + *
  • yes: check whether output file is older than input or stylesheet + *
  • no: (default) do conversion everytime task is called + *
+ */ + public void setSmart (String smart) { + this.smart = smart; + } + +/** + * Sets the value for dependent + * + * @param option valid values: + *
    + *
  • none: (default) + *
  • comma delimited list of files whose existence and date is checked + * against the output file + *
+ */ + public void setDependent (String dependent) { + this.dependent = dependent; + } + + /** + * Calls Xalan and does the transformation + * + */ + private void transform(String xmlSourceURL, String xslURL, String outputURL) + throws java.io.IOException, + java.net.MalformedURLException, + org.xml.sax.SAXException + { + // Use XSLTProcessor to instantiate an XSLTProcessor. + org.apache.xalan.xslt.XSLTProcessor processor = + org.apache.xalan.xslt.XSLTProcessorFactory.getProcessor(); + + // Create the 3 objects the XSLTProcessor needs to perform the transformation. + org.apache.xalan.xslt.XSLTInputSource xmlSource = + new org.apache.xalan.xslt.XSLTInputSource (infile); + org.apache.xalan.xslt.XSLTInputSource xslSheet = + new org.apache.xalan.xslt.XSLTInputSource (xsltfile); + org.apache.xalan.xslt.XSLTResultTarget xmlResult = + new org.apache.xalan.xslt.XSLTResultTarget (outfile); + + // Perform the transformation. + System.out.println("============================"); + System.out.println("xslt \nin: " + infile + "\nstyle: " + xsltfile + "\nout: " + outfile); + System.out.println("============================"); + processor.process(xmlSource, xslSheet, xmlResult); + } //end transform + + /** + * Catches the errors transform() can throw and + * returns meaningfull error messages + */ + private void startTransform () { + try { + transform (infile,xsltfile,outfile); + } catch (org.xml.sax.SAXException saxerror) { + System.out.println("Task xslt - SAX ERROR:\n " + saxerror); + } catch (MalformedURLException urlerror) { + System.out.println("Task xslt - URL ERROR:\n " + urlerror); + } catch (IOException ioerror) { + System.out.println("Task xslt - IO ERROR:\n " + ioerror); + } + } //end startTransform + + /** + * Checks for existence of output file and compares + * dates with input and stylesheet file + */ + private boolean smartCheck (File outfileF, long outfileLastModified, File infileF, File xsltfileF) { + + if (outfileF.exists()) { + //checks whether output file is older than input file or xslt stylesheet file + if ((outfileLastModified < infileF.lastModified()) | + (outfileLastModified < xsltfileF.lastModified())) { + return true; + } + } else { + //if output file does not exist, start xslt process + return true; + } + return false; + } //end smartCheck + + /** + * Checks for existence and date of dependent files + * This could be folded together with smartCheck by using + * a general routine but it wouldn't be as fast as now + */ + private boolean dependenciesCheck(File outfileF, long outfileLastModified) { + String dependentFileName; + File dependentFile; + StringTokenizer tokens = new StringTokenizer(dependent,","); + while (tokens.hasMoreTokens()) { + dependentFileName = (String) tokens.nextToken(); + dependentFile = new File (dependentFileName); + //check: does dependent file exist + if (dependentFile.exists()) { + //check dates + if ((outfileLastModified < dependentFile.lastModified()) ) { + return true; + } + } else { + System.err.println("Task xslt - ERROR in attribute 'dependent':\n file " + dependentFileName + " does not exist."); + } + } + return false; + } //end dependenciesCheck + +/** + * Main method, which is called by ant. + * Checks for the value of smart and calls startTransform accordingly + */ + public void execute () throws org.apache.tools.ant.BuildException { + + File outfileF = new File (outfile); + File infileF = new File(infile); + File xsltfileF = new File (xsltfile); + long outfileLastModified = outfileF.lastModified(); + boolean startFileExist = true; + + //checks whether input and stylesheet exist. + //this could be left to the parser, but this solution does make problems if smart is set to yes + if (!infileF.exists()) { + System.err.println("Task xslt - ERROR:\n Input file " + infile + " does not exist!"); + startFileExist = false; + } else if (!xsltfileF.exists()) { + System.err.println("Task xslt - ERROR:\n Stylesheet file " + xsltfile + " does not exist!"); + startFileExist = false; + } + + //checks attribute 'smart' + if (smart.equals("no")) { + startXslt = true; + //if attribute smart = 'yes' + } else if (smart.equals("yes")) { + startXslt = smartCheck (outfileF,outfileLastModified,infileF,xsltfileF); + //checks dependent files against output file, makes only sense if smartCheck returns false + if (!dependent.equals("none") & (startXslt == false)) { + startXslt = dependenciesCheck(outfileF,outfileLastModified); + } + //returns error message, if smart has another value as 'yes' or 'no' + } else { + System.err.println("Task xslt - ERROR: Allowed values for the attribute smart are 'yes' or 'no'"); + } + if (startFileExist & startXslt) { + startTransform(); + } + } //end execute + + //quick access for debugging + //usage XSLT infile xsltfile outfile (smart is 'yes') + /* + public static void main (String args[]) { + Xslt xslt = new Xslt(); + xslt.setInfile(args[0]); + xslt.setXsltfile(args[1]); + xslt.setOutfile(args[2]); + xslt.setSmart("yes"); + xslt.setDependent("test1,test2"); + xslt.execute(); + } */ + +} diff --git a/fop-0_14_0_regions/lib/ant.jar b/fop-0_14_0_regions/lib/ant.jar new file mode 100644 index 0000000000000000000000000000000000000000..2bbab1f62546bc907a75d16791e80879f50a8739 GIT binary patch literal 179136 zcma&Nb8se6`z;#Vb|$v%iEZ0<-dGdcwr$(C?Yyy*i6_bA&UX*)xwq>6&grhM>Z-2l z{m)*{TI*TQR+0sWzyN{ycVkoXQG@(17skJLd2uyi25AKeCV626X$f&vHAZ=fNBNm) zIavnAMMPN!+PRteW)bJFyTZ7LH?GV8MRQgU-rt8|m|^E7L+GjxmK zGzUN+7>JTAGz^`1v9sX6zyIe^`k(8gD*yg}txxgqtErnkw z8mSUJg@mGHbH>7|-GXdwb*t1LMeLTU-msxV$DmtnYio6HTy=2JzqV-|)zEEC{d?BS z#gsgGMEB@-=Ww>uoDaCmrP}vVx$YA>YSP&BZZ#a3m)W>DW?iH3lpf{WLnPN4cQ=BG6i=K3*x%EZpr=8st~nDbrg~-2Ra)uR;0+z*A}*ze93d=sqBh>p`1v{9aTavcYhC zJLtCuC)`_K+&3^FuKk{j@S6ngZ{+;dRDAuF4c_glIwVcCa)+p2Z z&dMr;Oleif3I=~sbtWsEG}|y(0}m$hl}%gB5SUeh1ybC36;c1v16StUsIdNQai2|J zg5!{1(+h|GDy%E23mgR|D5T(p@6Ubn>*$&f-V5cD^)j;$L&P zBlw?ZWhSs5Qa(ja@s3{fsM9UfG1J8(WRbPAA>(Me>6tZLSm51lc3j?USodI|S^Uh| zk)zp~R83zJv`LW^=p*-Qt@G9lD7?mI)B%awxUpq1u3H%Pib!|9?SU%sFG7*$s+u0+v}1KBXEr8ke_nJ zj>k5vCv%RC@PWxI?OUT7%fNU<+`8RwroflvNAg5rIb|94mZrI3#flbJos0LS%rMIS z5>qWP?5L1_`1Wp-R;J>TB;TlJIHMVhSS)IFab-#=5oUFA<;f+NSZH12+DEDO2OqH5 z9~$O!0JIDF?ag$2wr5}tU-~>bdt)VT*orl{%CQns_z~Q1jkeR|EY~FdjOylO8l+H! zD(7HfXy&0foa_$amxcb)&5M>u5W6OdA}XfdmK!Q=7hlS48MTqDpByzd(DK$U-f0d< zi=)tL)K>`NAJR&1ZZc}^ot`}5Pe+{`X<%T?9!{gz(_u<8uq=Vr!i=c{WZ2fxh@V6c zWzn%OIr)uum00Il3ezqX@WlwQ=QBBww^^LqB17AKET@#`cqKZMwv%^?7Sc2BwdNd1 zTWtP;9$|ELfI|>dN&KtM9=3psQjivP&3Ypt0m~-BK82l1JDRF?2LeiKU#H`(n(i8+ z8M|Q~hE7;YspulZrlUy_s<9QLtKXFxX;n>l!rBT~!=r~eDdlA(#rI%em!BSc5`HBI zOB+G@@!Q#O%*)@ds1?_F4c%~yv)xSEV`(zUl`?5+qV77ai1#WHYqBP{26>*V#6o@?MlUGa)IFZc=Q$l!tUP_D&jw0W55`8 z`f1*MroO6o#;|hj70KbVN3|&r1an-X9!%%a9ms>Z4-Xy`p79D8M&qC493bj|72Jui zJ0Y2Rt%F50665qmQUgmo*perl;{t#yF&|YiEDR z&1zo~7Wr-~IfL~QbO*nF<|N!WrC6Bqf>(42sQ4pQoN+mgwAyT6RV-I^2+fl2w~X?v z%#L)AQz;Y&=UW^wOdUQGUK=mEvMLunNNab(^| z70w2w%oU*>z99S)5j5Fu;37CfAR;upA*;=!FY+?5>S%8*lhKX%a`V8GKj>Y|@VvME2>} zj2ed`kacY4IuGN|uHiT8^$z@OsaB5gmpE`OwQrO;4R%laa(d2VC(3bK@e;C(jb$es zT_|N@`dMQGvVH=_xkLI}?b3$3H}te)+gb%1Z?r(;|!-SM0a-s!knm&n@KByEP#KsP4v zs~@6oc|ilT9$?iw^jO29ulsU8qCY9O^*LgqVEP~5-5$0F96Kxg`-kmFO;LPReBO)J zD#H2u=pJaBA6vnwRy(*a?8l|omDNz++38T`Ztexq&L3h1AN6w&z5kTk6H^ijyTx}< zotFbH8Tt`OeO;w)XzrK6&lbV2P}Htiq}@!bwgN0(9#=cd*h!+}P2Zu^ZL>%sE}rIP zOVoZ8_FV9w!Fo97zu8rlpMX?d;@e~+9VHPk_CS{I1^Wn8wH+>Y$Mpkw&S6yLQw!=O zD!aml^rD>!)~l}Ic7#?RM%8p-aJ5BJ3b5`P?ma7JF!)Vi3w3zPqdJC~cbbQmMGSMA z7p}CmyaV11Mx6xQ3hSpdwcCkPeNwY}kS*0xRklj?vYUwqdoMk21liS6y_vL~LD;Bn zL=zHDK9n7pVh>dy({)~k$8&vT)zz(2U+a!M0NM3Z+h}=u*~6zK^RI*U7eUdk<-*{1<*n!JWm4_wscAMZ0ph*W+>(Fy)JS6?>cWi;Ot5Z|yO zmt#v~m01UR$a#%beM*~-@A`#A(D6QY8akf!QRTm$ZK8H^?pTc;%26Rr-*D5@V>p0z zhL3gR9J)cqI#C2a(53~`Ef%_CkBF3`!{=5l#f2*HVU+<4?VV|qmUEA_EzWFkj}8Ss zv9K}0wq|6(va-|?;?2n(mH$RHN!OiZr9>B`hTF($N^)ySn6G0l@5Kdd4XToAD47Lu z-hg;T!3`@gVe+D4_b}+C;HQ&!A|%KHOFCzqXw8FclOElW(&rj3g!Df>aIQu}1*iQG z8GD#W?qDpcqv0Lu6W8;Y+=+c27uO~sL-d80yM5ina1MYJsUA$u(C z%Rm`N=vP&LOxWq72#MHK(M;eFt&>4!x``C`|B$G6V)G7*vYce|Taw7X!4WX6-d4+6 zZyx7^x;t(qbaN@=QmXv3P*DVl$Hi0TX!0|9EY+bb{g?F3Qtyx+xI}ocj+TQl&(m*z zZQp61Y`J~fiG)QjiQnl}@;0#IN~e|hPf04#@R{qI#B@KBg`87AgKd*9$Z_MP!`6{` z_IbH5lf4qZ9wBY833g5q2T6Medg!Rv_KG<#)L%k%v6luHpB-BAPY%E30#)6@+v>6y zwtnY7NEHy^7w-r>;?X|6O<4M~ zk*#@uCI?{gvQ6Co+BY2SEH^DR!Oe8k64MAm><0CNWCIB~E^@sNM3Th0ETV!gLOCQD zXXN3B$~m$LTCZ@9hzE-5IfW;BF>VmMp>IL6teJ%7r9&Qbf|hTEy^VEoMxS~caq5lv z_EKx?bWunLjf>ddJZhM3X;r%8uX1IDnmKcVw8T+8XEOa3*J1Yj64|a+>q~cU zX||bdJwFf$7zRAZFAFcSYF&?(nn~8~?=Z@@dK}2%JQ8X!6KST@mYzJc(4xYO^n4>oB5{vB#Ij_d8t{ z`pun_KU%c6(!j^7kmE-ZYJzR$YR%>W=)@T7YatAPulry0@zOGGN!@A2Y@LqPw-i3R z)Q1rJ$V?!>@Omg+;_={f)9qo$=A7q-^wp9U_kLe&PXrh2efF zF9e*eamz;0#$e7C4-YU$pPm^)GwNS+PQJVPkZd`qyk9o1*!JP&hoF^ftg-!pcjLHY zK>aAduH?uCTz1yU~Hl-~^9Q79=eH?2x( z#f+YQH@~LPRJW)BqyGBa&gLBJs+90=2XSEoaRD;Yyc%KQAo`$o3^y@PP)oBrYAm1a zYZE5%PvB=mF#i+ufBb%FoZQhU7zoH9#D9eis(;vUbg^VIb}}}#GG}sibhHC789TT# zxf%m(&CD$TOu`PX{~Z~cAHQ_X3H=q8j!Q1InQ-+rH!Q}_w@Ph?Gk&<50@CBuo86o0 znoac-mXq0av(S^0myj?!y+Fkw9e>D`4F_TGxXMDW@;Is~qpA(y{{r!UTg=a#e?2Cj z?OI+{6!M$@@MoHT{rhrLeb?`cWZ(+S1yKR@r40xN_v88mJ;{eATRahi=d%`k9M3w1VQ{?dul=DX0JbxOA$%hBCuV zISGKd5~fc#B@8>p!QK@GuG*8jSaNtkn|p*inKpIHvWJ~;lXAxVut`MWa#(jFc4_j} z!IB-;e30HGT)lTY=HL(YVfRIRweiH$Mw|!2BW~kxso=`Pf;#M%0Eti4Tr~Oh`RtH zbJ~+Cr4)IEEX>^Ktji`Ik`ghVj7?m&7BMv(os%zb1wmsk2Acb%H@8v{4HQwl(rit1((!AEGVJC$ zzxJk%8NwXTO&`5{GLzA&H9cc*(zmex=x}xEy05nz%Jix^`3MqmkxSb%0vSPq-I4SH z^p{x&ARM!>Wg(Zgrnh$zmjFDv4OL$SzFSxme_woAInd-!>B(lb#8`1~v2@l)v}6K* z0a$Ze+BRA#m>L-D-6B&*leO!7+~yjfp6rGi&S#JSBSsG}%ezgYitXAA$88zzZo2f% zp`hJssSeL_BQY^gE((KL;#o;=OAk5uVX{d>G+Is)A`ZI?9Rm{~MHX_3h?kosC{Sj~ z4VS;=>x=?`B2>ZlkD1HJtu!;ISC}mqG(#+|G)Om|Sw};#>*6stJ@zQ60r8 z9JVF;@N{$K0<^}6LZmAmQ*vqb{=7+?3sgwAMYFB*>3BqZZK|O^8JTfZ=weQd+H`&y=6-cNx`$QkmYCr6>SAW{4s9fBjOIf`nb`?f>N z9jrAu!dht>+HF%!Ed0TL3a#1m2TxTwFWWonfNba+(X=~LR40OcXHX3oAMZ1K0URYl z5_K9Qqe2fn{+RsW%Z*+U)I|Q8A&N&~3HYs0mz*c zzIUNcXqv#3*#4S`!vm&6pQrXWRt9R%z(uc-Bo|D#-eW<@oqPJKVG=%(EKCv5Y&&G% z(cxK>o`B~?8g|#75M-JHU7t1Vd*M7@41Tvm0hyLL6AHi*Gr5dqqdlIjNFLZ0+yt7<9vDzjQ4D*J9H2PnYAK3b7{T+Gym)x zHU2<{Kgz*3@l(Q{LREaNr>t`AU7|~ zbwHq=;BTLn4U8h8FFlP@pfG3SJ>C2Uk~_AO{ff^c2HxmV942H-{x~LNjsHY(jnSx} z@8?kWv7Ij@pCt-GRv@jhV~)f$d)+0SMUivGG8bZ1UEWX?xI3Dt!KordG%o$Y7>#H2 z=B84Mx4xkz=(>ldd|_+nRHcl4dwuh!=FemP7Ki=_u8*uu$@Pd3{mS;}Dg9l+#O}Ur zq0rXZzfD~-UaM>MH%J?QYybrT*29Qr4ER0-qH>&sW#~#^pMy9W^ z+672zADiZ+^*?gnFWMmPnS8uiKT7n-@DMXNHe?SgZp*(xov3*$1?M|cwU64i80PFS z%pLz3CbWC$3`5*nIU4b9GvWM->u>rXYc%6j>@*EMGZhf6DaRh*JvI7TCA2;At-+3X z{v`DmIFD;}6I=s~@HWD%p|{O_eS`l;6!2~MKo3BJfPkX>uc83${}Tc*|DTA0f1=sV z)YZ-9f93&*zN#mk-$K$^fGnZ}D49sOFco%rS@@~+(gC;-Wd{4gK$V{?@`~G5St~gZ z6{dh~b7IZc-bVe63{!{d?VY-FDdnD_-5duyk3F99ZP%I33-?|mH_cv8u4ln{9xCEc z=1{}DSHJw%_rKoBdA^T*&<7*@OX@qdzO*a(9%z86SjAli#Ki1Ze`txKQsXZN;$r?%dXU6Ku6*l_N>}?-7|mDfDFF7X|5I}b zQT~GwL$T;wQ$?;YZ8WWtp{MVOkaZwxP?W;61z><*M0#Pb-VHe4$Ac$t0oQ`G2jC|e z;k`o-B*Tj5Mq0!Z#mHL#~TsgV1hKR z`7cJOFR*Vh0r9YJDbSigbRzoke$NI7!+Rr&m+4VU@og^J1`I>=2SW_d_SEKQL$nj0 zV_<=nn^c@3DzHAPhzZ_7F3u3!soTj{)yX3wg-?8{ePqxPe%nKQ(c}279xrb+7_W8& zcT=D&G0br4Rub&5=zuDif3Y%;g0)&$I)};wAXdkWOZz8}f9WE|zlJ!xm>PwD&0^@A zVr&`QEgHeP6&ieLG=%3vg+y%Az@6f8rv38svA<0PJs7(fQ@HA zDjlnFxX;n05wU)FhbQio!@QmUy^hWD^jB-D-&@|cV^yf!-cQp<*J?Hjmi_C`PjYm{ zGb_$8PCJ`z939aCZ8I|OqJ3^nwZIYLtM;`v4ln>ax-?XcTM^Ds46KUQ&%>&T2r)A) zCLrU6P6RMENgd(N-r}&>+_GX)}|pAnu`-pZXuqiMfeo zp5!bWE4d1zXu;ES5*{!5^^(gm?ogLoFnv4bl!Vb-p=g=L0+`a{Nw8%Vc~0$&CJ3cu ze$KnVUAv*$5J-k*(VN2O!nlTCAmp3p@R93*P z*wdNY_zet=CCTSzK1or|a(SD1Zg#d5_0ukBEU{r9y?aXtYhgc@_^33ttmGYcOsFEi-*vOWs zN}Gn9IAg6{ILGZbJyw{qF*1ZQVWyN)!0eOQnv;Oon&$jk^ z;ta{vLw2d283@WoZBH=~&3ss>=8~@6SW32=7o$_kh{QloadopxBrrLWcRVnVr@Xt7EVZ`U00sB^hgIe- z9#VU|TR2ZlYH09o5~XmRJgh1lghn;m4nw0D{p?Z?q)2zH7jUJ$W=DYF^=?HK%BQc# zLip$tuRkw>@?-PmgoA~Q$MIrGTysuWsaXZV1XKMz%lZo8Chn5#MXAzGUP{xl=t54$ z5d&|{KK7@D*(v;%DQqtp+fI4;P!j*`+3KW!ua=4PJld4VRrgRYeW%#FJW{F3WXdn> z<)*@#!Q}SQA1Uo_9#NZoSj;CQcvSQsl59YJOiM1#v%Wt)s;jzHe=KwQf7r~W?I+6B z%Uhs*jVkBrxa4T$TKcAY#8WPbdh=qgrUdrDiAPWfuupIBT6AFQgowPFIN%@g|SS=?qCV>1bf zB$_$735O|PHz&!)k~KjxT+5d_Denjt%Tx^Gq=n-o+S)-&I_n+0p7vr?B0^($THM7# z{GwSAHc`l9NEIJ!I-ENfJ%-olY+Y$C&CMFXg&T(qOH63)de#9Eg0lS{2Y_C}sj$?C*TOBn>} zq0rL4fSh3!c2qmI8mrUU3>5-JIvdqFf2g-@BhXc>_^aSVPh0jWRNAKU407X=&I(hD z@)SxMfgc@}aO8y2$q{U(sFMLXMmZdU+#}xP;Y?XbAs3~Rt75ptdW1PkRY|JM*b|ZU zu1I{&dZ>7{l)%4rt$(`LuJ3e^#O)&^M`8)u%VA&N5&uxH$I|W9#ygRWzgt_gKPAF6 zN6<0mzI(Bla82?hH)IJJr?ssPf@*AARob(!ayD&^CE3uS{b8gNSH5cD%gra5n#&j* z9TGKDnB-}tMUTclqq|o)yL*?Cl`|X~{kCfQ?HHJ}zBIO@F)615ks*H=f4uTx8YVPK zMw^DVzq7`n*p7OETn7VaEpCvAAM2cySK~&TzFWUQJw@z$e4kAo#3D6Rq;FJEtv3N4 z!2&FO)E&+*+yz*u0rSRBjn1Si4UD|@!M!h^>>9|<_F|p2r8Y~VECy znQVD^zRjE5(}f|szoq?PKXH40f8==}y|>!deQsxJs{0Q-&aZNTJg%tt0(YA|6ArBf z-G(Ol2CxanFAFsJqWZ`>1U(U^y~h{5A-a*HwLU`&u^Gc`aqEW3^+IvAWEIA&(m=L^ z8C5gG3|Yfr?u-tR4iSh(*Sfdj4}b6dp|8Uq?>eGX#Qn~9l=aBQkp;R&M^ogoI3C|2 ze5ZQ^Sm9+m+BmuXG!FlHd+^Hq$xItx*tyP^j@;;M$FESsy5WQ1_SspZDK*x(#^*+0 zJBDgQEb12TM%-}63D2t~6t}|C((qlKrSEHOhB|9f(P@XU>}UQORQ&{j#oq15n9mpO zE{uqR)bp&@uy=+Reyev)Bsy?b1>9~>qV+A@2=bM|+EyrVCW!2Hs4^kZHbd%t&amor zMsS;DbUwtvdiAy)cTU|%6<5Tv*WNh>XvftG`9rs`$m#xqp2CasSP_B<9o~A7KQoT= z;HVogVZZ+)`U&&glQ%~9POuk*7bZZ^%1|-H*|$5FZ~F#dc+?-x;cI{Z&)LOEA48PG zloSeMiGV;LcSgT^1xoBpl`E3P22UKIxC0pt?u>U}W19AEYTgC7BL&{b_M*?c1ZF$> z4=s8^Ujbq5s<@n)nSUWDWnZqhD#xN%0G{4BicAl;c+ zmE$-*+!e0l8>FeJO=BGX#WHT)VQ;Xh-P6Rzqs6A(emd8~;gQz!ZA_cC zR!j!{PJQ1|r(M^>y1U)1R!OD()YDUB5igY{v0T5YcXg7ExmTKkx4 z!g)w#nPnW)pXq?Q%Jb_pAW)ql<6D?VO3+~L*JeO@aLZPl9S__NMP6r5|CqXySQka% zhMLs{VC43`7EHI8H|ZJ7>P}zLq^-B_$0AY=Lm6k7ve@0HS}t}I-z9T+flX%%2r6PF zp28VIqJPj5aT`r#_$eHBcvz@gqmyYWm+CWa_u{Er&-k3zmcP4qjq;V3|0wUWGECh5 zeaWH8=jPaFHvTU{Ayi?r7Uq*ht97{}Z}guARr?)7eTMR29X=CQ^d#V&5$#OeD`UAp zUOgNds==p<7;kd0T``c$AJ#vO=!$Itbb#o<#RkHpkwv47EyjH;#F}ozd=x%rjW}Ne zeRpTBpdb8*;DrXtJu7aHP6Z;u9~cDVkH&p{(BhA%xI^;~dH92{?*X5f@h%^qB7dKz zgWsI1#?aZJ`+;1i>lj0h708N9%y~r!cOFOWEy(3>kL-jacjug+d3}MF=gfb9zW(+W z$}5F_AjlobKS%w{%o})oLdgFP!ai3&lIzmU1CzY( zD6~tidYk2>D0?PC*yPSxj5A^BezS*q@WUVvBR8`V9~Qk+_g}T&>-y7K9GX^`w+HbX zo;7!kz9}u*_K;)q?`aPLCiai)kFYYAI!WPeW}tI(#7U`{f_{^79+kI6tY?y=-@M-LA@zd3GNwD;-_XW^KXjb%H4f=^T*BY7XEjmBZZ@Lo4|#oa z4QJ*v;uu@>Cir+W=-BrrtB(#G>G)peV z{e{+AW0|S?cvKuT6oTH(koGZxg&w<=e!_6|QhMr|EmRUt>NFkeaZ(@zBR+TVy7}!h zBNCa5$Hq^%bvd~M2J~c?H;{HYIayn%c6r}0F1cgp<&he_xxpk7Q%buYYZF4p?2QEc z{39~-?4_+CM8vOQvUkFdMtk*Zn@t^9{&JnZ+QZBH=)JXp$*7x;m}unq8rzN?o-SH2 zTYDZu8h_NA;16o#liK*JzPo=evR* zFW}>~tkhoPmAr%8$aaJFPz?op)Q393n(YFw_+D^d*pGFZZP$L?4Gc8{ZghR-n&7sJ z01q(|qo0&_YNNjPjl z-XLSot9q#v*v7QhqI4hOOr{bmpkOiFMM)%zv?1I2bulRRZ7#)v^l2NBma;wI-OYDj z2s&|pugZLKm#ZH%-LF<+s1R`bAIOG43D6p-`~GT5 zol8n-X33sGyXjoZTY2kyl@;?rs`HT3zA2A*Mi#17ih@@scDq~4lWGD#6#8w$T>op7 z;qlM6VsGVuKN*|2t)b^2iF|#funZiI4Xzzu3fD>WkL&79<||O%bhp^KCEiu#IxNLO z@OJ;$&9R?F-W-9lzCH*6^(u0G#4RSjdzByUxE-rD11O0J;_jTyo!7YYCvyjUi-yK{ zC{qDw`7Z2Npl@g%tAhD$%wF+K#yNofb2bD)DT3J(2ZCZIuNc4sS!&5+Is!?!6)5y4 z66_0uN8gd^yMXt7FfXNUI9z;U+VQ-Lwl=6o1X?n(jptMR;i70iSs#mc&@B&Zr7D^x$VWSAxxufIA+s^pTg|7>NI8W$s)^5-5%jFD z!s>4brqDXqbD8`CF4x>Mt`&T~F}iYjLNmgH{$#;RFGTUZAhha6-7J1WG#|rVa_!Er z@D9wiPBD`x|2j=sCE(7v>Ql=w6SGz1Bz%frX2T=lWghI6|4In4W|K-ir=FQJ!y+ z%ib6Ef0|Ok;MkE_L=1uR5f8%SN`*SJN$!4p~d6n%ZmwxrH z@;m!}Hdq{%C}eJ&dO7DI2>A8rD>fz0o4>ReiO+4tq&*JerQ#x4 z=FgLi!t0e*d@t|Xp?2x-m^i3w-N{qP)u(f#4!>g(;6-)bVe~Bq;( zy1x=PwDBf`NXa5^+6np2Q8)C(3%l@x9k$@?)-N<>BK?pDG-? zLo+2$Q=HXh<^wAyrPwoY{K|xZaK?==cGYz#T7NrZa(=6lU`M4Ww;z<2!U-4r<0(U< zbKGS(oB=bEgt8;3GA8h4_nCz-aRIZ^OkukGbfj{9Q*G_SeO~bjjpgT=wV0dMthf~1 zeFQy#3T+N!Ao$e4>k_6!o1=wUUXE_yjB6$tkM;W!{XKj|HOd_=y0LiI@nlz3ITe(tU( z)|CfOT2WzAt+r4C8-JP?-Guu)tD_edp|OpZSx4Q8tfi>Y@^BndC)^I?sixPG2LOAj zT+~!WmMqmkLWb2Z^%!T{sft};WRao0K1 zWddK0&fwFe8kS5gREDAx%FB4FBE48`+uD_STp0YqL6^ET+u?-71W16`At~{DpMZ75VOHZVi~e0Z$uz${b-E- zBI=VyGQkT^9CcO^hy|38jkiaLcIowr5t!tXWX)Sjf%YG|N&y`xBT`bNXNqCjJX86w z7hsSrJ0Hc-2vOKXx+V06=***vudm+yMqAQsiiB#2nB^q;Vi#L>f4W%zmB5*E68~$1 z{iqpTKl};%%P=c?Ol;)`SWLxIVrmzFdxkoK+ip`aPH)@sSrwy|uikyj|` z{Hz_ekiz2X&e@em_Fu_ABtF*^7>7y)cz<3yK5$jcABVd9&`}V&zTWl8Kg;BMotyi7 zf4!Suh_+UPcJc$^Laf2@G%}hUXbLO}L`JB=-(bE^4Xl?(AT>q%PJ>m|_2Vvw*7?d< z41A=7x_|kB)=>hE&3;q_RW6T{v9LA*n={a2A(z>ZuzDap+sfb@;RXNdG%Esor}KsZ zz!Drsgf~18fS2{$AM&$Lb>19G_mpIN>#VZgKZt^a_JYTp(b*U=4_v;O97^-0w^#gw z>EmoF%k$7Pz|j@lU@~ogp_WPr9f-ZT6n~>7v7feTVTNsft)}1KBsU(KR8!eQ9KJtG ztf3br8gx!1f99eOp3IbE(`k;fot>wL+L0od<)Udlv<@NBHAusjDmcYM3+V3atQ28L zo7@N=;U$lXb<@y~*PoyJc>b4xUqcCIW*%v(6gWyu!#wRf`Em8pB+Njz+OMnf?!-~J z2y4UUywBr?!`IczJa2`;rJsaJ+EwZLsX#+$Xr=wI;{})Wrek&GXqKPvD-efvDH$1Q z#J6FDd|pt7uge=rIdR!j)+Ya@YgnaG3NqmX&O{di7Hf>)!hDx(_AmL`_+z) zj`D<9p~09KQ0Shb8h=4hH&uZXLfcO)OT+7Suhr-uebDM9Aaf!*SN=H3IY+Y{vk-I-Zn zi)IQu)!qVERAav743S+36wyFg(cd73eVOj3ZJZ0vm$#xjw$|tpSBE`pkSR;U;4=-G z^Xz|QeqAJ(BvScB;zi4kE@D;Jat{CufJhvnf?eBNo2Podc~tBBu5ZvuXdlwMcPOLU z1{8izUj@n5MlJUc@SFShVFSd>(LU$;xi$xOE|k_>_gnQ+H$bzh@<2^I&*qV?oW499 zSt~UeX4YLe_Iq9m2?+mB%k&HuLCdY*qg31+tBFjg-3 z>7NLCk(G@;XrHY0ke|`ya~!^QEhLD);Qu4=7KLV^8o@z8CjTX$|Ig8<|8MF^_kU0g zoV?7eUH*r}d-p(J$NW2%#F4~r2Zf#j2?1p?jZ>PEG*TkXvN3368WfA39AZWqxwHPD^#9HFiR{$s|{Ehj$lJE0Jbop*>0_vLO@cg{* zN;h?|Xkc6Iq!1CqtxUQb*DVx-bVolt1y z0h&-~?SbxJ)aI-)&gA+@8H>@iq!r||#O&mVCqGm>5Nu699FTy-vq5v*$ByURPko2g ztXS57mMbDiaSWPxgX*A}b)4|it-O)IXVfG=hsbI`uh6TK=EQ^DA=EI`|0X zqoxjS^3$3L8+lI%giQ${KsUjEW0fOG3uHQQ24_0x2&_K{2~2+w2R9tIMCc*i@la;J zrzOH{Mg`v&9UQpgwmB%8m^zAnH%r$$7c8``vex($i!8@h*@y?MwK2{ByA7 z2ILoDddOQWEkb;w{4fvZIU8bQ0S)!z*;qD_EJf>+AsSy&odGS(%_cU1DTRQCv`a37 zy>mO0TbiW1TVRU2X|7jc@QGm@$#=|yPrQ`GIp19O?-!o81Hte?$5jrqWXURVti6=0 z`1CIAi|~YiYsIxpCSadKT?xJD(%LE}Yo`>xN{H(GBEPxJSG!$0vjz(CWMxX2+&Y@Dymm4~)YK!#j@Pni z&n=lusj+>_nDBa~{2A$-?=qi(TCqW&hLuejbWW76k_xLkM~AtVQLJbe>u-Ol40QA< zMw#K!9-!ObahPmcoI6_M@*nID{iH**Yxxoi$85}D_|Migu%mocTH6(gYR<1Yfdul! zrR}v*x*tJ=-}vovM+$Y>)o&ZPJ(=(UXe0>}RUO4F3O|%1$yFLYsd13d6&jFON)Ic1P9ZflwUkTmcZN#A{6R& zaYTjaUv6>a2+rz5RH>WiDPDF?k5&eeH;w?FQRj@`M0=s}znuKyKVFpwp)*GMxv9Pn z{}{?yTXS#8@MAswR@$i7VfuK`?1`|%z4%f6DDNAY*ry;%tO#(QJCybf$8q-N5u25E z{{VMg_{KmJGl<()En6n57=}+?^Mzb5yW3A$#11pz16nrr_tNy$7W+e09=6GSv1`c2 zst)Ul7^H9IkHJ;i=}J&}ogicdX(%^IlV4wr6ANOlX8~{0_uuY^Rws9(pq4Cg7MpWc z&KjWRP05;VO?Pik9{ZCGCxZ1}RnM4xm^C30R;zyOv}d+rIo%~y!*f?k#`J@J#<)8d zc>wW+G1nRl(<{>p$_e^p6#9CsU+8CgqcwsW#VpH}qG2TSj3@pekZ53|mO5z%iG#SaXs z27BFxL)z!VuT6(~qsc$r5r3;09sMQ#4+(?bV@J^cBjAyLo!$R`5~lw@B4LYvn*6`B zu$n$#Spq`w;{m1Z6WV{Ex-F0(3mY0mDziuLipUKDV8kTYevRhQG){qdjv5wV({OwHg{sj3#8l08}{e3Tg1m_^)=i>s#YVz1mTY~+#Z2{w6;O{#D{mcmf z%B}+-oJ8z{p4?GU^d0jpP!Nvs_Mj}9SdKkhm+?01TsK))VsBJ2!|4GgUB3pH^pjSI zmw3BrAo0`cA@Y0XHOs&HFx3^O1rHr8Q?Hf`pmPG@@(zJQ?Z{{~73r~08)nA;O)?(d zvYhL!A4V?J&E*@dabP8+F{GCYZ#JDdnr-)K#9}pBI=AeGTleQm9xQkBOnq}L&_*1i zsrK#mw|ibmur4HHrdyz0|2tCe{_VxzDov4RF%1q-1!=dTDt0GOWtN_*ORi~u92{qX zPz?+Xbg8kHRVHawhvoREqAJMe zpDKT)zKNqp^CU1lFHM6nI_|&!A_amMn(5AaqqlGALY)0Ulk*6&u-63O)}lG5%)gwv zLuCM|OdjRZ%yo^5!ZT{Q~ww#;YceMxN}-b4t7k!DENQ8mZ3*>VCpA z-lMezyFX@VIQJqvQs*QpGvsAGP&ly-3*@fhLF z&_+$}zjHI_U1&`AKHcZn_Pp8N=v`Bim_$DLE`e}ouSy+j#W^vrJ8#JU0r8*JwhY^U zN;(hfzXI|9{!oFaJK%rdSJx3=9p&$u`*mzHMP)L#!W4yd=ZL#%x^8C)#6)Sr3b}nU zFL_JotoM-}@S1YZ4Fd&?oTx)e91K(?5ykNdH?j;(ivKi_IP}e;S0Tn0oQchHF6XN+ z({XN7==;wNatI5Q?kEo?59SfAfyTe-zjQUZYEK1m!7y7Ez4*f$91Rn#*kbtjQD+f3 zYzf{6lsvS@k_BL)Ycf@ZMKzROtIag7!k@WYfO*)2ptqSm<6F-(({8xAwxC}|woP4q4jLQERen`` zj+>{xZa%X$^cS|~NmM%4XhhWwJr%azvfk2znLVmBCr^aC8_a;bqm+MRmp(j-9_>-5 zUD>9apVWQlYX28w?-ZR`n6?R5MHSnu*tRPb+qP|2Y}>YN^Nnr$jcru)r@O!YXU(iN z-E*?f_Sv)VechKH>R|U#t@7RcHC-405A?58^ zA~`H`BuFe)H?b=(k9>}#jBZz-Q95QcuNaeK+zAv=Evs6V>dOX~|B=yd32o628-Q(L z>}Pie`2|bpuB8>U-}d6oe0}HFgX_k}yN%&VaAXL)E9x3C^LzF5IiB7Sl_i^XM*vN` z=7kMEc^~|=if0RhUo#hC5cM5D7Qy$5JZi02{3bUt`i<@N{dmCraBvsBh ze`MOx^XW`bq1H}qaNpcWbb$QkMyLqJ^ZiUqwUbT(FqNbfW zzi;&VTZ2~wk@x=eh3P5(k>p_u{z(2FdF8J2*d0{?WY_Y7h8T zOU`g?hF*e|HS2m^I18+IJ|#I8*&m{rlf#)~+9RVZJGd;kjB7_<6oMapO227tbxv>cLH-jOlnmg7(NK2^rA>p@%F>uX@bnJ zR*vVKlh>=g=klX{I=koN)exQ0YEYGGOU_?N9p~=|?Fmjm&5`qqRs%)MKoSI7M=BRvQ+;h{d`W_4*oDt4tSF1-V&_2F#e>t2 zRP64k8Z6nsm6X;RYGEe{ELk7n?6F>)Td-^BTaD%MU`D6Yje``x<9LZ79F*q498)wV z7{yIAU@(3%9xzApXqjpdGyk={qH?ij_Gwn)EZKb@X7!wEmvw(Z6a?wGuiWLZ$u%v! z9EEa~NdJpPjX5uEKK{#Q{((^UbaM`#hthfc2Gl%t9gKz7baigoF`GLNW`V8cJ_<)s zWQ{Fz_Wsw7`qZ(GpPJ)%ZEyPF7P&0b-HGB((jc`Tyt9Xt{9L@>l4SW z*+xclqhTX1JMDE@9GTe5W}Y-St*i5IDJXk3TKg{~Tt_OiCY&lWbhUYHfqg*8Ok*hG zvF?YHsUnH$lLlOO3jVmbt=zb}qF0%)@<@Gb$}pG);Vh3}T}*C21nF zSHYdjcE$Uu6!@op{93$d#5}EtOyPsDm;jAPU6Gk8AUg7D&1uUP%y6LuS6Y;ApuGOg z9UFWM03-GiJ8s}YNoVenRhh+J)JD&Qimtsb`YNFkK~2aeAxo=l*5RaeAUSelBKl$Q^V&++0hp6^inLS@BD^3smtMUuBlFFP*Od4b5o(GgL_D}Pw0P#pP z(hsC!Ce9S$AOZ)OEW&UyH=KsnyFz^UJ7P0dyCV)|F#@DwsY$#9Q=NRjk4ww%e{#p3 z5wZ%IK6K$-x!>qQc0zoY1n-?g@BJUw7GPBh2dpc_l{ZAfi~eThEemLzjldlL!p$lr z*|u;}%!H4ORf%}J!IGJyV-Ptqj?^xW#drw=lxddw{35i`p9H083pkA{4zEui(HF$EnU|bpEj>R&M}NLA?1FL`Mu-1KNyI4+wWJgnkgCE)+8Rv}S3xBbTRs zV9;RTHb(B9;2Q2zm8wC+V|W02-%Sh7f^U`86+JHB%R$&Qg@OYa{Ea%u`uyNocr)nl-|p+-tHVH*|Kytb)%D%%mF<@;W=GNAS@$o8VBH z{}YaFU`X1vbas+u;}?Q=Z6EkZxW79W;e|f`40U9mwRN6Trrfhj9)@)y2Uc61tp@Q3$Z71eOI`KfZ*A`Z6o7X7h#vydaiWyuT5gC!E&U8a3 z0OffjHS%{b)(gyihcXsLcqHO37H9-eksf90x1`J6#kPo77Ji{BS2%FewfO~iHMvLa z=-=*u{LpyDFcS)l8L&=|Sr^I*-8=mK+4A|%=xM$>(wNMb`eFqApHSj|=Ucy~^j9+b z{~y!ZiYTg>-ZCJoi0B2SjYxez)qW$3TUHh2sv*@b_$nbrJ_1NNp&}&NHmxX{x+;8r zUv=KDVZksP4{g0#zJXikG-SvHUPzHAxXNzbbrMY9W%IhfE)&=y4hi#w?@6F0$V&;^ zD+09Pn6Z;tJWa&DuJF-1kvVw^pLGBvc9?0=}^xf|Q;=0|gC&DRA=a&^mhqk+5o(mPig zC=DY(-y-Hf1}YL$XM6p$qhgKUW@wJgG*+T+BVA^!NP_Z1q1?7yYg3<(N1^(e!4=Mf z&9g|6QUpK^2vGn7V?KHLlv#sD<;cQz$6Pp2UoYE_OqbV6;aqO6`ZHD9-X=V}6)UV7 z1ioz5VV+X>%SuCIuE>#x^5-F#6PK3gm^|9xd)h^QWm~a!6^u}Iy7GJ$YUt5qxt5t# zwYcf3T0^QS2f<3PA~FJQ8qfET%{*5Ky&Pe0z%-K%N^ zG6>+@WGbc>FM56J9#*EGwT1}k+;P1Re)de?5-gmdb-5Av%Nl)^>+wUI`*>3z=JR!c zx$>nVVLI+XwIth64?&|3#+nKrDrS@B)oGq`Gh6E* z7vOkho}2jt)eRfnYn7e;!#nGy_WgAQu`cata4jcmdfiAC2lvBpKtB&715*f%*waKF zVEiUV$~MyJC%V#4-x&T>I9)KRS+$UdH1UA)32mY-U^u|TcSN9?iL|Yd#AZTJ(7haL zaWX$;>!$G(K8>mWj*lGoLRzFG1 z82V@eTLYi+xLrior;3?bpBqRZ!w}xSc_-dTxeDiJJkM}`Es$3Ze{8%zT1C+4Z#IU* zV}uDB__F`H&HaKC07YW~T|k1+ONFhAd_k;8g}M3m^t&=|P;PUDM?ZD**b`Y7OjZc} zu6j}#-L~z|Mb)Kvu-+9-JZOcJ2`09Oyl#)f1#DIH*uH*T_SlxGdtG+b?oC}~2n!PJ8-YB#q0p%?{+r>J)+d{vioqrQTlndEe(&`gZ%$eUNs~bf% zHOZwx%+4KXPf_!}$KBb})^4;XILgX?j&0v|&Nz8U=B{Q??DJ1x-^iClUiJOkx23Pf zg8w@^`2TPO+>8zXbp*0h-9435(LOFGNE)vDk)biin2g~P*c4GM;oy>f{Vsvc z>KZjdhRFNy9@U<@&AQ6=n3^1Cw&lG+-DrjVvP{UU<-T9ruE zaSOq3z&bi#@m3igws0%yZ;H9&76~I7#>bF5$TSGKAdF#17zwGZSl_{B$+Xyh93#Q) z7&Jy)p@+pGb`(-HhZB*8%k+(h_Q&sNgIo*bnbgc-U-pU`wF(Ezj@ebfwwQB-Pmf;f z!^MP-BAqYKkXO*SMC_5l$?A1r>elQ!dx`-FY6Su8*QLQV1)2b;^Z9FOtNCjho0)6> zXKxsGOOBu{?Cic_mNz*g*@#Ee=g#1xI!OQ))O|SOA9WRr8G>;Sl%Kt^2wd7fq_dTW_MT4Gk8 zDeRyKh)9$_^}L;P5`zgBPN{OfNa8NWG#0R33F#5k#HJn##%pVkr3}^ezm^x;S3@=K zjw%&Xm8EoOu8S~?Qe%b#?hxmxrh~bte*nX=goEXAPI(g7&hIekWYgq{vzi6b##D{s zRXPGPTg;Y^m= z3{Do}8R{@r-gT5&fPZ~Yc||2H1Ch;6t=<_(S-Op}L>PPK!@FonUy0SBDsX7xQx$fW zg_@OCruypahwhO`Ea-y%s+&SL=Gn!n_9Dd6ZFJW5Kno3l3fZCwrJ0|4aO--BKYu6& zCyA3rrHYNA&raokV)MokZnX;ZOS}Kv%GTwn5H4YGaC0_~Gnx~ll{h|W?8_~{28tW1 z7dI@5RmDe82x(8DYPO-{s$3t@^mz8k@=h;OBw|!-)(M|2bTlqY{jf|6pd8dUw{Xqv z-+*bY!J68nn|5+p)fx{{Hi*g&mxOk3Pqin+n9iVURl3|$;DTqMw@NbyU!Ra-LXRXD z-x6&&g>OhWP8dyPQ?a#s^tE$g;MAMaG#gVB+It_~qs*QN1*c6w^h+`!Lu1`%3Tx>X zGeu5b5D{n5FQ!zm;u7{@mp8||hy(}B>amC<%zcmFDqUSIlT1|Tsu+(A%8)M&#WJTh zeyo>(W*#uaQb-5wP%yLfQ~xgI$ohh6p6hjc<2w_Il#2YuqJ5pU@1B6{nLY=;csEa#nDKjNDG}WK43DMbedCZ#5b_!K1AT^9v39n4NJaP=pYU zBf%o%h1Z`JRNC{#N&`7+3u{oc^jboZK$>(0S^&YPzMiMM}7fWZU{WV#* zo9F}uE)C1q&xA9H&sW!eU!YsahO-rB46oHTd>UFZI6SAg;O24Py7-e~3ty#pHQ})2 zfW`Y4h>kbs9SY1XxEC4w-TG8^%!)^hCt%gXd(l2Sl-r&gmCthAjp^g|H4dnqxUkNo zr&NkCFL+8(4cQj6cROqa?7|&~f?TlI0^zUj6RYkK3p;Gx&3Q&P4Jv^=sVA(N5P>~;53!Q7j6a!Vh<>#QLu%9A|fIiQ4#To*S5ICJ{{uO+P>&hpY)jxYYfc z`+Q8G>FyKZL2gyrN!>1(FM&6!$glnp}R!okjK;-kV3#Hy1P> z=4ZtfV^UxRQh(vjQuS1@1P^h zWaL86M4)*{dvo!?QqsN?-6=$VYp{^HM}|Dlr)Z*FlF=Ea1*My5R0x@K2}6oH-tt^b z9c}#;Ad+t)KEI^_*{)uJJ@w36YYw?w@19z6<>yt>2xp%MPjhag|A}QOMUvl~Wx8>X z+#`%JKY8NdtIGlo}A$?m7h>-hcPzPV-RRI9luQ%+-`OFs2oEo zuQ|MvhBL_V{3X+>u~lj5>W|LUYGi2dR&Z7ATGBsVYV>_ri6hZn?zx0&zn|5GRpkNy zG#ZfSKZ6{BngI+GO=kTPR{F^#DEQeZ;j}G4n#&OtPBqlVgb;i@lp)wlFIK8uc0`&m z*vkMbc``dD&d41Ljw@x^!&Rrk8^t>P7pG_&c{+nxr>q-ATfLj7(i;U^{athzE*)h2AYb;r_cBC%{FaAr)`$-FF>iJBO4m`oaL=X(-?GMACKLNh&C!+j zD^%%#eznAiR~0ewYZ~XO3-0ihJ%Mq^7xTj%rh{uVfy{K(yWC1eN{|ASR8c&3L{M$= zOt(g;S86j0xJvD>XeE7mrpayLQ7XzSFGyv7d-;=iHA(ykHO#H@vRuUC`a6jKsP5FA ztB$H+`x`pIfDZ&fh;U2FBlk@`IfMqF>KN-YE=V^qdlyn3O~|xw>kGO(yf%v7`*LUJ ztr80Qq;WG(hZX(6Ap1JQDf8+8e|9xkcN%PnN45k!>g571K)|o^JsHGY6rJ;z4Euh9 z{DVZLttVMWhx+y{0r@{+E!O`Ix4*C!$-lbO|m%uBMLdKBP?+As0?D{uI3Ni(0 zZEUY6w7rpn*p6Gcjv?j!ZXQVskdgv7c`<+}I-G;Z6hUkNYE>qbgUl2Ghe1D#!+eLw z#ONW>FM=q0umECg1j|hxcKWBS9##yF8mhgz)?qBG9e4sXaa-9f&ZG0X#fr_Q2E6BR z)e%~-L4JlGu#GmTZleb%xo3PdmaW@zUaYM?ud?GF zm2BMMhqhA1UeUf(AI|PX+M`&!&$j*@*wmFxe?hKbF+k5zjiNO zqLIE5zsEt0hN>j4&(mVcIqKv>K-!@FS@ifPA&{bQJi3CuWm&bU$DoEy&Bu(MZrC*( zeXS||(YZ;q?AZgY!+!A*FYJmGYZImLw+nye^#x5z#9+~~ssxNMvIDv}78JfiMg_d1y-cM2fxPqkaj&f@yzsHd2Fv` zt!qrDIQJyYr4~+5K?hIL#;;fJ4y@x-FZeWGj@FbpwdJa0?PX&xZFUZrPw5E%2Yy}p z8YN;Ynv*6_A_@=Zpg!#dYRfrpEbF;S3iWJW4ynur7*0@8pAcbJgSke!czc+kEL_bHHKz$8 zZCui45d3_{myv_BGH}xWivnxU%OuU%8U~7U9vM2{5lSA0kZKxT6ZVLMJJ5nT=sL3F zky$vk`@`F}2YOb8}^m7=oWwvSyfY+Ch#}j34@q!?BP0REB?VnvRBDYKug}IEL^Y7e?s-@FEmM$3+CRe65LSyK}G9I#fG~{?n1;sR_TFNkpFUk%QuXbc|LfS!} z$+gunghZ`zu(?sm(((+nsN1qs1>Bl^WkI3Ix4HZ8@?z85g~rEYjHP;y*A>|B)LiPb z%Z6!h&sY1$H0RqX9~~c*?~OZM3=<4|1Vdt&HkiZx9QZ?J3|nwOC(P~HYeP8x#q0L3 z&XUgj-OS(yZ123?BWx3vHz7fBKn+Xg^0f#UwY?7*7X)#saEKj(5TdXtn50n$2)EE< z802XnjbI8zyK#r~$P{F9zNpmSfhx_B5~5b9_q}!MaP9g{TBA~k7QGINIb>H^xX}QE z`0!kOP@>mDvnOFhfMES5J^l})4%NtzAWxA!Zw;g1{rK4%PFz$27|udq1tta^xsk+3 zV6^U@KAtX8hwY9y9{o;ev@H?+kT4#9Z)x-u%u8PEvfhcCcq`0vWi$a4dlVzy_K?0G z(N>0=#&AV_R?>y7+|137x>wqIuC0D~ycE(IVZtkk4cBW@JRko8;B=}I5ji*q^cRyr8f#`2z)hI`i7c=GYAZ-8p0RXZ6j z>Tbac@ME%Z-P`LqdT%83grR?|Vr8?qZulE6Fr5w4u8{-7vAP( zKdW+WDmfOe<2jUJ>qed%&|o%Ge*QtKJgl=@Q(qWdi(b#lRpxpRx8*iB4o6>=!z=H# zGV{PD&$R@&BI9Wwwcm~P-3;j@Q!2xKx!w^xXiY|Tp31NK+$^Oq&j8+4X==&Xmg!K8 zkkJfd-tb((D<+BABLWC0W~OMXvsL|3awQ?8L8tB(Ju87yd-yjmhu;TxV$gOleT?&o zyO}+vQ*pU)M%C#Ew5EIa#V+(yRP+sfuGT{LM+UDRMph%GeW3!kwNVJ{a6Ed_t5Vj~ z8hCY{zOBefya`z~B~Y|1ZaSk479l|Qr=dK-L@Ia+_NP=3rxr^+kK|+~%e-)k+QUJe z*gEi~k~03Mc86Q9ihjo6Hu17cF{;ycWf2dTMIfPw713hD!fObOOS0K}F!zvRff08G zn-LdyHgSObjAbNBd$3l|ZYt+;%3t_?IE{P+HMWznL5*s=anHq0#Y6Rp<@+_86zvJ) zYFHHdex5E%uI1;`JFnHE$~2s$0h?-uWN3EUOaYzTG0@`LQ;~wvKMibMg20d!hew4J zk+g)%%)2O)gq{PmMLc0@59!T_4?W6_kI%>>E$8KTq1zqk;t`F6^sW4P zST%51`+n(XBF}Fzdi#`}@>Ui0$(<#~>{VbPq3nv^k(l%LH=hA!EwpaoBPx6NMnw(L zSx5P*6J^iJzz&(bVoGd^UBHHIc(7z>Pmr1{v+Gk*t$N^FJn2S9!^F09w<>9XbVI46 zupqNqOI{#%et96b=15{~QF~ysx{zW+skC)!UpZE#IE1o7#?YYpaanSz%I`aOtIWPr zqm_^_#32-vAV@+40olP+*>PCxc-Fdf&vD_*bbV)P5 zfF^M-Y-dJZbSRn{+Ff9s9*si3sDgD<3IDUH6#eew-3lUHci`lt|D4)ykA~jnRu3eY7aq16zH9Sf4*z*!$lc`>A+_JDfx>GEYOk*1TW;eTGP&2sjh3ID^N~J zo<0P0`$gumc=mO=gI)D$A?z?*3{iq>(GVQK6y6?pzv1`mpNB}=fIwvTGxV?!>tIJ+r?2#6&F*Cd2GgFn?oN=$R)uqrt#Y+;Yt4#1*SGkt{)dU z;J~YBPyM*-jVc)@QeX`$Ym&UpOlg3}Ky?Zcjq*VKI;96%Wl~=X zc);J!$g!Qs4{vKGl=hlv;rJ9#{1|h$t05Z^!81Yevf?kh;)2<+s_HSmufgD(sb-T^ zwSOA-FZ*DX@5Ul+OD|!6+ma>~E7vEV)N+rHKstvM$6%+++6*!}ocboz3mgS}VL0yF z`5D~DZzw=@%M7pJE97gJV7L$6gD`@Ms#&G+xinMkE*tpb612xPMwG$Fl}zLS8q}t3 zPwKj%4=)6jDt&)UJPtqpS%AGwbbJK(qRs8UaNPf$HvjKRtBARqpn{ahznOCwH`K4I zeWoXDOk9}7*>E5>0*8q}+~b7sBftug@!2r(e}{uC)t}3Z^qa6>PTk6B)+v-XH8nSD zm{kbHEtWSm#>>f<(V}@aE-cMi|Kk+_Y zI+7FkKr;>P!lB8d>7y~CQ7c<1-GHOHmbU5+qN6>Pt(4?T4+y1lt4dHKNtC%qVW{$K!HzFx(W1srx)3q*Evo-5ymocx6k$+V_c8; zb_h9wP4}S3p#fH{4tqBc{Q|i<`ro<0TYn2PYgg3!Ayw*GhMXJ&9l9HL+e=2FBi7h~bTO!Y3ER>iK2 z6|$TbpvB6pD)%nbtxk=o%F+qXyv?$h>)gE4ow!sllO>J|Z`UF0#y^kb~yn zFUZX14$j#$##J@qjXwXOY)8)I95Q2pp>z774vw#$G*|)7iV45L-gPps{QBJ)J9~+7 zPH$4$xUwb%SsSR zgp?ucP!usGpU9GKj{YZP`F*`_br)x>VZOG zGM$H!XKP1EwUWt$EA8|oWJImSG9borGe24CFIhLfl`E#K~8-i{Cgzu zh-qCohr;#PefoN3D@3$r!LF7$Ejq2P2?F#iQi)*|9d|l7oil*PB*(ryZ6XWaxQfFW zX2tcXU1@^l8IL2AKlfX_TO1=v7<)RaE9YIs)ITvSKQ6O-M}e+ zrtXEJtNtI>i{B%<^*9(WFzt-`FrJHZbV?CJhRV3GQ|0dB$ z3>r`avS~Ix_G}jZlHy}(F6R_oI-#db&duZ$?K+{anxt(-!F1eEMqdps_J`p|+LoOR z6}sQvSDtSN)E9wha$9*K(3v@bt6lGB2-1Dg^;0DUlyXZ^f8>X}Dv2`5MuzGe=YMcF+>{7(OZZ{AW4B|KI{pFa1-l z>BrmNGV0N6cP!qbJSH{8c5_9I zBxcd%5^*eCHmkn>-Xuma`y0!t?Yv0%7E*&IX7@p;U7%OEiz{wF@lBO|{#u1srsMP=BhV{g-pFlQCD5+C+ zkAz*9McCu%d({}S`lsiO?Clw?JDlmI(6B7WkZ4^AroPnkGaP>q0qVm$BGQq1dyFy8 z9e;S!;j~l3-uaqW%WM;%4rcL=|ASByaGEngGo$rdd4Z;f=Y zX(;?y*XmM$sT}^1gVE_kC&LEoRNrS`ub-RnL+zm9eBbeWzoGKc-Q^bC<@W3Ole_IR zGwaRJo4f?h$pQ3A!v~#Q*D2HUKr6En=h!F3dh|LJ#mp9ag& z`zohMM*B~|o%6qHF#iMGNd%0H1RTvB6^yNIUH-=~nI$hR3HXKRwO%N#saa9?peZ0% z>VNn%8#NCV=J)lCSf1M&n`K8jS^OsIAb%0Lzzo4o46>^wJQe-`Z|CZ&``sbj>*L28 zG-!v~bV2&CC;m7(IxUU5T2rlp5PA^u7zHxs!v(xRRkzo!&Mc!d2sS*f><|wwE^_MR zh$&bbF}{Pll$^!Qy2-lrg*lzyg@_lnli7qhz1|Tv>Jba9`UY$%q7Zi4`HiWgFK7MiyzJ)Xvo&gM=U2(ILPjd99Mj}WsWv9c~;v?m2?_&=@klU7e&}> zL0fY5Z#OB=et`?5Q^K9d1s(uA#;@Hwf1Eq)2v)8}rS-kGfSSPQO$ zADr5$>HVnh@s+%qLRtZlJY&aQ;2W@zr-Gq`U=)w)ROc^=9-Jc;GL0UUHD54inX)52 zLr1W5XSKO$r_B;uX9$7DlWt>qnF>S`l#HQ>u=S{d6;9AU<57?GYbLf|>zMI>bTR$+ zOhN$4Zi{0P&sW04@?`9PqH@!ttwfh)`J&`j z7BzJWEK$88bHhWi{ObJ3jhO zju|!8^^|#(eYfE_wYk}&{d$)oWv=W8y<%08%_4e{&72W_~Rr0t4$nHlRWFe^QN{}pPsM}w`T6CSB zV4@q)p6hn-5$os!BHh%Zei*yggm(FJ|7;DYpI~QNBSbu~6Wu_dcb3l00 zHJBP*{cxM;#ld8|mQ;d$)5!b)A^xhN@_^VHPJr;H--$6^4{=i(DD@k66UZYx<5mw^ zdi+2+q-0iQqb}O0y;@6}+ln@X9(|1Vq##geE$RYhysh*=f(wnXv!vl@rr7$YXId1xczG1~` z=czTLg+wcvoS)L|7UXW4s#^Kv^cM?|p9R_11EVu&!9m9UC|BsktgFcDJNIbUK?IC4 zj^o7{Qd@mQqfk_~GXkq5A9&wXF>Te@;l-p3hYGrr**V;^t`{5q+S1nRw(++bdNV%|&qn zRo|CWyJ}&+tzIeXKsFs&RIIh$QX5p$jQ$Pk7 zYlEicA~M0}Q;y^DxpcJFtdAn#N+WMQe^-$|?pat80@3@{ni%Kf&h5G8cmlr$}FCvl=f`6+ipv z6P$I>9)iA{8FzY@)ES@tj=zG=E^|=WISy#KamN)5;H$b#i0;CCGDq_=a*cn-)+5j% z-v(3n3UnP2i(CGY8V~`dZrz8KDH6WHrXS7`71<0V{Ua8qisCIykG*QnC}TnxeH2rz zi1JCms5zU&)jPcpHk`z*)+MuKjtvJFu|y_xq9xqPYba4Jyn%fK?Tus=n8RWWMeKvVC3@~Nz)Y*^c=QkOsQg1Yjn_|o@ zWI!xtb?GxCv4OKp5M3k0RO!fGWq9XId#b#>^a$TzW30BEJpu|9`gL=7%uR6kbgW#R zzW`beOa~flg#PdT>TJMh#Tp!K_Tq$;XMYnMGxN{9iX(IL)tTD8qo_(5VxQ?ot{XJslu$#KhjPVYz`KH0|_Vp)W%)imAN3!er)n`d3!cRY2p{3Q_ zxr<=fk^g3AX(gF4@blNKOEJp>IwhFe^fV>cGDlYHneAyyiqP*{E!EY@tJ7?F%!^o- zYo+Mni%eY@;z~70Ng9`WpQKJjO(Hjt@)8hvtW$$MMErTaiUkFMdRrsK=GdbQCm)cC zxZP=Uj{OOO&T|Y8vu}HuHnQO>V&~}96)y=h*G9$}!ZWLslWYUKOur?A-s_}wK{fX^ z7hE+JO;xk?Wl+S5!fn>56=!e0W#8#rr1)U4i%v&T9} z7-Q>ii>VJQ5A5itJ!mQG5RAA8jSNLxr>8hok{^NT9Y6I=;k?yt*R&V#M8~h+*Z`a@ zaU_l`$DU8jr_wIvtc&~1HUJ`x*E>rg0}I{cD7ls`7%1me2lL~fmd54G1T=aC% z-_h|va7)ckH^ZoUn~zwLYlNg9NZ!TeDmaN&qc7*Y%GB1avJTqhz0<+U(rXoI9Be>2 zYK?HJOK!8dNP3$jco@A!SH>>=`z)#G6I4OsjlY{%M6jrgaXZ}x%|P}J6A&zIoo2KD zAPjo~8mmIsNpTj|uRl*{+Dm&{8R-EA_ zd>;7`9sqt$n_K292rg8(&vja|EYD8MBFuu}e$;kOwbMJjf^VJt2JTe3C!_@F5#eTz z*7aT=azw79MweR^xI~~9!i5JPXq|fJ0VV(C% zXG7{`qBA-BpU57UD5dKUT>(3_<>sdrxO@avi-ZVeIi~~-vjI!-_N#eno8+yfmzzhw z@ja25#7AJJec#3cP-$7!PQQCfip_#n`t{RDkTo9`b~x%-eq+16xo!Kz`#5r91ks zSd1}u?xEaQjL!6bi_!g`Q~JM`Er=Tb`vymqGesq1%+Icl@$7?I!pi*WVuM_opEelu z;3i@Ic`&6v!xI0f!Q0*2O*uT$7_e7XHddrK6pyFy-PF~M8k41;Do)=2*k4$9o;-;$ ztKar;@e5M1#{3G?O&>hHZ5_GOzmD^7dn53t+wlf=d54Ze=8*?hBR&S%aRgo>$^_a8 z`&Ilb*pUWDf#y@OQ|YsW)={|*_ZJ7Rp-NS_PWFePQrW#xs1#~|Mq5`-+?7XDR-j4| z9BuB9lct{a`UXaSF6n{;SMlu3E4 zk@n{Zg2Muoyck0aQ$dVGMfN29Vxwh#@FxyGBiRcty~?;_9vSGwdt7G-h9nsPZkif3 z;%CN?22{1I|(JM7i*5W}Fbb;Mnd<4O@&sIX2D=RLq~PC^eotaOoRDP%R* zL=T%68J_Xp+@xwiHnL|;trFCmBr7A49p`FcLVq1=J|r4n95q-3*+qf*m1Q`#?CwSK=}2N`qG*xC%9NzK zsBym(-_?3uYM6CAszc-NL@Zxs^n4P7MNF1`e7jbbuWhb#H#`%&;use!6xfe0I{6ue zN@7+&Lf#ALL=tK4$r)r$>k@5(X*044I+AQYahP@0X$9zjss-`~qoJZveye#(t4Oux z0uQ)7me%oFSXcI{U|Im&iNeY^zs0B1kltIOCi)q4rEWP(w4XxZc)8!KwQL6!=5a$y zPVt=28`|(IdwkB&iL)d-{;q5g-I1Cq?(1X`qp>(!4&WKfOJ#^#hPyPe8m0<@bLIW!zA*~ihjI2M4cbB>bDv>WM@Mz~sD6j+CBKrC;B#;Kvu(MB zacgscxeqs*kpd)~S~EW?3JVX$sCu1cSA*d>>+Lth`!QI=DjhEhv-DMLrc|BtkH3eqHO*EI`W zHoI)ww!gA%+qP|2mu=g&jV^cDHm3fy_KumDh}r94A~G@}&+;HM+VtM_DXxgPzGJy1r^2{;Q!Z4xFTNrFx{Qp5viRxq7>gz{ zXKerXWIdx^ANGgn?muj;2(*)am=CRyiq%LiU#ITQSQ#Ad*Bw!r*411`UuuVRAKt)6 zj>t>*99-T|P!8EyV1)88+^bP2Npj8{p+5`1Y?LJSK|&d(S6`{GYV}@~zkyL&8AE&9 zK)*sMB@>XX80pyhkea;{&g0P;+x7{V3LsGSNsza{UK99{+QjePN6Fdtgkc@=McW!> znRDZ+uJn^(eGZ<;t?wR^_O6YY`?lO6Thp84ye@yO?8B}@j2{xLTO`{W;p&#EAPMHg zWT6hqay+0M5IC;$j8E!Gwl#!IT9wfQ+(nsA}q)+O7Tf8&P) zMUQMeV0(pW_UmM=qcJqqWNOY(Ut755Tw?z5UswMf>{p)Jtq5o=U&@%A=B~JwD4=aG zUqfScDC~jgDDOl78&aO!R?`SUgJ)T8rWsVoIIR$^9^x6CW>TWJh~-wJgTm0Q=PBec z(7X}>ut&k5fCyol&fc1X6dgDSRMH6xZ&5KAWv+7_ zHwd0wQb$@X?_>{(5hWJ3Cwl>o(-+TmIPEj;v)t{KnMl&UteJX~C5{!Tmet%Yj8Y;^ z(JdS^z1EAhxl%SKW=)hpz|(a&=Hi+@03lVxV6!c(i__;Ow3XPQvLcVDE}0GM4LqHB z#olvsJx6ckfkKIG<827In2EWTv36|-OOiPE|Jrm;N38u@@^Pk0VADg9zTG~mDetLas8_F4i!Om_en3B_5K9}2k}jl zv?R{tlWOsqwXN(4{cxdT>3(d64DwQC@T+PcM)R-(SlfDzIowR0i25gFeG&NJUGfo_ z>9=3w2<{Lzsj^u{h!qEJm9E-Ggm+nPa7I2Q9#W+^{J2g<<`mIu{||OAn;G^}1e8^q z_)<${v%=s2fmD#L*RU$mO-qB)IWB;X0O>Ers9KwN1Blq~W4t4UK9ERf1&bGWxsRz7 zPuG~K_6Ov1Wf_oX145ay``}wRCg<0Zj|$KSm?Tm7IP72533PoL^82jP6!Y6^7&ay> z5;+7#x&s&lT6iv1wmZ>ON_-Z%rkxRgNce5hjxIK1)fm5^*|q8tdozevt+9>UpfE=Q z5HJteEekQDx82(lL|D{^|MCkd?l(eN3YfK+yh-WLtDo55i2j*F+IOA4b{{gM-j%`& zsdPdu;@y5svJLRs0F`qA_XPyRQPw#DcFDg9>jZ3$%f|iw3r?C_^SE{Tk@c|rWKI76 z>@r9ixElQTUU-VS)eo73=}W$D%r^PUzMWL$q|ATZmd;WkUK4RaB#DfW#lpN#m3$r0 zV9bp2vyoQZtg@tgGTlOzwq3_=E`_GKR)+dZS>8ITn>v+G?z_2pc9H*6=iQe%bK0~q zpj0l0*KFps$D{YzJI!h4VBb%VC&qATPZIG{@B-RU95EMqpIMLxc}Q5$n=O1aXzlk9 zdk_cGkjIZ(Ot$hRCGuG1r$bZ}%>s>FrK@T`Ia05}9WacEW~S1Wzh4l!s_YFIKBuA! zkqRMH9l{ zWoorRr>bWS=3Ju*)D76d2#lo#`DRSuBap*KOTtIk^J$a2fem;Qfs8sRm;6KewfISN zvUmd^De{oVQX6!tWBK^?1LCmq1kqc*06&?(AmuFF7{OX_Pz>f8b%qi%u;L5@!|j9= z?xDe&zfgj+;*5re8ey#1%O>j$m$LFu54JLv?8#UskrnUJ0=N06hw4psUh69d6i}z@ z=`6NPV=!YOhqA8K)!SvRU;7FOI=IM4_0&ze?5_}nM3qRpA#gsq7SbCiDsmD6+HXaK zlTxr4aR+1mqMJxjG-mgM8!esSGhu80l_kN3owPY&*(99!tt{6{N+MwrwfaQS*67K# zUcFcfO=saj_>omU5}Y8dSo?(K`Lz_f)aQRH?=w7gmV@GHzU6AFsVBGnF$BUDfrF=_H=8S2;D>lMhoR;dT&Dt;_yJb|rn=PCR;Bb~FVPA^3aQS(2Sa)J>faaxCAktDr5%gX2STH%rGGVet;Q!O8Z2PNZo}1WovMO$^AaRuG2j(E zlBtY_XT;@2m0B&8&lw#lk|bwnG&FTN=#1Q@^RlFdIZpzckw_GC=A+VJo;mtM;abbA zZ{e*xgvEJPDe;eil>|#og*!MYIA%qtN9Qz1XW+!Gp%tyIPfcE+TLddbM*Bgjm+6c? z@9`F=07Cl6+oBxFKa6)hH3FtH7ExNJ;+93T&KJXM% zdK|{l)PpQb*48&_)0#w4W?Pu3+Ehsu&f3@Tt*1JRVK<2Nc@x)j%AEIvYT5Ojj2qN zn|q$}JRK-(X~^+D$@yr4Z2h)W>Jr$Bw<0tURSkKn?2|TR8l`DY?7H33ndz#VSNDNi z2A$Kc6BEt&&X*DX$pss5`1BG%;o#|BUC2!+dSV06P~ZcHwf>D0uL) z=19VkjN@f+?? z;Y|&8cOkXjfNzGAQ!aapXpbyjfI6;Et9vEl!;xN`7g~6qprSW5>TM}_i|-;HEz?0R zbpzQ-o7Lr=*ZU9jUqZuoJpeTq<)_QL`Ob1t-Vp&kH`w4pGa4`VeV)j3(^@+7?UKn*zE9F$R>R16I-|%6Qr0X;5loL z%Y^d#AiJqYO>??iF>$OsfrA*C7qE1(SSqToVTs{3aRxpluWw?niYOQVZR8V)pyBBGoGUNJFPj*)}MqXOD&GOg9!uv*I zDA&UBK0qkJey;F%o{rcCn*Cr7U0Zfb$D8ClmyZm6Zql{V+an+R`5!vjr6q>CxCQgu zd@Kg5^bGu+9b_Twkt^(?8k9FYadccrw|l%v!a-Q-B$I>z4!1oN_iKLB;2Z^kX8MEE}r{DcmvoX9YaihNjZFn9?t&lGQGx94!Nzol-rAf zp30Jpfjhfe4<9@wxu6YMDnJS4|D z0AnHBIgM$O?*L=^#XX>L-fU34oDllif$tiI*0Qghhzp~wwEl`4w^|Jl z4ZrYD2fN9bgT`%{mbk=A+o}G4n{9aG^~wp&%7RjI9;sjPCf$5S)X<_ zmN{&%^29AQ2;GY7v$p<#UVoAwN8ie|wMu;3*xp^|A*;C$e5Fu&h5%mKce>`J+WWq$kfT*u7ZV#n_hD1sLNw}mBVy+&oc}a3F1fH0|Aq8?WTOrThr0M{Q z<`DBP8(5&fT%d9uD7B@fw)7)aQT;n{?RDkFtdT|V`T0qlyZQJ-BJe(Y&$d5@l=^zx zV{?{?#IU=E2i?r>S_e77&M>=o^y3AYVR*OogTm4=z5E8p2G6y)=?9->a&PG;1y{q+ zHoCzHs)XZP*rf`hhSSx*@eVS>@^0#ffy=SFsRv)h%wl=L2%2SfukODDZ^iWf*}pKl zSqINGx!D5GwYwn)=Qp}x1^-^&ZH4=a>c_|U$nW=Ke_2Rjbv}{eY5x2;Q(ZDOh zz#*K*dmE}>@;(%0&i&l{gPH{|aa9iTr*7g(Zjt+n@cjw>z$+NSbU|8ivr@R;{hYI> z?uagGN2|z4Wy6yTg31DMLw{??6`H|!PnfUZ^+e=z@Bt`-$~;}h8Yzifp}raX@?4l< zrCT0vC$BS!57Cg{{T$LmdEK{kM{d+uobkF_!(^|S(S;WRZIPYv6O6^Du=*zf^;c5N z6~E}QAB+;1%sQ!~-w+MA$nBPXA1tzKI2Or8FS1PU%t$27>6esg{+u3pj$Uu2jh zQhb4W;3*Q;{Q!C^Dc^rV^n*d%rEvIS57 z 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

#Br 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

*^PLE=Ap) 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/specs-label-2.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/specs-label-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..7a877bc6fcfd26ca28957eafe94a2cf3c186151c GIT binary patch literal 2613 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/graphics/specs-label-3.jpg b/fop-0_14_0_regions/docs/html-docs/graphics/specs-label-3.jpg new file mode 100644 index 0000000000000000000000000000000000000000..37671dd42cefaae15ed745d57531052880c58e16 GIT binary patch literal 2159 zcmbu;dsNa{9suwkpjeq>_`uNPE3=t$#e6qpsafVD@|B9>W3y31Lf3pzQLgsTbgVH; zM;vuV@llD11dfk#6wqm#EHEW8HLA}p4oHuuRS~8d+s0i-0%IK@8{lg zH7_);fGt7(f&Ksl0ss*005p?;pLX@<;!}}7S3!GP^AmvB0Bi=xFvvClih#fn5Dgcw z*7m9Udu`y~0fEAFbm4j%Hg3|_Ca|^uPzVeL)q&~i>gZ^*&ujMq9fYott+OxOIPAFI zwoDV3g7P0W*d1UDn1=J^+g+1R7jE2yG~0?Yx8L#k7dv;kxqEo-`4Z!I@R0xEfWV-L zW06tOxR}@zUnQrco+PAYW#{DPkJ*b zvfp9<K&lNI9dy0<(D+!c2yQyg3^TGH2l@;7OoC{iGe z$S0^$IYQ6axD6i{3lfaS?zx>e9H1(hRxNi{@x3Zi%Yv0XF`|)tG3eR-eox-ID_^l- z=`w>WJuIJZVC*h?vi4h3>Ya%g4gt;}=FS@}e>Awe2s-HC*Eb zs`rF7uaRpB16)h%3<5|yEk9A0`^yIlWS7IxhXcH>tPYm9Lb@?yo_WL$EoSU0C7z(2%6P??6cL%$8=*8Ekv#1%CI?#W@fH zo~rvoXw4l$eSc&80N!tl=vW0!pO+0xDRZ0Pn&4y9=a(5MvE3mdu~<*IwZ!UeD?Q%^_RUMblz;g zJ~`Y13mdFVump>^)(BOh_h;mUWiIAA=V{T?^RtTvNb}GzM*}2ZKQgb#FR((5`cF(n?>A{(RYx{QT?@0+JXTJ~(?HM17vQ3{9 z8(u%vwq4M+nj!v(MH462{Np_)xjnxijilyu8r!^fwK6lIsdri$<@z)^Kbv2@=(wX& zBo4GK=l^|wiQJ6Sf5k3X=x&g^FBK=(09SJ~fF)iYM$XU|f~5&m1VO6s-C7DUl)tXXIWf?lS)ab+>R=FC@&gX}7gB$Vt@W^p_e z4eXobdc(b3TOIO)#ifb-nIKw?LQ@E{Wfs`c`}H!1HBXKb zV|XnG(axhJv5Pq4nJ;~F;0#jhHAC@m;i~Pd?QBgwe41PuCGhftcjY%NsJjLI%)Y?y zUr3kUs#AKK@Uiyo^oF>p_!nt%q7_Q0c;CxMJ34aB+nE`;XuIVFZ&Ouc2+^|x+|i$; z&Sg3kD^{4}?iMK>;ATmNiCR|UclwGjhUyTE`*qA_=lN}TeB(&e*1=)1wK2JZC!&eo zl&t#FRrRsm$M9t*xER(t>&{U|pFeatures
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
What's Implemented?
  +

The following formatting objects and properties of the xsl-fo + working draft (27 March 2000) are implemented. Please have also a look at the + section on limitations +

+

+
1) Formatting Objects
  +
    +
  • block
  • +
  • conditional-page-master-reference
  • +
  • display-sequence
  • +
  • external-graphic
  • +
  • flow
  • +
  • inline-sequence
  • +
  • instream-foreign-object
  • +
  • layout-master-set
  • +
  • leader, but see limitations
  • +
  • list-block
  • +
  • list-item
  • +
  • list-item-body
  • +
  • list-item-label
  • +
  • page-number
  • +
  • page-number-citation, see limitations
  • +
  • page-sequence
  • +
  • page-sequence-master
  • +
  • region-after
  • +
  • region-before
  • +
  • region-body
  • +
  • repeatable-page-master-alternatives
  • +
  • repeatable-page-master-reference
  • +
  • root
  • +
  • simple-page-master
  • +
  • simple-link (internal and external)
  • +
  • single-page-master-reference
  • +
  • static-content
  • +
  • table (minimal support)
  • +
  • table-body (minimal support)
  • +
  • table-cell (minimal support)
  • +
  • table-column (minimal support)
  • +
  • table-row (minimal support)
  • +
+

+ +
2) Properties
  +
    +
  • background-color
  • +
  • blank-or-not-blank
  • +
  • border-after-color
  • +
  • border-after-style
  • +
  • border-after-width
  • +
  • border-before-color
  • +
  • border-before-style
  • +
  • border-before-width
  • +
  • border-bottom
  • +
  • border-bottom-color
  • +
  • border-bottom-style
  • +
  • border-bottom-width
  • +
  • border-color (only one value allowed)
  • +
  • border-end-color
  • +
  • border-end-style
  • +
  • border-end-width
  • +
  • border-left
  • +
  • border-left-color
  • +
  • border-left-style
  • +
  • border-left-width
  • +
  • border-right
  • +
  • border-right-color
  • +
  • border-right-style
  • +
  • border-right-width
  • +
  • border-start-color
  • +
  • border-start-style
  • +
  • border-start-width
  • +
  • border-style
  • +
  • border-top
  • +
  • border-top-color
  • +
  • border-top-style
  • +
  • border-top-width
  • +
  • border-width
  • +
  • bottom
  • +
  • break-after
  • +
  • break-before
  • +
  • color
  • +
  • column-width
  • +
  • end-indent
  • +
  • extent
  • +
  • external-destination
  • +
  • flow-name
  • +
  • font-family
  • +
  • font-size
  • +
  • font-style
  • +
  • font-weight
  • +
  • height
  • +
  • id
  • +
  • initial-page-number
  • +
  • internal-destination
  • +
  • keep-with-next
  • +
  • left
  • +
  • line-height
  • +
  • margin-bottom (only on pages and regions)
  • +
  • margin-left (only on pages and regions)
  • +
  • margin-right (only on pages and regions)
  • +
  • margin-top (only on pages and regions)
  • +
  • master-name
  • +
  • maximum-repeats
  • +
  • odd-or-even
  • +
  • padding (only one value allowed)
  • +
  • padding-after
  • +
  • padding-before
  • +
  • padding-bottom (only in conjunction with background color)
  • +
  • padding-end
  • +
  • padding-left (only in conjunction with background color)
  • +
  • padding-right (only in conjunction with background color)
  • +
  • padding-start
  • +
  • padding-top (only in conjunction with background color)
  • +
  • page-height
  • +
  • page-position
  • +
  • page-width
  • +
  • position (allowed values: "static" (default),"relative", "absolute", fixed )
  • +
  • provisional-distance-between-starts
  • +
  • provisional-label-separation
  • +
  • ref-id
  • +
  • right
  • +
  • rule-thickness
  • +
  • space-after.optimum
  • +
  • space-before.optimum
  • +
  • src
  • +
  • start-indent
  • +
  • text-align
  • +
  • text-align-last
  • +
  • text-indent
  • +
  • top
  • +
  • white-space-treatment
  • +
  • width
  • +
  • wrap-option
  • +
+

+ +
3) SVG elements supported
  +
    +
  • rect
  • +
  • circle
  • +
  • line
  • +
  • text - tref, tspan
  • +
  • path
  • +
  • polygon
  • +
  • ellipse
  • +
  • g
  • +
  • svg (inside)
  • +
  • image
  • +
  • use
  • +
  • defs (including referenced items not in defs element)
  • +
  • linearGradient
  • +
  • radialGradient
  • +
  • stop
  • +
+

+
4) SVG properties supported
  +
    +
  • style
  • +
  • fill (style)
  • +
  • stroke (style)
  • +
  • stroke-width (style)
  • +
  • stroke-dasharray (style)
  • +
  • stroke-offset (style)
  • +
  • stroke-linecap (style)
  • +
  • stroke-linejoin (style)
  • +
  • stroke-miterlimit (style)
  • +
  • stop-color (style)
  • +
  • color (style)
  • +
  • font (style)
  • +
  • font-size (style)
  • +
  • font-family (style)
  • +
  • font-weight (style)
  • +
  • font-style (style)
  • +
  • x
  • +
  • y
  • +
  • x1
  • +
  • y1
  • +
  • x2
  • +
  • y2
  • +
  • r
  • +
  • cx
  • +
  • cy
  • +
  • x (list)
  • +
  • y (list)
  • +
  • dx
  • +
  • dy
  • +
  • transform
  • +
  • rotate (transform)
  • +
  • translate (transform)
  • +
  • scale (transform)
  • +
  • matrix (transform)
  • +
  • skewX (transform)
  • +
  • skewY (transform)
  • +
  • d
  • +
  • id
  • +
  • width
  • +
  • height
  • +
  • xlink:href
  • +
  • refX
  • +
  • refY
  • +
  • offset
  • +
  • points
  • +
  • fx
  • +
  • fy
  • +
+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/index.html b/fop-0_14_0_regions/docs/html-docs/index.html new file mode 100644 index 000000000..f0e9360db --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/index.html @@ -0,0 +1,70 @@ +Fop
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
What is FOP?
  +

FOP is the world's first print formatter driven by XSL formatting + objects. It is a Java application that reads a formatting object + tree and then turns it into a PDF document. The formatting object + tree, can be in the form of an XML document (output by an XSLT engine + like XT or Xalan) or can be passed in memory as a DOM Document or (in + the case of XT) SAX events. +

+

FOP is part of Apache's XML project. The homepage of FOP is + http://xml.apache.org/fop. A list + of the committers to this project and the tasks they are working on can be found + in the file Status +

+

+ +
FOP Objectives
  +

The goals of the Apache XML FOP Project are to deliver an XSL FO->PDF formatter that is compliant to at least the Basic + conformance level described in the 27 March 2000 XSL WD, and that complies with the 11 March 1999 Portable Document + Format Specification (Version 1.3) from Adobe Systems. +

+ +

Conformance to the XML 1.0 Recommendation, XSLT 1.0 Recommendation and the XML Namespaces Recommendation is + understood. Other relevant documents, such as the XPath and XLink Working Drafts, are referenced as necessary. The FOP + Project will attempt to use the latest version of evolving specifications. +

+ +

Secondary goals of the FOP Project (also, "FOP") are desirable requirements that also have a high priority. +

+ +

One secondary goal of the FOP Project is to deliver a follow-on version of the formatter that is compliant to the Extended + conformance level described in the XSL FO. Any formatting objects that cannot be translated into PDF will be explicitly + identified as such. +

+ +

Another secondary goal is to promote the conversion of SVG into PDF. The most natural mechanism for doing so is within + fo:instream-foreign-object FO's. The powerful graphics offered by both SVG and PDF are a natural fit, and it is + desirable that FOP natively supports an SVG content processor for the fo:instream-foreign-object. +

+ +

A final secondary goal is the continued refinement of the FOP design and implementation. In particular, maintaining the + separation between formatting and rendering, continuing to support the AWT Viewer renderer (backend), and providing + new renderers, are all desirable objectives. +

+

+ +

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/involved.html b/fop-0_14_0_regions/docs/html-docs/involved.html new file mode 100644 index 000000000..8b701fce1 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/involved.html @@ -0,0 +1,70 @@ +Getting involved
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+ +
Read the Status file
  +

The Status file contains the list of features people are working on at the moment. + And an outline what steps are next.

+

+
Subscribe to the fop discussion list
  +

You can subscribe to fop-dev@xml.apache.org by sending an email + to fop-dev-subscribe@xml.apache.org

+

Sending bug reports and feature requests to the list is a welcome and important contribution to + developing Fop.

+

Read also the archive + of the discussion list fop-dev to get an idea of the issues being discussed.

+

+
Look at the developer's code using cvs
  +

Between releases the newest code can be accessed via cvs. To do this you need to install a cvs + client on your computer if it is not already there. An explanation how to connect to the + Fop source repository can be found at http://xml.apache.org/cvs.html. + An introduction into cvs and the cvs manual can be found in the + reference library.

+

All changes to the code repository are annonced in a special discussion group. You can subscribe + to fop-cvs@xml.apache.org by sending an email to + fop-cvs-subscribe@xml.apache.org. If you want to contribute to the development of Fop you should subscribe, + because it is important that you follow changes being made.

+

+
Contributing code and documentation
  +

If you want to contribute code (p.e. a bugfix) or documentation (p.e. an additional example), please do the following:

+

1) Make sure your code doesn't break the existing one and that Fop still compiles.

+

2) Create a file which shows the differences to the existing code.

+

3) Send this file to fop-dev@xml.apache.org.

+

One of the committers will test your code and commit it to the code repository.

+

BTW: The Apache project knows different roles for contributors, namely 'users', 'developers', 'committers' and the 'Project + Management Committee' (An explanation of these roles can be found here).

+

+
Get familiar with the Fop related standards
  +

At the moment Fop is mainly a tools to render XSL:FO files to pdf. Therefore if you want to contribute to Fop you should become + familiar with these standards. You can find their internet addresses on our website.

+

+
Fop's architecture
  +

A bird's eye view on the way Fop operates can be found in the document FOP Mechanics

+

If you want to extend the functionality of FOP by adding new formatting objects, you should do the following:

+

1. FO Object: Write a class which contains the description of your formatting object and put it into the package fop.fo.flow, fop.fo.pagination (if it is a property it goes to fop.fo.properties. The classes in this package are generated via an xslt stylesheet located in codegen/properties.xml)

+

2. Element Mapping: Add it to the list in fop.fo.StandardElementMapping (if it is a property you need to add it to fop.fo.PropertyListBuilder)

+

3. Area: Either your need can be fulfilled within one of the existing classes in fop.layout, then just add the code to handle the new fo/property or you must write a new one.

+

4. Renderer: Choose the renderer you are interested in. If you worked on an existing layout class you must add code to handle the new features to the already existing area specific method in the renderer class. Otherwise you have to add a new method.

+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/license.html b/fop-0_14_0_regions/docs/html-docs/license.html new file mode 100644 index 000000000..a7497aa72 --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/license.html @@ -0,0 +1,74 @@ +License
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
The Apache Software License, Version 1.1
  +

Copyright (C) 1999 The Apache Software Foundation. All rights reserved.

+

Redistribution and use in source and binary forms, with or without modification, + are permitted provided that the following conditions are met:

+

1. Redistributions of source code must retain the above copyright notice, + this list of conditions and the following disclaimer. +

+ +

2. Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. +

+ +

3. The end-user documentation included with the redistribution, if any, must + include the following acknowledgment: "This product includes software + developed by the Apache Software Foundation (http://www.apache.org/)." + Alternately, this acknowledgment may appear in the software itself, if + and wherever such third-party acknowledgments normally appear. +

+ +

4. The names "FOP" and "Apache Software Foundation" must not be used to + endorse or promote products derived from this software without prior + written permission. For written permission, please contact + apache@apache.org. +

+ +

5. Products derived from this software may not be called "Apache", nor may + "Apache" appear in their name, without prior written permission of the + Apache Software Foundation. +

+

THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED WARRANTIES, + INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND + FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE + APACHE SOFTWARE FOUNDATION OR ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, + INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLU- + DING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS + OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +

+ +

+ This software consists of voluntary contributions made by many individuals + on behalf of the Apache Software Foundation and was originally created by + James Tauber <jtauber@jtauber.com>. For more information on the Apache + Software Foundation, please see http://www.apache.org/. +

+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/limitations.html b/fop-0_14_0_regions/docs/html-docs/limitations.html new file mode 100644 index 000000000..f2f194b1c --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/limitations.html @@ -0,0 +1,102 @@ +Limitations
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+

FOP implements the fo objects and properties listed + in features, sometimes it does so only in a limited way. +

+ +
leader
  +

fo:leader is only supported in a very limited way: you can use it to draw simple rules. + Only the property value leader-pattern="rule" is supported. leader-length can be set, + but the value is not used. You should wrap leader into a block element. +

+

+ +
page-number-citation
  +

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. +

+

+ +
list-block
  +

The fo working draft allows describes two ways to markup lists.The list-block must have as + children either: 1) pairs of fo:list-item-label and fo:list-item-body formatting objects, or + 2) fo:list-item formatting objects.

+

At the moment FOP only implements the second way. Therefore a list has a basic structure like this:

+

<fo:list-block>

+

<fo:list-item>

+

<fo:list-item-label><fo:block></fo:block></fo:list-item-label>

+

<fo:list-item-body><fo:block></fo:block></fo:list-item-body>

+

</fo:list-item>

+

</fo:list-block>

+

+
Padding
  +

Padding works in conjunction with indents and spaces. It is only implemented + for blocks. At the moment padding can't be used to make extra space (indents+spaces + must be used), but only to control how much the background-color extends beyond + the content rectangle. +

+

+
Tables
  +

There two limitations for tables: 1) FOP needs you to explicitly specify column widths + 2) Cells have to contain block-level FOs. They can't contain straight character data. +

+

A working basic example of a table looks like this:

+

<fo:table>

+

 <fo:table-column column-width="150pt"/>

+

 <fo:table-column column-width="150pt"/>

+

 <fo:table-body font-size="10pt" font-family="sans-serif">

+

  <fo:table-row>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

  </fo:table-row>

+

  <fo:table-row>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

  </fo:table-row>

+

  <fo:table-row>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

   <fo:table-cell>

+

    <fo:block>text</fo:block>

+

   </fo:table-cell>

+

  </fo:table-row>

+

 </fo:table-body>

+

</fo:table>

+

+ + + + +

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/resources/bottom.gif b/fop-0_14_0_regions/docs/html-docs/resources/bottom.gif new file mode 100644 index 0000000000000000000000000000000000000000..f39031efaae730d0ec92157c618675a0c1dc65b5 GIT binary patch literal 1075 zcmV-31kC$KNk%w1VW?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDI000R80HFvRNU)&6g9sBUT*$DY!-o(fN}NcsqQ#3CGiuz( zv7^V22*HRPNwTELlPFWFT**l?yw=dtndjtCw40tfp!-x|?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDCPM&trV0}zMw2R5((HJHb?xrawX~)6iCDZu@Ux&Af{oHpqzO{Y#1y(P~QCN#Rf{5 zOUah`s`Dxp6g|T993nYE-j}g1e*vj4_A&fr@eiF$cvXA~-?;1*Js83KY4>GD}VLF1yFxs5txtBm+{9>pf;B+Gg6oJr3hpDv)^a(gcs6hcZlt6LGDQ+Y~%q_^kr;9Z9kJX2$$*9|!=MPRlxGSQ(kx*} zma=LHMJB!s!bUW%d;tX;x5xs8A-+%v#UH*Tdx|f2KoQC-h4^wF!+s2b$v~*M28AoE zl!1vb#Mn}YD}Lz_4IUZ$;)^DC7zV{BM+_5-9lm`6g(kh+aR(8^0OLx(cqP4&Uj8cW l^hA0=q0-b;S8er40>z;9)?9b(_19pBE%w-Cm)&(h06VFp5`_Q& literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/button-asf-lo.gif b/fop-0_14_0_regions/docs/html-docs/resources/button-asf-lo.gif new file mode 100644 index 0000000000000000000000000000000000000000..134580f37773ee6a17028532f5ee31559a6461e2 GIT binary patch literal 1519 zcmV?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDCPO;3KJAeL!cCbwP=VQHL(1O3S}v zk)L2h-uSwdDA=7*!5{_yf#US5CO^@3__s_E2*Rc#VEd{AFs`sdnLwq` zB2Xs5$WhBGh2*jc9l<05#~^=LSeHO?L}Ws&$o#3Vz|vdbG#La%d6^DgsdwOe$(b6AWgKXu?Jju%to+Eo#^j3L64J z@@pz9KFLWRm-GRPDp26@Ux17JF^3$b%n=_Xf25X1G@%Rg&L`x0>vM$OsR(}m}TP198g$dN*_buF>u7AJTed`twA9QD5kxVtQ??Z;+iXT z^x?`7LqH;jVNg)QSt)Y#M#;Sk&v6PYLxfT?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDCQCxsuPq>vY;>`@~Ft3I7K8uarH@*DJYX{rRh`TjzCC7+yE+q=!~sLi+~|{HD_QM zO2LSoVv`0|u3f0;K-mL}*sn}q5T2O>C!yZ71z##poApa$YF>!h$JHdC$!iy5FFct0*eT{e3FfS zf3QN$fCBB3j6kS}5XUyD0HRGOi-0qT9DD3xAQXn^;YcBa0FnkApY&14DV!Wg5O4&| zfs8cKuyTYpkwCFZHpYN*j5NSN;YKpQ_<{;C+GIjdG{Y=mNixI0A`l>_P*cf3(I_F% zC>bt8jW)!j0SP#IbW)8pX$a)VCA56>$Id;$(5dsJf!8||_8h#cKi zMg#?oLUBkDjYLz)8BnOP$|X?_nb(vDePT=@Y$PFzfoudr3uMMDBG4tqJW>WQy%Z=7 zt9ux83KXLlqX!hFB$JIVc;JyuA!?+O3^lpfk%lq6!tx6oj~tPV602|vMIfc5AqyOb zjB*Mia;)+RjN=YOC0;ON)M?B#SELsdD&?&6&ODzaPz*o^E%eYt7j5*>NGGlI(nALX F06Ry5`xO8H literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/button-w3c-lo.gif b/fop-0_14_0_regions/docs/html-docs/resources/button-w3c-lo.gif new file mode 100644 index 0000000000000000000000000000000000000000..d383d3dd98d3e5e959f42862d19051439fbe9b5c GIT binary patch literal 1495 zcmV;|1t|JQNk%w1VPF6h0QUd@)6~@fNq+!Fd;m>?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDCQB0N)i-FrJxu(l_=F6IH?#x2}Q{gCMb+jrNNVGjzC4J*yu?Gs7xwEg@({F6=&d= zMz3IHQj@0CDps82K)F*2)(}Wv5T1$SCZXQ61x?j*vnv>#QMT>`Yjh~sDmcL&RqB<- zRWLk|e6bN|D43s0!8Gar@s7w*qF|K;bePj|zK?fETM=r6r z@(C=yECR(RyAV+c5wQ#b1sk>uF~lZVLP8KLvee>85wZlvVkWsXGLS2@2y_XC(G=ke zENLhb%pH>K63dEEly?dxl)M2&B$>>?i5rd@NDy!YeKABZmjDt>FtYLZ3mmHi!-+tt z1Ov)=*FjMUB2ZAg5)2V($P$brPz-X19MOdGh9+^yYRDbCq@o6Ujs%lP9Kcj|N;HW6 zk;);gG*ZTZpFHwpfq7ke5G6$Pp@uA{f_2Y%&`WnLu#~ z5q3az;7&OG<*^UpvBE%eYt7u|C}06QqG{O$k% literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/button-xml-hi.gif b/fop-0_14_0_regions/docs/html-docs/resources/button-xml-hi.gif new file mode 100644 index 0000000000000000000000000000000000000000..01d095ce444055458e515e2e8b973d997e97ef43 GIT binary patch literal 1464 zcmV;p1xNZvNk%w1VPF6h0QUd@)6~@fNq+!Fd;m>?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDCQaJ=@pwfwhSqXh6qZeU4Qz}x??a=G)V$K71`xVk3dth;0QDnZ3z)Nok~HGBg>DU zT1BFbBKYW+u~l!Nj4G1L72`OpkPs8ykziVbdqk*`MGVR&aJk$J1II`axIhMLffJSn zO0;8_ko|(9M;kcEgSr*}apWoyt?hciDOv;$m8M1mAAwW#C>ty&!FoZe7Rx%dM~n<{ zkY2wT1PM4ISoX;_OT1zXbIw6W5FR3+LV+XJ`9g;@!a%Xg5wQd#8#r|gRLeHI00T}U z>_wAHBm=#&3>#1^7zZ%9AVSS4c7Ov(9Ev0|pl=8@0**G8g(A!;;FzLKBM}yq2{@ck zAPW>lAV`fOXHb*ND&XiL3OI5MWJ@)mfVtj$oft9@EY+w11t;Ca(Tg_PP~%2=i#W24 z2ty83AVGIjlS(uqf|3LtnHT~Nl;DKo2q23L@rEzcydsSVb>srf9CA7W&Mvex>F5xE zgknf7+u@-edzc`dvPT_5=n)B(ff%z(8Aq_<94KWFLrfs5Y!hf*27y9L8hiY5$Rk6X z0mU8B4Dv@Wz5FstB);^Ki<^7&vWO|D48+N@P?++{8IS~{#4dP@vI-P)>;gz2*lLRh zFokJygc7pM0fj4^K!J%bcidqM62P!>>|S_9tPz0{SA3CPP^hHw#vFHil0Y$pEb_=C Smu&LMD5tFQ$}E!{5CA*TWa#Sv literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/button-xml-lo.gif b/fop-0_14_0_regions/docs/html-docs/resources/button-xml-lo.gif new file mode 100644 index 0000000000000000000000000000000000000000..5719c7ef09cc60290140914f128ccfe496faff45 GIT binary patch literal 1458 zcmV;j1x@-#Nk%w1VPF6h0QUd@)6~@fNq+!Fd;m>?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDCQYD$&{Kns{RaO1qjNbReJE8nqx4KD@Fn-rCJ5*jzCPO-U$5TipZ%rk}yGuQwk3r zRH;~9B8X@Rkxy=*T$&t84wN^aXu%TQkziVbcY1L;1q(`~V5`{33T9|fussG*1$&hS z3M(Rxat(oU$5$}OeSoF^LKG^{sqJ=x4Js6j6Qn}}6}3;4s}z)1t`zOE&nlN9L!%s| z*KY>N*NbJ7_(Fs!L@?(ZbOh1S%O=qv0);C>#1Ts@P<#SQDX+*DjBNs;0t_od1QQ5* zuB@`iK&C{a1{9S1^2QLW08&IIas;Eu8-oNQpl=8n5{xgFRT7IP!C=x$bI%n7NidN_ za|#rx1k+0{gPf7eDxU;%hb6(pF;FVIR1)Tj?MdRtK&9+bT_nK3;fgQ56v0M%g&^Wf zFGCJQAVG8N!U-!OQX)$oko>`1Ai-FIh#rNA;)W}=m=a4ba;%bJb%-E$N|TO?qDLiv zpt4;Z>aq6-Aa}@@G0Gi_P`L*Yt9${=C(c!(D=d3(@=Ks~8AQn`Y1}cyABc=n1{8C+ z(uW?dV0g(QuHdoCAKbZ82qv5i6bZ6WU}8!cio8P0Ds)`($!M(Tu}8H-TtdeXg+T%f zEuTRlN+eJ`;>sLyq(aLO@Af7rUJP$EV8ak!q!$z_Rc!Ia7@s6i3>uym;}Kao)Jc;jO`JHfx3{;uySt;KqrJVosi~>4v9YeMuC}(e zsHmv0urMz#FDol6Gc%Kc#y|&TKFBW&Z2ujan4EN^`cEt=I+$OP zl2zOHU_*tE-t6-)wp8V|`K+F~qsDLj?e{; zp8%%|CqMu6nKNe1oil&-!g-4pEMB&B#gbLaSFe~dLsFWJgU3a3+YW*4yEg3Y+b4P8 z(EcL_j~+gD^2F)mXHWHQ6BHL=W#@IDar4&gJ9qEhfAH|p<0t$AH$|nnnc23wuKBR? zJ<8LRdynE0RJ|Ns9CXBZe}G5~=NhyaN@Fp2xHaJHS=#aH8Zjm_BCI>|nA M4hKhCn;3&N00aLJ0{{R3 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/green-bar.gif b/fop-0_14_0_regions/docs/html-docs/resources/green-bar.gif new file mode 100644 index 0000000000000000000000000000000000000000..cd65efcea5334f2a99b424a32e0445fd9748cfb2 GIT binary patch literal 44 ucmZ?wbhEHbWMmLvnE0RJ|Ns9CXBZe}G5~=NhyaN@FtPT?H>d?LSOWkEdkPEy literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/green-hi.gif b/fop-0_14_0_regions/docs/html-docs/resources/green-hi.gif new file mode 100644 index 0000000000000000000000000000000000000000..9641ea1e189acc3c26b0a94440c573808e6a728f GIT binary patch literal 41 ncmZ?wbhEHbWMp7unE0RJ|Ns9CXBZ$r2SkCy8JL)S7#XYq*QW=* literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/green-lo.gif b/fop-0_14_0_regions/docs/html-docs/resources/green-lo.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d0c7aaaaacaf9a97c8e41d0a106e1e10ffd16a4 GIT binary patch literal 41 ncmZ?wbhEHbWMp7unE0RJ|Ns9CGZ`R22SkCy8JL)S7#XYq(%%P* literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/join.gif b/fop-0_14_0_regions/docs/html-docs/resources/join.gif new file mode 100644 index 0000000000000000000000000000000000000000..02e7611bb01a96edf636138a9c9eddac6ea9c94a GIT binary patch literal 1268 zcmV?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprDeZ5HebzNSsK~3JW9V-W{x$ zkmJIJ4X%VBwg&jMBggBDq#f%$MF4Xr=9J`x1ac-=a?_f`!KJ%@)(Q=|0FFKTc zi?{Qq)1X6(N<5l$X;YtAc?u;em8w#v8=nHDX>+I9vuE$!o5i)InJZW@wws4G?b@~@ z-^MjJx2{>WY`emhOV{r~vIadWmbrN2yn75tnK5I<%v390u*?F0jwxft^&Ur_T={b5 z&7B*o4h>l{Wy??~pXTft<;X$W*P}O2ojL-%e(2co!-z6-=-|;)zmvUt`0~+b zAAb7rw~>GE#W!Dl_vN=Af9R?9nQh#)b51$pcry+;=6ur*SQJiJ;e{D)*x`pei3r*} z7GkI&haQ3`;caDY$J=)6$pcS2>9EtzJMk2Dm3c(wxMPn$26@(vMbe`qk3Iq^WO+A6 zXyBDtW~t?tS6a#Cmtck|=0@nPW9FG?rm5zdY_{p+* epMVA`=%9YqiQAZnCaS1mUM}kBqhQh$5CA)iO1&Qd literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/line.gif b/fop-0_14_0_regions/docs/html-docs/resources/line.gif new file mode 100644 index 0000000000000000000000000000000000000000..fd25c3943a9e9c195943c5c32c91ff27fb514e72 GIT binary patch literal 924 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 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/logo.gif b/fop-0_14_0_regions/docs/html-docs/resources/logo.gif new file mode 100644 index 0000000000000000000000000000000000000000..53538c3f6e4eed6df9ab91d453b4371fce04014e GIT binary patch literal 3223 zcmV;I3~2L5Nk%w1VTS-b0QUd@)6~@fNq+!Fd;m>?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprD&@Ywc0!>R*?B~nGEgu%4K&biH(4kUhB&zqjE3N7ClH6Z2!s=f zD(W=HGT_7l1tkJ0c+-ZT4J6!&ht+jkViXRw1UN&2j=AmnGf-|R{I6ZmO zA&nd<&=R5**(IU-^c5;d}gTUt9wrW+T(XWVtUgEJQcagh(@L=kaoKADrlO2wl`>@EqaP5d_2W6&=Li9 z*$9!~OnWAhlvYJqo95+)Qv(Q?kQ1vK0zm>5AGQ`PxdVCTEI0*@$f&0%CYz;C*1l_s ztB3IFhCs3oWob^}+JYfZ7EZ072XjK+pgO4Kz>z1{kPtfe9#_FoFdf zR3I+lY;{+&**=*7!2kjTaDW02JkUS{5qPjc0~mC0fd(q5P(kNTl)%B}7?Zvgn`Pg; zQwbVi@PGjas6D^|2}IyP0}wb6dk3L6uR;nHs9-`9B_y3W3M3T2R&Sj3w(o+bY+_22 z&1JXXW~O|i*~~Z%+`sZUA%O}?0F7tt?g0sio&cs-y$;AN0=H|x22`*C4Wu9g6-dGO zMvwv&q`(5=yFdxl2bI`(=6&yjLJB!Ev#*`3H75HXt!#!kojgGW8E67Dpn(Dos6Yd8 zOQ72S0?;@KM4$lktq*2iy^Nb*!M~ey9ODrho*_fQAVG z`M09XjD_?|;l5nM!koNs4vnzRrL7_a~rgYw7@-DD5(o1Y5dV?ShO#toVzn2%th#WX=hk+DS&W{zSWd(F-f(>AMH8H$3C_TV zGpZ;|==g6jYaEIRewWA-oS*{Xr$$2nqvju`-=En^3P1SG%!s(ffq2Ov~) zY5)aLDBv@&VGU=X0Issxr<?6u=D%&+w>6J6Hk^9@TffOF`~7;K2s}WZ;Jx zC@me8dJSjz_89_A0cfXrIskSh3R1u#=5nXIfgW~;983WfoX}Yvk^luGC_xESZ~`Zs zKnhBAhCnq}g5j2jpT^~j6ii?O&0(Mdy8~efyqf_JcAx@LIKfPPmw^rBGOH#vTx!y5 zyaJnrnkY4}g3);1elFO+p{0&XCQRW9Tlm5zA?}Z$a2YRn_`@I$v4}@Z;u4$q#3)X& zidTGIZt?ZOFy_f+Y8IglBiK8YvhnF|lj9rjcuhLq@M^Xtlr(ay#XvE#l8fBpB?raH zli}+Ws;~tvbfF7e*g_Si5S1xc`N~<|a+j%WWh`r%%TV!hnZu0cqRe>zCsp7=3tj+& z7{mYuFK7W52o_`PM>^7>4s@Jj7JO(5v5k#vWi#8^(3WL5jXgbFFge=yr38huZPG-E^>R!LJVU67-+De(D9Floa7@n zIm%Uz>YKD2p7bR@ed>MQ;?|2E_OVC3>Wyss*TdfQx~Dy=z14*ncq1M2 zAiL9@jt_3kAPhk%{_&H~cCt7B`O!B%@|ACW=R+ST(%*i3_1CTs?+YahaRIRo#K8`d zXCCr;UxQ%&j)NVHqy2=B{N3X}f5zAU{_dxL^}v5N;eYmre*y@3`tT1lkbWly1$GvJ zcE*0VH*)vD4}^dh!Da?F@B`$~4izYJ7np&0QF9#Vfgl)yBdCEU*nuAyg7vU~5Ga8( JD1iY106Q4!Bh&x@ literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/note.gif b/fop-0_14_0_regions/docs/html-docs/resources/note.gif new file mode 100644 index 0000000000000000000000000000000000000000..3394222661fd41c9149007dbeb4515e2082ef1d0 GIT binary patch literal 295 zcmV+?0oeXWNk%w1VH5xu0J8u9goHc1yjXX4IH;&lP*5n(&uMFGHrd&8!^3Cfp3ic<=f$+pbF0)T;N t)5^>a4#HJE0hZL=-T(q(Q3mDa=K_R^?cVg?M*{fy_~`rq{{9gF06P|FeAEB{ literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/red-hi.gif b/fop-0_14_0_regions/docs/html-docs/resources/red-hi.gif new file mode 100644 index 0000000000000000000000000000000000000000..4128eab6ca34d5debc58f7ddf1c034b2e453cab3 GIT binary patch literal 41 lcmZ?wbhEHbWMp7unE0RJKM*iLfewfUi8C-U`7knA0|4D_2k`&^ literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/red-lo.gif b/fop-0_14_0_regions/docs/html-docs/resources/red-lo.gif new file mode 100644 index 0000000000000000000000000000000000000000..75eb812cc786d801f2581bbcea576f0159f8e033 GIT binary patch literal 41 mcmZ?wbhEHbWMp7unE0RJ|Ns9p8K6K1M1#Z`n3#MR8LR=*cn6CB literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/right.gif b/fop-0_14_0_regions/docs/html-docs/resources/right.gif new file mode 100644 index 0000000000000000000000000000000000000000..bcb50e38678d5a18d968358e8c4928a98ae8bbc1 GIT binary patch literal 1202 zcmV;j1Wo%#Nk%w1VI2TG0QUd@)6~@fNq+!Fd;m>?%+JvPQicFqjsRAP0ArN^V3Gh| zk<{4QrKhL>ZJhvXn*eE=0BD&2XP5wGmd@nv?e_WrccuV#r2uuL0Cb}ObD{upp#X89 z0C1lGZ=L{dogj#@yVv5MuC(#^`v8Hi0D!Fkf2;t0s{nnf0DP$cd#C_-rT}=Q0BMc` zYmo+($OLAI1!9E;UVsg#;SQ_i53J@9tKkc7lMjlx3~`tpvF83qT0e!|#*!`Xtw*@ng0bf~(D$J~j> z+l|THk;~qc%-@sD-k8qdna|*v&EKBU;;7c;tJmhL*X6F+=Zvnou-fOe+vv93>ABwO zYk-Hk-s-;M?!DmanzX&drKP2yprD=;>n1>J}N}Py>37IUKrZI%V zv7^V2Aivzua^nUhjUK^x0m+i38BO3)t^~u8CKQ`EL7KrbN+!pZP=E^k`OyjsK|Wh5 zds!@Y_SB!^&FXN%gT3^o<`faG#J)_Q>!j)mh(s79cQNn&Jnld(y$Nj<_(v2RnU*KwuatW zG)U6O^Ey|%+xYa?)_>!d?d^QCZSR4XCm%h&x#q_0>rNMXKD@`}%;mp#9h!XZ|F7)@ z*jVQYxY&01#bDrk{5`gyWpgdKUrm!ip`d@CS$1J_VvV(-eyB|d1r9nq_}OPo_3&Va zAQ?r9gdtMZkr`gJ0fLDPdS%8HSdiini!GU9g%?=-(2PU)?S_L5EVMz&k>JE2<&;!b QX{8Q5kOD$O-~}*y|@;mvj1QxYTOc>XsWJk>%MR-&+f2wM6U0A@BhG{a7ZiyZKaWN Q$!sD!&ZuDzfNY>Fh|Ltj$Y2csQN9XW literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/www.apache.org.gif b/fop-0_14_0_regions/docs/html-docs/resources/www.apache.org.gif new file mode 100644 index 0000000000000000000000000000000000000000..31e3a3597069b916c167da35371de272e61a31f6 GIT binary patch literal 566 zcmV-60?GYHNk%w1VPpUh0L1?Q|NsB*`S0KI-{0)t&+N~?<-fVrxv$@^pV^;}(vN@4 ze{-vIa;kE0#&BT2U{JYGK(jzNh&V8;Fd(KN5T6haZx0H03INOi0GR*)l>h*d004{t z0Du4hdjJ4t00000EC2ui0Av6V06+!*ASRAvX`X1Ru562XSVtlNFbRMlPBr4x4iQek z10XOpB;Y|SC>u0{0&sW)0FWud8Yp6>3hm>NpcJs;K){T}P_BuqLIfj0AQTE@g1Ji| z5*U9N6L)unczO^dihO+%dK4pni<5gINtYsjjwOGRf_RmHdX63!s24FVtgWuECX^&~ zu(h^*mA5LiB0mWPS3gHMKLNisG{po70707#4^vJx5)DQa4-F7F5Ht!DWE3?G2LK9D zRyHFv4HP&NX9s{e;O2CwtGcX7`nCn%%o@I0LL+ zNP8GO$N-uH05cpfp9VmH!=_3cPXU1X51)KsK6Kqvz-!Pip?5lI^GzokphA%0$wHoW4VTaAavt| z3`AGZfzwD&;aggf#KqPsXw(o%$3%yPuyfn;K(M!g1raKE7*4#n@#DyoD__pMIr9(z EJJq7wxc~qF literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/www.w3.org.gif b/fop-0_14_0_regions/docs/html-docs/resources/www.w3.org.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ecc0e2970aeb079100b7b182010fe437c0b96b4 GIT binary patch literal 487 zcmVh*d004{t z0Du4hdjJ4t00000EC2ui0Av6V06+!*ASRAvX`X1Ru562XSm%le089cPh?9*tHisxD z=m8KI+fZjj_5zQ>4H5D6 zY-$q)0u)LmcW;1eX%cOUEFKq=7cpp;n3*JUeKTj8plFGqo|ixg1X4gqIY0rZH#M#V z2>?Pgwg3UNwj%`q1tdTR7zegg0uK^86vkzdla{2@)FK566txX59yZ?Z2%p*1!M@FVXm#t*dxh5^e2hPY^xLSc)72LOnPAZQSwLJYN#kdSu-1C=ch zjA5z5O~wpEIcnv208vK(1UU$7U_cmB2LK8qSOO6F5{v{4zdBju=*3GKU^}0!kR+`I zLY1}XiP-WWAk32Vm?i-rA}I!`7#t80;!~>*t{mwc7#kK^G>`Stj-UvTn~4tP)XKfo d&6_s^3nEnTz_+j8zkmY^9!$8f;ld#R06TRKyO#g} literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/www.xml.org.gif b/fop-0_14_0_regions/docs/html-docs/resources/www.xml.org.gif new file mode 100644 index 0000000000000000000000000000000000000000..beb94be8c52f2808a6f76bbc31650fd49ae73d2a GIT binary patch literal 511 zcmVh*d004{t z0Du4hdjJ4t00000EC2ui0Av6V06+!*ASRAvX`X1Ru562XSmz=DFbRMlPBr4x4iQek z10XOp3?z2|G>`y{0-%6e3joLz@dyMcSO|s^03^!Q70d;JP$-az5+b2v>X=Epop-~< zV|I6LbZ~NbRwZ>5B8z~9aV#Delov5Bn3szLsWvpP z1PK5^A{01Yj5Q5S1P@6`BQy=VHdqIAITTH4DwCEnrPbCa1qu|lPii&a0}B=$8yVN< z=+Wux?56GP#P4e@O%JvO6aWDd00jA2+{#cOKt%$6;GmT$Rfa_w5$0l+o=X_wlr*h{ zFqXCwj3D^npUk8fm_pIDZ{WTpLv{KTbEcn!t&I+dr9za_rFUpm(AX$bU5O6n(#jR( z;hS9p3nEnTz_+j8zkmY^9!$8f;ld#R06W~yz=8-BJV>5Qxw7TUm@{kM%z1MN06WyX B&4~a2 literal 0 HcmV?d00001 diff --git a/fop-0_14_0_regions/docs/html-docs/resources/xml.apache.org.gif b/fop-0_14_0_regions/docs/html-docs/resources/xml.apache.org.gif new file mode 100644 index 0000000000000000000000000000000000000000..6fa4e5bba81c7da9a70d72c4bf1eba108af79e58 GIT binary patch literal 528 zcmV+r0`L7tNk%w1VPpUh0L1?Q|NsB*`S0KI-{0)t&+N~?<-fVrxv$@^pV^;}(vN@4 ze{-vIa;kE0#&BT2U{JYGK(jzNh&V8;Fd(KN5T6haZx0H03INOi0GR*)l>h*d004{t z0Du4hdjJ4t00000EC2ui0Av6V06+!*ASRAvX`X1Ru562XSa(tZkN^i(01yNeI^GVV z04R!wM~w&|C;<}y;DPwj0#sX3fstMxilndbtt!T%BHldLk4(6C;OzTXTwWCWnQGb%}$2Bpw%=7cnlMprN9Mh$nBOC3bzNDRYUepQk5m zOF;-lSOP*kiVqDCx=aTYx^)d;KT!b`4oPYcQp#BfBT)hr4FCu}Qxj|r5^W`#oiea2 zTj#J22oDqh0d7+B0}B=$8yV{R{4KKm00XZ0$7+bcbOPO^$cA7-fMq*&{Ez~Xmmvc4 z2w+eng_?tTQ!sp_D4~e1A0p?K33w%9WRpWpj6kRnK$jbHC!hhi<_FCXgK{t)2$pV$ zf|_g!prN2AofIDd3P?>b0?imSe!2i~Q_ch%2NYJ~L0{v`=RAO%XJA2u3LZj> S9!C>oFt6r@-1OPj0q{Running FOP
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+
Prerequisites
  +

Following software must be installed:

+

a) Java 1.1.x or later (If you want to use AWTCommandLine, you need Swing)

+

b) An XML parser which supports SAX and DOM like + Xerces-J. + (Xerces is the default xml parser) +

+

c) Fop supports SVG (see Features for further information) and + needs the w3c.jar library. This library comes with Fop (xml-fop/lib) and must + be included in your classpath +

+

d) Optional: Fop supports the jimi library for image processing, if it is in your classpath + when you build Fop. +

+

+
Starting FOP as an standalone application
  +

There are two ways to run FOP from the command line.

+

a) Batch processing formatting objects (fo) files:

+

java org.apache.fop.apps.CommandLine fo-file pdf-file

+

b) Batch processing xml files (includes production of the fo-files):

+

java org.apache.fop.apps.XalanCommandLine xml-file xsl-file pdf-file

+

c) Previewing the fo-file:

+

java org.apache.fop.apps.AWTCommandLine fo-file

+

Each method uses next to the fop classes other packages. The following describes + each method in detail.

+
Method One
  +

One is to first use an XSLT engine to produce the formatting object tree as an + XML document and then running the class org.apache.fop.apps.CommandLine with the + formatting object file name and PDF filename as arguments. You need to set classpath + and set the used sax parser according to your enviroment +

+

Classpath settings: You will need to include FOP and your XML Parser + in your classpath and so you might invoke FOP, if Xerces-J is your xml parser: +

+

java -cp fop.jar;xerces.jar;w3c.jar

+

org.apache.fop.apps.CommandLine fo-file pdf-file

+

If you want to use another sax parser, you will need to set the property + org.xml.sax.parser to any other SAX Parser class to use. The following example shows + the command line, if you use XP from James Clark: +

+

java -Dorg.xml.sax.parser=com.jclark.xml.sax.Driver

+

-cp fop.jar;xerces.jar;xp.jar;w3c.jar

+

org.apache.fop.apps.CommandLine fo-file pdf-file

+

Note: The xerces jar file must be included, because xp has no dom support.

+

+-
Method Two
  +

Rather than performing transformation with an XSLT before invoking FOP, it is + possible, if you use Xalan as your XSLT engine, to just call FOP and have it call + Xalan for you. To do this, run the class org.apache.fop.apps.XalanCommandLine with the + source XML file name, XSL file name and PDF file name as arguments. You will + need to include Xalan in your classpath and so you might invoke +

+

java -cp fop.jar;xalan.jar;xerces.jar;w3c.jar

+

org.apache.fop.apps.XalanCommandLine xml-file xsl-file pdf-file

+

Again, if your SAX Parser is other than Xerces, you will need to set the property + org.xml.sax.parser to the SAX Parser class to use. +

+

+
Method Three
  +

If you already produced the FO file, you can preview the results of your + transformation without using any pdf viewer by invoking FOP with the viewer + application. You will need to include FOP and your XML Parser in your classpath +

+

java -cp fop.jar;xerces.jar;w3c.jar

+

org.apache.fop.apps.AWTCommandLine fo-file

+

The viewer uses the swing classes.

+

+

+
Running FOP on MacOS
  + +

Ensure that you have a recent MRJ, and that you have downloaded and + unpacked the XP and SAX distributions. The xp.jar and sax.jar files work + as is on MacOS. +

+

Drag the FOP jarfile onto the JBindery icon. When the first dialog + appears, type "org.apache.fop.apps.CommandLine" in the "Class name" field. + Using UNIX syntax, type the names of the input formatting-object file and + the output PDF in the "Optional parameters" field. +

+

Click on the Classpath icon. To add the xp.jar and sax.jar files, click + the "Add .zip file" button, navigate to the file in question, and click + Open. +

+

Once both are added (the FOP jarfile will already be in the list), click + Run. A "stdout" window will appear and display FOP runtime messages. +

+

+
Problems
  +

If you have problems running FOP, please have a look at the + FOP FAQ. If you don't find a solution there, + you can ask for help on the list fop-dev@xml.apache.org. Maybe it is a bug and + maybe somebody is already working on it. +

+

+

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/html-docs/specs.html b/fop-0_14_0_regions/docs/html-docs/specs.html new file mode 100644 index 000000000..54bfba28d --- /dev/null +++ b/fop-0_14_0_regions/docs/html-docs/specs.html @@ -0,0 +1,39 @@ +FOP Relevant Specifications and Links
http://xml.apache.org/http://www.apache.org/http://www.w3.org/

+ Home
+
+ Readme
+ Download
+ Running FOP
+ Features
+ Limitations
+ Bugs
+ Examples
+
+ Compiling
+ Embedding
+ Getting involved
+ Architecture
+
+ FAQs
+ Specifications
+ License
+ +
+ +

+ Copyright © 1999 The Apache Software Foundation. + All Rights Reserved. +
\ No newline at end of file diff --git a/fop-0_14_0_regions/docs/readme b/fop-0_14_0_regions/docs/readme new file mode 100644 index 000000000..222eadd9a --- /dev/null +++ b/fop-0_14_0_regions/docs/readme @@ -0,0 +1,16 @@ +Content of the directory xml-fop/docs + +html-docs Fop documentation in html files +xml-docs Fop documentation in xml files and a script to create pdf documentation + +design UML diagrams showing the Fop design +bugtests contains a set of xsl:fo files which are used to test + changes to the Fop code +graphics some graphics used by the examples and test files +examples a lot of xs:fo example files +examples/fo some simple examples to get you started +examples/ + pagination some simple and some not so simple examples how to use the + new page layout tags in xsl:fo +examples/svg quite a lot of examples using svg + diff --git a/fop-0_14_0_regions/docs/xml-docs/build.xml b/fop-0_14_0_regions/docs/xml-docs/build.xml new file mode 100644 index 000000000..8be735c05 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/build.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/xml-docs/fop.xml b/fop-0_14_0_regions/docs/xml-docs/fop.xml new file mode 100644 index 000000000..4889db954 --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/fop-0_14_0_regions/docs/xml-docs/fop/architecture.xml b/fop-0_14_0_regions/docs/xml-docs/fop/architecture.xml new file mode 100644 index 000000000..6b2140f6c --- /dev/null +++ b/fop-0_14_0_regions/docs/xml-docs/fop/architecture.xml @@ -0,0 +1,284 @@ + + + + + + + + +